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