Ejemplo del uso de 3 timers + sus correspondientes interrupciones para crear un “reloj del sistema” que comprueba en cada interrupción si ha llegado el momento de realizar una tarea.
En este ejemplo tenemos 4 leds parpadeantes a diferentes frecuencias. Primero tenemos que definir una base de tiempo: elegir los Timers y configurarlos para que salte la interrupción correspondiente en el tiempo prefijado.
Para lograr el máximo rendimiento del código, he usado control directo de los registros del microcontrolador para conmutar los pines 6, 9, 10 y 11. El pin 6 (LEDB) se conmuta en el loop cuya celda “time” es decrementada por el Timer2, los 3 restantes leds son conmutados dentro del las interrupciones.
Existen varios aspectos que se deben tener en cuenta para el manejo de interrupciones. El primero de ello es que aparte de habilitar la interrupción que se desea manejar, en este caso la interrupción 0, es necesario activar el habilitador global de interrupciones usando el macro sei(). Si no se activa el habilitador global de interrupciones no se generara ninguna interrupción. Lo segundo que se debe tener en cuenta es que las interrupciones no reciben ni retornan parámetros, por lo tanto si se desean manejar variables para que estas sean usadas en la lógica principal del programa es necesario usar variables globales. El ultimo aspecto a tener en cuenta es que las interrupciones se generan en cualquier momento del programa, esto es importante contemplarlo para no tener problemas con la lógica que se esta usando.
Deja un comentario