We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
#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.