??? 06/20/09 11:52 Read: times |
#166284 - Why dont you define correct id in "code" space Responding to: ???'s previous message |
Dear Popa,
Why dont you define the valid id in code space instead of data space. // #include <REGX52.h> //program care stocheaza si compara(bun) #include <89lpc932.h> #define Baud_rate 0xF4 #define LED_P P2_0 #define LED_OF 1 #define LED_ON 0 code unsigned char valid_id[10] = {0x30, 0x34, 0x31, 0x35, 0x44, 0x38, 0x41, 0x31, 0x46, 0x31}; //rx_on, & chk_id can also be defined as bit(if compiler permits it) unsigned char offset, rx_on, chk_id; unsigned char com_rx_buf[11]; void serial_IT(void) interrupt 4 using 1 { unsigned char ch; if(RI) { if(rx_on) { if(SBUF == 0x0D) { chk_id = 1; rx_on = 0; } else { if(offset < 10) { com_rx_buf[offset] = SBUF; offset++; } else rx_on = 0; } } else { if(SBUF == 0x0A) { rx_on = 1; for(ch = 0; ch < 11; ch++) com_rx_buf[ch] = 0x00; offset = 0; } } } else { if(TI) TI = 0; } } void init_var(void) { unsigned char ch; for(ch = 0; ch < 11; ch++) com_rx_buf[ch] = 0x00; offset = 0; rx_on = 0; chk_id = 0; } void init(void) { TMOD = 0x20; SCON = 0x50; TH1 = Baud_rate; TL1 = Baud_rate; // EA = 1; ES = 1; TR1 = 1; init_var(); LED_P = LED_OF; } void compare_id(void) { unsigned char ch; if(offset == 10) { for(ch = 0; ch < 10; ch++) { if(com_rx_buf[ch] != valid_id[ch]) break; if(ch == 9) LED_P = LED_ON; } } } void main(void) { EA = 0; init(); EA = 1; while(1) { if(chk_id) { compare_id(); init_var(); } } } Regards, Mahesh |