Banner publicitario de PCBWay

Problemas con el kbhit usando PIC16f877

Buenas tardes amigos, me contacto con ustedes ya que necesito su ayuda para determinar el error que se me produce en el código siguiente:

Código:
#include "D:\Documents\Universidad\Lab Digitales II\PIC\Proyectos\Alarma Pic\Alarmar Pic Usart.h"
#use delay(clock=4000000)
#use RS232(BAUD=9600, BITS=8 ,PARITY=N, XMIT=PIN_C6, RCV=PIN_C7)

//Declaracion Variables
char accion, pruebaFin;
int i, estado, estadoPuertas, armadoAuto, subeVidrio, cierreArmadoA;
//Fin

void test()
{
   while(pruebaFin == ' ')
   {
      if(kbhit())
      {
         pruebaFin = getc();// Leo teclado y guardo en pruebaFin
         puts("Salir Prueba\n");
      }
      else
      {
      output_high(PIN_D0);
      output_high(PIN_D1);
      output_high(PIN_D2);
      output_high(PIN_D3);
      output_high(PIN_D4);
      output_high(PIN_D5);
      output_high(PIN_D6);
      output_high(PIN_D7);
      delay_ms(500);
      output_low(PIN_D0);
      output_low(PIN_D1);
      output_low(PIN_D2);
      output_low(PIN_D3);
      output_low(PIN_D4);
      output_low(PIN_D5);
      output_low(PIN_D6);
      output_low(PIN_D7);
      delay_ms(500);
      }
   }
}

void main()
{
   //Inicializo las variables
   accion = ' ';
   pruebaFin = ' ';
   i = 0;
   estado = 0;
   estadoPuertas = 0;
   armadoAuto = 0;
   subeVidrio = 0;
   cierreArmadoA = 0;
   //Fin
   
   set_tris_a(0xFF); //Coloco el puerto A como entrada
   set_tris_d(0x00); //Coloco el puerto D como salida
   puts("Inicialice el Sistema\n");
   test();
   while(1)
   { 
      if(input_A())
      {
         if(input(PIN_A0) && !input(PIN_A0))
         {
            armadoAuto = 1;
         }
         if(input(PIN_A1))
         {
            subeVidrio = 1;
         }
         if(input(PIN_A2))
         {
            cierreArmadoA = 1;
         }
         if(input(PIN_A3))
         {
            
         }
         if(input(PIN_A4))
         {
            
         }
         if(input(PIN_A5))
         {
            
         }
         if(input(!PIN_A0))
         {
            armadoAuto = 0;
         }
         if(input(!PIN_A1))
         {
            subeVidrio = 0;
         }
         if(input(!PIN_A2))
         {
            cierreArmadoA = 0;
         }
         if(input(!PIN_A3))
         {
            
         }
         if(input(!PIN_A4))
         {
            
         }
         if(input(!PIN_A5))
         {
            
         }
      }
      puts("Esperando Comando\n");
      delay_ms(500);
      if(kbhit())
      {
         accion = getc();  //Leo el teclado
         if(accion >= '0' && accion <= '9')
         {
            if(accion == 1)   //Activo y Desactivo Alarma
            {
               if(estado == 0)   //Activo Alarma
               {
                  puts("Alarma Activada\n");
                  estado = 1;
                  output_high(PIN_D0);
                  output_high(PIN_D1);
                  output_low(PIN_D4);
                  for(i = 0; i < 2; i++)
                  {
                     output_high(PIN_D5);
                     output_high(PIN_D6);
                     delay_ms(500);
                     output_low(PIN_D5);
                     output_low(PIN_D6);
                     delay_ms(500);
                  }
               }
               else if(estado == 1) //Desactivo Alarma
               {
                  puts("Alarma Desactivada\n");
                  estado = 0;
                  output_low(PIN_D0);
                  output_low(PIN_D1);
                  output_high(PIN_D4);
                  for(i = 0; i < 1; i++)
                  {
                     output_high(PIN_D5);
                     output_high(PIN_D6);
                     delay_ms(500);
                     output_low(PIN_D5);
                     output_low(PIN_D6);
                     delay_ms(500);
                  }
               }
            }
            else if(accion == 2)
            {
            
            }
            else if(accion == 3)
            {
            
            }
            else if(accion == 4)
            {
            
            }
         }
      }
   }
}

el detalles que se tiene es que cuando el codiggo llega al segundo kbhit() no me lee el teclado sin importar el valor q sea enviado, si alguien tiene idea de que sucede por favor aviseme gracias...
 
Atrás
Arriba