TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado 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
#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
-
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:
#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.
-
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
-
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.