Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronic Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Register Log in

[PIC] I'm having trouble implementing a MikroC code for PIC18F458 that i found online

Status
Not open for further replies.

Kirthi Kulkarni

Newbie level 2
Joined
Apr 7, 2015
Messages
2
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Activity points
15
Implementation of temperature sensor using CAN protocol :
These are the errors i got, it's written along the lines where i got the error.
Some errors I've listed out in the end.
I tried alot couldn't fix them, I'm new to PIC!!

Code:
void main()
{
//LCD_Init();
unsigned char temperature;
unsigned char data[8]; [B][COLOR="#FF0000"]//ERROR: INVALID DECLARATOR EXPECTED '(' OR IDENTIFIER[/COLOR][/B]
unsigned short init_flag;
unsigned short send_flag, dt, len, read_flag;
char SJW, BRP, Phase_Seg1, Phase_Seg2, Prop_Seg;
char txt[4];
long id, mask;
TRISC = 0x00; // PORTC are outputs (LCD) //  [B][COLOR="#FF0000"]'}' EXPECTED ';' FOUND [/COLOR][/B]
TRISB = 0x08; // RB2 is output, RB3 is input
//
// CAN BUS Parameters
//
SJW = 1;
BRP = 1;
Phase_Seg1 = 6;
Phase_Seg2 = 7;
Prop_Seg = 6;
init_flag = CAN_CONFIG_SAMPLE_THRICE &CAN_CONFIG_PHSEG2_PRG_ON &CAN_CONFIG_STD_MSG &CAN_CONFIG_DBL_BUFFER_ON &CAN_CONFIG_VALID_XTD_MSG &CAN_CONFIG_LINE_FILTER_OFF;
send_flag = CAN_TX_PRIORITY_0 &CAN_TX_XTD_FRAME &CAN_TX_NO_RTR_FRAME;
read_flag = 0;
//
// Initialize CAN module
//
CANInitialize(SJW, BRP, Phase_Seg1, Phase_Seg2, Prop_Seg, init_flag);
//
// Set CAN CONFIG mode
//
CANSetOperationMode(CAN_MODE_CONFIG, 0xFF);
mask = -1;
//
// Set all MASK1 bits to 1's
//
CANSetMask(CAN_MASK_B1, mask, CAN_CONFIG_XTD_MSG);
//
// Set all MASK2 bits to 1's
//
CANSetMask(CAN_MASK_B2, mask, CAN_CONFIG_XTD_MSG);
//
// Set id of filter B2_F3 to 3
//
CANSetFilter(CAN_FILTER_B2_F3,3,CAN_CONFIG_XTD_MSG);
//
// Set CAN module to NORMAL mode
//
CANSetOperationMode(CAN_MODE_NORMAL, 0xFF);
//
// Configure LCD
//
Lcd_Config(&PORTC,4,5,0,3,2,1,0); // LCD is connected to PORTC
Lcd_Cmd(LCD_CLEAR); // Clear LCD
Lcd_Out(1,1,"CAN BUS"); // Display heading on LCD
Delay_ms(1000); // Wait for 2 seconds
//
// Program loop. Read the temperature from Node:COLLECTOR and display
// on the LCD continuously
//
for(;;) // Endless loop
{
Lcd_Cmd(LCD_CLEAR); // Clear LCD
Lcd_Out(1,1,"Temp = "); // Display "Temp = "
//
// Send a message to Node:COLLECTOR and ask for data
//
data[0] = 'T'; // Data to be sent
id = 500; // Identifier
CANWrite(id, data, 1, send_flag); // send 'T'
//
// Get temperature from node:COLLECT
//
dt = 0;
while(!dt)dt = CANRead(&id, data, &len, &read_flag);
if(id == 3)
{
temperature = data[0];
ByteToStr(temperature,txt); // Convert to string
Lcd_Out(1,8,txt); // Output to LCD
Delay_ms(1000); // Wait 1 second
}
}
}
IT SHOWS THESE ERRORS AT THE SECOND LAST '}' BRACKET :
  • SPECIFIER NEEDED
  • INVALID DECALRATOR EXPECTED '(' OR IDENTIFIER
  • ; EXPECTED BUT '}' FOUND
  • "INTERNAL ERROR"
 
Last edited by a moderator:

Aussie Susan

Advanced Member level 4
Joined
Jan 5, 2015
Messages
1,190
Helped
365
Reputation
730
Reaction score
362
Trophy points
83
Activity points
12,893
Wild guess - have you included all of the required headers that tell the compiler the SFR names for the device you are using?
Just going by the error related to TRISC - if the compiler does not have this SFR name defined then it could be seen as an error.
The errors at the end are possibly because the parsing got 'lost' earlier on (with the earlier errors). A good 'rule of thumb' is to fix the first error first and often the consequential errors will disappear.
As for the first error, my guess (and it is only a guess) is that 'data' might be a keyword (there is mention of this in a MikroC user guide I downloaded from the Internet just now in the "C Language Extensions" section). A descent compiler should be able to work out if the name is being used as a keyword or a user defined name from the context BUT it still might be worth while altering the 'data' name and see if the error goes away.
Susan
 

Vbase

Full Member level 6
Joined
Apr 7, 2015
Messages
367
Helped
74
Reputation
148
Reaction score
72
Trophy points
28
Activity points
1,997
'data' is a keyword in MicroC, you can't use it as a variable name. Change data to mydata or a different name wherever this var is used on the code.
 

Status
Not open for further replies.
Toggle Sidebar

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Top