[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
Visit site
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:

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
 

'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.

Similar threads

Cookies are required to use this site. You must accept them to continue using the site. Learn more…