Não consigo comandar via Usart (mikroC)

Boa tarde, pessoal. É o seguinte: estou desenvolvendo um sinalizador que funciona da seguinte maneira: aperto um botão (são vários), liga o led correspondente e manda um sinal via serial RS232 para um painel sinalizador, acendendo outro led. Para apagar os leds correspondentes nos painéis (não todos de uma vez, mas somente o que eu necessito), o microcontrolador recebe um sinal de outro microcontrolador ou pelo PC. Para acender e emitir o sinal serial, o sistema funciona sem problemas, a questão está no recebimento do sinal, já fiz de tudo no código e não consegui fazê-lo funcionar a contento. Estou utilizando o compilador MikroC e os Pic's são 16F877A e serial MAX232. Uma parte do código segue abaixo:
/*************************DEFINIÇÃO DAS VÁRIÁVEIS******************************/
short bt01,bt02,bt03,bt04,...;
unsigned short x, i, rc;
//int i;
//char rec[6];
short rec[5];
/**************************DEFINIÇÃO DE ENTRADAS*******************************/
#define LB1 PORTC.F0
#define LB2 PORTC.F1
#define LB3 PORTC.F2
// Tratamento da Serial
void trata_serial()
{
//delay_ms(10);
//Usart_Write('t');
if ((rec[0]=='D')&&(rec[1]=='0')&&(rec[2]=='1')) bt01=0;
if ((rec[0]=='D')&&(rec[1]=='0')&&(rec[2]=='2')) bt02=0;
if ((rec[0]=='D')&&(rec[1]=='0')&&(rec[2]=='3')) bt03=0;
if ((rec[0]=='D')&&(rec[1]=='0')&&(rec[2]=='4')) bt04=0;
...
}
/*****************************BLOCO PRINCIPAL**********************************/
void main()
{
/*************************INICIALIZAÇÃO DOS PORT'S*****************************/
TRISB=0X88; PORTB=0X88;
TRISC=0X87; PORTC=0X00;
TRISD=0X88; PORTD=0X77;
ADCON1 = 0X0F;
USART_init(9600);
/******************************************************************************/
bt01=0;bt02=0;bt03=0;bt04=0;...
for (i=0;i<=4;i++) rec[i] = '\0';
i=0;
/****************TRATAMENTO DOS BOTÕES E TRANSMISSÃO DE COMANDO****************/
while(1){
PORTD=0XFE; //BOTAO 01
PORTB=0X88;
delay_ms(1);
if ((LB1)||(bt01==1)){
PORTB=0X88;
PORTD=0XEF;
delay_ms(1);
if (bt01==0){
USART_Write ('L');
USART_Write ('0');
USART_Write ('1');
while(LB1) {}
}
bt01=1;
}...
if (Usart_Data_Ready()) {
rec[i] = Usart_Read();
//rec[i] = rc;
i++;
if (rec[i-1]==0x0D)
{
trata_serial();
for (i=0;i<=4;i++) rec[i] = '\0';
i=0;
}
}
}
}
/***********************************fim****************************************/
Alguém estaria disposto a me dar uma luz? Detalhe: simulando pelo Proteus, o código está correto, mas no protoboard só funciona para ligar os leds e enviar o sinal...
Agradeço
/*************************DEFINIÇÃO DAS VÁRIÁVEIS******************************/
short bt01,bt02,bt03,bt04,...;
unsigned short x, i, rc;
//int i;
//char rec[6];
short rec[5];
/**************************DEFINIÇÃO DE ENTRADAS*******************************/
#define LB1 PORTC.F0
#define LB2 PORTC.F1
#define LB3 PORTC.F2
// Tratamento da Serial
void trata_serial()
{
//delay_ms(10);
//Usart_Write('t');
if ((rec[0]=='D')&&(rec[1]=='0')&&(rec[2]=='1')) bt01=0;
if ((rec[0]=='D')&&(rec[1]=='0')&&(rec[2]=='2')) bt02=0;
if ((rec[0]=='D')&&(rec[1]=='0')&&(rec[2]=='3')) bt03=0;
if ((rec[0]=='D')&&(rec[1]=='0')&&(rec[2]=='4')) bt04=0;
...
}
/*****************************BLOCO PRINCIPAL**********************************/
void main()
{
/*************************INICIALIZAÇÃO DOS PORT'S*****************************/
TRISB=0X88; PORTB=0X88;
TRISC=0X87; PORTC=0X00;
TRISD=0X88; PORTD=0X77;
ADCON1 = 0X0F;
USART_init(9600);
/******************************************************************************/
bt01=0;bt02=0;bt03=0;bt04=0;...
for (i=0;i<=4;i++) rec[i] = '\0';
i=0;
/****************TRATAMENTO DOS BOTÕES E TRANSMISSÃO DE COMANDO****************/
while(1){
PORTD=0XFE; //BOTAO 01
PORTB=0X88;
delay_ms(1);
if ((LB1)||(bt01==1)){
PORTB=0X88;
PORTD=0XEF;
delay_ms(1);
if (bt01==0){
USART_Write ('L');
USART_Write ('0');
USART_Write ('1');
while(LB1) {}
}
bt01=1;
}...
if (Usart_Data_Ready()) {
rec[i] = Usart_Read();
//rec[i] = rc;
i++;
if (rec[i-1]==0x0D)
{
trata_serial();
for (i=0;i<=4;i++) rec[i] = '\0';
i=0;
}
}
}
}
/***********************************fim****************************************/
Alguém estaria disposto a me dar uma luz? Detalhe: simulando pelo Proteus, o código está correto, mas no protoboard só funciona para ligar os leds e enviar o sinal...
Agradeço