Detección de tocado con 16F876A

#1
Hola muy buenas a todos.
Pongo el código y comento lo que necesito:

Código:
Programa Base 
void main () 
{ 
   // Todos los fuses 
    
   set_tris_a(0x3F);   // Port A entrada 
   set_tris_b(0x00);   // Port B salida 
   output_b(0x00);      // Borro las salidas 
   int i; 

   for (i=0;i<5;i++) 
   { 
      output_high(PIN_B0); 
      if (input(PIN_A0)) 
      { 
         output_low(PIN_B0); 
         delay_ms(100); 
         output_high(PIN_B4); 
         delay_ms(300); 
      } 
      delay_ms(1000); 
      output_high(PIN_B1); 
      if (input(PIN_A1)) 
      { 
         output_low(PIN_B1); 
         delay_ms(100); 
         output_high(PIN_B5); 
         delay_ms(300); 
      } 
      delay_ms(1000); 
   } 
}
Aquí lo que hago es encender un LED rojo (RB0 y RB1) y cuando se pulsa el pulsador correspondiente (RA0 y RA1), se apaga el LED rojo y se enciende uno verde (RB4 y RB5).
Aquí lo que pasa, es que hasta que no pulse el botón, no seguirá haciendo nada.
Entonces lo que quiero hacer es que encienda el LED rojo RB0, se espere un tiempo determinado, y si no pulsas en ese tiempo, se apague y pase al siguiente. Y en el caso de que pulse en ese intervalo de tiempo, haga lo que ya está puesto en el código.
A ver si me podéis hechar una mano.
Muchas gracias.
Saludos!
 
#2
hola , debes usar una interrupcion de alguno de los timers , ( tmr0 , 1... ) , que se active cuando pones en alto B0 , y una bandera ; al pasar el tiempo y verificando el estado de la bandera sabras que debes hacer
 
Arriba