TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: netvia en 10 de Febrero de 2010, 13:31:46

Título: Problema con kbhit rs232 y 16f84a
Publicado por: netvia en 10 de Febrero de 2010, 13:31:46
Hola amigos , es mi pimer post creo

Tengo problemas con la sentencia kbhit al utilizar rs232 por soft entre el PIC 16f84 con hyperterminal
No se si lo estoy utilizando bien o quizá sea otro prblema
Basicmente el prgrama entrea en un loop infinito que cuenta de 0 a 99,y muestra el conteo por LCD... la idea es variar la frec del conteo sin que se salga del loop

Hice un programita preliminar para probar lo que quiero hacer, se supone qie al enviar una tecla por hyperterminal debiera saltar a la la rutina del kbhit pero no lo hace (Estoy simulando con Proteus)

este el el codigo
Código: [Seleccionar]
#include <16F84A.h>
#use delay(clock=4000000)
#use RS232(BAUD=9600, BITS=8, PARITY=N, XMIT=PIN_A0, RCV=PIN_A1,FORCE_SW )
#fuses XT,NOWDT,NOPROTECT,PUT
#include "lcd.c"


void main()
{
int c,tecla;
int16 frec;
lcd_init();
frec=1000;
puts("delay = 1000 ms");
while (true){
for(c = 0;c <=99; ++c){
   if(kbhit())
   {
   tecla=getc();
   frec = 200;
   puts("delay = 200 ms");
   }
   else{

printf(lcd_putc,"\f%d",c);
delay_ms(frec);
}
}
}
}

Pese a que envio caracteres por el terminal nunca entra en el ciclo del KBHIT
espero puedan ayudarme, desde ya Gracias


Título: Re: Problema con kbhit rs232 y 16f84a
Publicado por: c4_esp_VR en 11 de Febrero de 2010, 19:22:04
Necesitariamos el esquemático de proteus para ver si has realizado bien las conexiones ya que en un principio no pareces tener problemas con el código, aún así probaría algo más sencillo como:

Código: [Seleccionar]
#include <16F84A.h>
#use delay(clock=4000000)
#use RS232(BAUD=9600, BITS=8, PARITY=N, XMIT=PIN_A0, RCV=PIN_A1,FORCE_SW )
#fuses XT,NOWDT,NOPROTECT,PUT

void main()
{
while (true)
{
   if(kbhit())
   {
   puts("delay = 200 ms");
   }
}
}
}

Espero que te sirva.
Título: Re: Problema con kbhit rs232 y 16f84a
Publicado por: netvia en 13 de Febrero de 2010, 22:15:44
Gracias c4_esp_VR por la respuesta

Tu codigo funciona sin problemas en mi esquematico, el problema surge cuando el ciclo while hace algo más que solamente esperar,  por ejemplo:

void main()
{
while (true)
{
puts("Esperando..");
   if(kbhit())
   {
   puts("entra al khbit");
   delay_ms(1000);
   }
 
}
}

En este caso SI entra en el ciclo del khbit pero sólo despues de tener alguna tecla presionada varios segundos.

Esto ocurre tanto simulandolo como el circuito real
adjunto una imagen del esquematico por las dudas aunque creo que no es ese el problema

Alguna sugerencia??

Al parecer voy a tener que usar un PIC con interrupcion por RDA. aunque no era la idea

Gracias
Título: Re: Problema con kbhit rs232 y 16f84a
Publicado por: pablomanieri en 13 de Febrero de 2010, 22:38:12
El problema está en el delay_ms(1000), una vez que detectas la tecla haces una espera de 1 segundo, el micro no hace mas nada que el delay, es por eso.
Si vas a tener que usar interrupciones.
Tal vez puedes hacer el delay por interrupción.