Hola listeros!aca me encuentro con un problema que me hace culpar directamente al compilador...descubri el problema e hice un simple programita para probar con un caracter..estoy usando dos puertos del pic, por hard(comunicacion otro pic)y soft (comunicacion computadora),intento saber cuando recibo datos de la computadora con kbhit(PUER_PC) e ir cuando me desocupe a una rutina para recibir esos datos(la computadora se toma un delay suficiente antes de mandar los datos).En principio anda bien,pero si tengo un minimo delay entre kbhit(PUER_PC) y la rutina para buscar el dato con fgetc(PUER_PC),pierde el dato..o sea que:
1)detecta que se recibio el dato con kbhit(PUER_PC)
2)cuando voy a buscar ese dato con fgetc(PUER_PC) el dato no esta!!!!!!!entonces el programa se queda colgado esperando..
aca el programita para ver el error:
#include "16f628A.h"
#fuses INTRC_IO,NOLVP,NOWDT,NOPROTECT,NOCPD,NOMCLR
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_B2, rcv=PIN_B1,STREAM=PUER_PIC)
#use rs232(baud=9600, xmit=PIN_A7, rcv=PIN_A0, STREAM=PUER_PC)
#DEFINE LED1 PIN_B3
static short recibir=false;
void recibir_pc(){
int i3=0;
i3= fgetc(PUER_PC);
Fprintf(PUER_PC,"%C",i3);}
void main() {
output_high (LED1);
delay_ms(1000);
output_low (LED1);
while(TRUE) {
if(kbhit(PUER_PC)){
recibir=true;
}
if (recibir==true){
recibir=false;
delay_ms(1);//SIN DELAY_MS(1) ANDA BIEN ,SI SE LO AGREGO y NO ANDA!!
recibir_pc();
}
}
}