Autor Tema: Problema con kbhit rs232 y 16f84a  (Leído 2635 veces)

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

Desconectado netvia

  • PIC10
  • *
  • Mensajes: 2
Problema con kbhit rs232 y 16f84a
« 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



Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: Problema con kbhit rs232 y 16f84a
« Respuesta #1 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.

Desconectado netvia

  • PIC10
  • *
  • Mensajes: 2
Re: Problema con kbhit rs232 y 16f84a
« Respuesta #2 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

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Problema con kbhit rs232 y 16f84a
« Respuesta #3 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.
« Última modificación: 13 de Febrero de 2010, 22:40:58 por pablomanieri »


 

anything