Autor Tema: kbhit() y fgetc()..problema del compilador??  (Leído 2497 veces)

0 Usuarios y 1 Visitante están viendo este tema.

25javier

  • Visitante
kbhit() y fgetc()..problema del compilador??
« en: 20 de Marzo de 2006, 17:02:00 »
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();  
            }
 }
 }