#int_TIMER1
void TIMER1_isr(void) // interrumpe cada 65,5mS
{
contador_verde++;
if (contador_verde>=5)
{
output_toggle (PIN_D2);
contador_verde=0;
}
}
Esta es la parte de la interrupcion, y es de la siguiente manera:
.- Incrementas la variable contador_verde, busca informacion y veras que no es lo mismo ++contador_verde; que contador_verde++;
.- En la instruccion if lo que estas haciendo es comprobar si contador_verde es mayor o igual a 5, el cual al llegar a 5 ejecutara lo que esta dentro de las llaves.
.- La instruccion output_toggle(PIN_D2); cambia de estado el led conectado, si esta encendido lo apaga y si esta apagado lo enciende.
.- Y la ultima antes de salir de la interrupcion pones a 0 la variable contador_verde para volver a iniciar la cuenta.
En la parte del rebote, lo que haces es dar un tiempo al programa antes de ejecutar una instruccion para que no haya lecturas falsas, eso es porque los contactos de dentro del pulsador tienden a vibrar, y el pic detectaria que se ha pulsado mas de una vez.
Piensa que con un cristal de 4MHz se ejecuta la instruccion cada 1us, excepto las de salto que tarda el doble.
Saludos!