Идея такая - настроить прерывания по приему байта и реализовать буфер, при накоплении которого будете его обрабатывать. В кейле будет примерно следующее
Код
#define UART_BUF_SIZE 4
unsigned char UART_BUF[UART_BUF_SIZE];
bit receive_flag=0;
void Input_Serial_Port() interrupt 4
{
unsigned char temp;
if(RI) // Если произошел прием символа
{
if(!receive_flag)
{
for(temp=0;temp<UART_BUF_SIZE-1;temp++) // Сдвигаем буфер влево всегда, организуем очередь
{
UART_BUF[temp]=UART_BUF[temp+1];
}
UART_BUF[UART_BUF_SIZE-1]=SBUF;
if (UART_BUF[0]=='@') // Допустим @ указывает на нужную посылку,
receive_flag=1; // то устанавливаем флаг приема, который анализируется программой
}
RI=0;
}
}
Спрашивайте, что конкретно не понятно. =)
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.