Hola estoy haciendo un programa en donde me comunico con un Xbee, estoy recibiendo el dato que manda el Xbee que es un OK (caracter O y K) pero al parecer el programa no detecta esto:
#INT_RDA
VOID isr_uart (VOID){
IF(kbhit(xbee)){ //si hay un dato para recibir del XBEE
dato = fgetc(xbee); //lo coloco en la variable dato (stream = XBEE)
#ifdef RS232_DEBUG
fprintf(debug,"Int{ ");
fprintf(debug,"Dato: %c }\n\r",dato);
#endif
}
}
En la interrupción recibe el dato y lo muestro via RS232 y veo tanto en el simulador como en la PC al probarlo en la placa que el dato que el Xbee envía es una O seguida de una K, en el programa principal tengo esto:
delay_ms(1200); //se debe esperar 1 segundo sin hacer nada
fprintf(xbee,"+++"); //envío de comando
#ifdef RS232_DEBUG
fprintf(debug,"+++ enviado\n\r");
#endif
WHILE((DATO!='O') || (DATO!='K'));
DATO = 0;
fprintf(xbee,"ATMY32\r\n"); //direccion de origen 50 -> 0x32
WHILE((DATO!='O') || (DATO!='K'));
DATO = 0;
Supuestamente cuando salta la interrupcion y el dato es 'O' o 'K' debería salir del bucle while porque dato es diferente de 'O' o 'K', pero no sale, la variable dato que es un INT permanece con el valor K ya que es el último recibido y ahi se queda, por que?? No tiene sentido alguno, es un bug del CCS?
Saludos y espero puedan ayudarme!!