
// #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();
    }
}
}
