Hola, estoy tratando de comunicar una pic 16f877a con el pc a traves del puerto serie, con el fin de encender o apagar un led mediante un mensaje. Si envio el mensaje ON el led se enciende, si envio el mensaje OFF el led se apaga. Al principio se enciende el led con el primer mensaje, pero al momento de enviar el segundo mensaje, este se queda pegado en la rutina de main. Le he dado mil vueltas y no logro ver donde esta el problema. Si me pudieran ayudar por favor. Gracias
Código:
#include <16f877A.h>
#use delay(clock=20000000)
#fuses xt,nowdt,nobrownout,nolvp,noprotect // Fusibles
#use rs232 (baud=9600, bits=8, parity=N,xmit=PIN_C6,rcv=PIN_C7)
#define use_portb_lcd TRUE
#include "lcd420.c"
#include <stdlib.h>
#byte TRISA = 0x85
#byte PORTA = 0x05
int i;
char dato[10]={0};
char c;
#INT_RDA
void mensaje(){
disable_interrupts(int_rda);
i=0;
if(kbhit()){
while(c!='\r')
{
c=getc();
dato[i]=c;
i++;
}
}
enable_interrupts(int_rda);
}
void muestra_lcd(void){
lcd_putc('\f');
for(i=0;i<11;i++)
{
printf(lcd_putc,"%c",dato[i]);
}
if(dato[0]=='O'&&dato[1]=='N')
output_high(PIN_A1);
if(dato[0]=='O'&&dato[1]=='F'&&dato[2]=='F')
output_low(PIN_A1);
for(i=0;i<11;i++)
dato[i]=0;
delay_ms(800);
}
void main()
{
lcd_init(); // inicializa el lcd
set_tris_a(0x00); //puerto A como salida
output_a(0x00); // salida a 0 del puerto A
lcd_putc("Inicializando");
delay_ms(1000);
lcd_putc('\f');
output_high(PIN_A0);
delay_ms(500);
output_low(PIN_A0);
enable_interrupts(int_rda);
enable_interrupts(global);
while(TRUE)
{
lcd_putc('\f');
lcd_putc("ESCRIBE");
delay_ms(500);
lcd_putc('\f');
lcd_putc("EL MENSAJE");
delay_ms(500);
output_high(PIN_A0);
delay_ms(200);
output_low(PIN_A0);
delay_ms(200);
if(dato[0]!=0)
muestra_lcd();
}
}