En esta parte del tutorial que vamos a hablar acerca de las interrupciones de trabajo usando el contador por ejemplo. Interrupciones mejoran el uso de microcontroladores de forma enorme. Interrupciones hacen sus programas reaccionan con el hardware de microcontroladores, que puede ser una reacción del circuito fuera del microcontrolador.
En términos básicos, una interrupción es exactamente lo que se dice como. Interrumpe un flujo de programa ejecución normal para realizar otra tarea (otro bloque de código que se programa). Decir por ejemplo el programa está haciendo normal LED parpadeante y quiere reaccionar a un sensor PIR (conectado a un pin de interrupción) y va a un bloque de código especial para hacer un sonido de un buzzer conectado al pin de otro. Si dices el microcontrolador para hacer esto, dejará el programa muerto e ir al código que pertenece a la interrupción (haga un pitido). Después de ejecuta el código de la interrupción, el programa dejó reanuda exactamente donde se quedó. En algunos ejemplos, interrupciones sería una alternativa a la votación, que requiere ciclos de programa. Dicen que su programa es querer un sólo pitido cuando alguien pasa por el sensor de PIR. Su programa podría seguir probando ese pin para ver si tiene una lectura alta una y otra vez dentro del bucle que nunca termina (a la vez (1)). Como alternativa, quite todo el código de programa electoral para verificar el pin de una lectura alta y permite la interrupción proceder automáticamente al código de sonido cuando el microcontrolador detecta la lectura alta.
¿Qué tipos de interrupciones están disponibles para el Microcontrolador AVR? Interrupciones pueden establecerse para eventos como el número de un contador, un pin cambio de recepción de comunicación de estado (de baja a alta o viceversa) de información o la analógica a Digital, habiendo establecido una conversión. Aquí está una lista de vectores de la interrupción que puede utilizar. Otros tutoriales hará uso de muchos de estos vectores.
Vamos a utilizar el temporizador/contador por ejemplo. Diremos el temporizador/contador un número que la TCNT1 (el contador) tendrán que coincidir. El número a voy a entrar en un registro llamado OCR1A (Comparar registro de salida). El "1" representa el contador específico estamos usando que es la versión de 16 bits. Tenemos dos OCR, la A y la B. Se utilice A este ejemplo. Pero ¿sabemos si el contador se reseteará a cero cuando se realiza el encuentro? Definitivamente queremos TCNT1 para volver a cero así que la cuenta será empezar y conseguimos otro partido en nuestro número previsto, pero esto no se hace en el código como lo hicimos la última vez (recordar el TCNT1 = 0;). Esta vez, queremos activar otro interruptor en el registro de control TCCR1B llamado WGM12 (forma de onda modo de generación para el temporizador 1). El #2 en que el interruptor solo representa que WGM es, ya que hay unas cuantas. También utilizaremos el CS10 y CS11 otra vez para ajustar la escala a 64 como en la intro para video de temporizadores.
Entonces el temporizador/contador se necesita saber que tenemos la intención de utilizar la función de interrupción. Esto se hace mediante la TIMSK (temporizador/contador interrumpir máscara de registro). Sólo tenemos que encender un interruptor en este registro: el OCIE1A (salida comparar un partido interrupción habilitar) interruptor. Una vez que el número puesto en la OCR1A se corresponde con el contador, se interrumpirá el programa para cambiar el LED. Para una interrupción que ocurra, tendremos que habilitar las interrupciones globales "sei()", entonces tendremos que permitir la interrupción del temporizador/contador y finalmente la rutina de servicio de interrupción (ISR) tendrá que ser creado. La rutina de servicio de interrupción es como las funciones que se realizaron en el ejemplo de botón de juego. La rutina de servicio de interrupción es sólo un bloque de código fuera de la rutina principal y comienza con el ISR con el vector dentro de paréntesis "(vector)", permitido por el bloque de código entre corchetes "{codigo}". Para el temporizador/contador (versión de 16 bits) y el hecho de que estamos utilizando una versión de la OCR1, el nombre del vector es: TIMER1_COMPA_vect. Por lo que la rutina sería: ISR(TIMER1_COMPA_vect) {código a ejecutar}. Utilizamos un número en la introducción al vídeo de temporizadores que representó un segundo: 15625, así que vamos a utilizar este otro para el OCR1A. Sin embargo, el número debe considerar la indización de 0, por lo que tendremos que utilizar en su lugar el número 15624.