#include<reg51.h> void boud_rate() { SCON = 0x50; TMOD = 0x20; /* timer 1, mode 2, 8-bit reload */ TH1 = 0xFD; /* reload value for 2400 baud */ TR1 = 1; TI = 1; } char serial_receive() { char chr; /* variable to hold the new character */ while (RI != 1) {;} chr = SBUF; RI = 0; return(chr); } void main(void) { boud_rate(); unsigned char rx_data; for(;;) { rx_data = serial_receive(); switch(rx_data) { // case '1': open_door(); case 0067892341 : open_door(); break; // case '9': open_door(); case 0045780034 : open_door(); break; default: dont_open(); } proper_delay(); } }
errors
'rx_data':undefined identifier illigal octal digit
please tell me how to overcum these errors
If you are going to pay someone $100 - do you then specifically write $00100?
If the compiler takes these numbers as octal - have you then taken a look at the language definition (lots and lots of books are available if you haven't access to the languge standard) to see how you in C define decimal, octal or hexadecimal numbers? Any book at least decent about describing the C language would tell you that 0x or 0X is the start of a hexadecimal number, and 0 (but not followed by X or x) is the start of an octal number.
Note that 10-digit decimal numbers spans 0 to 9,999,999,999. Do you think your C51 compiler supports that numeric range? So maybe you should consider using C strings and perform comparisons with strcmp() instead? You will not be able to use a switch statement, but at least you don't need to worry about the number of digits in each code compared to the numeric ranges supported by the target processor.
Another thing - with string comparison based on an array of known codes, you can break out your valid codes from the source code. With a switch statement, you do need to modify that switch statement whenever you need to change, add or remove a code.