Paso 5: Cuáles son las interrupciones
Las funciones que se ejecutan se llaman Rutinas de servicio de interrupción (ISR) y son funciones más o menos simples, pero que no tome argumentos.
Veamos un ejemplo, algo así como unos pulsos de conteo. El ATMega328P tiene un comparador analógico que tiene una interrupción asociada que se activa cuando una señal supera un voltaje de referencia. En primer lugar debe definir la función que va a ser exectuted:
ISR(ANALOG_COMP_vect)
{
contador ++;
}
Esto es realmente simple, que la instrucción ISR() es una macro que indica al compilador que la función siguiente es un rutina interrupción de servicio. Mientras que ANALOG_COMP_vect se llama Vector de interrupción e indica al compilador que interrupción se asocia a esa rutina. En este caso es la interrupción de comparador analógico. Así que cada vez que el comparador ve una señal más grande que una referencia dice el microcontrolador al ejecutar ese código, id est en este caso se incrementa esa variable.
El siguiente paso es habilitar la interrupción asociada. Para habilitarlo debemos establecer el bit ACIE (analógico comparador interrupción habilitar) del registro ACSR (analógico comparador ajuste de registro):
SBI(ACSR,ACIE);
En el siguiente sitio podemos ver la lista de todos los vectores de interrupción:
http://www.nongnu.org/avr-libc/User-manual/group__avr__interrupts.html