Interrupt (wie man einen Timer benutzt)



Interrupt bedeutet Unterbrechung.
Unterbrochen wird der normale Programmablauf.

Wozu ist das nützlich?

Das kannst Du hier nachlesen.



Hier ein Timerinterrupt-Beispiel für Atmega8.

Zwei LEDs blinken mit unterschiedlicher Frequenz:

  • LED2 blinkt als Folge des normalen Programmablaufes.

  • LED1 blinkt bei jedem Timerinterrupt.



Natürlich kannst Du auch einfach unser Experimentierboard benutzen.


Hier das Programm:

#include <avr/io.h>
#define F_CPU 1000000UL  // 1 MHz
#include <util/delay.h>
#include <stdint.h>
#include <avr/interrupt.h>
 
ISR(TIMER0_OVF_vect){
    PORTB ^= _BV(PB2); //durch Timer ausgeloestes Blinken (hier die langsame LED)
}
 
int main(void)
{
   DDRB = DDRB | _BV(PB2) | _BV(PB3);     // PB2 & PB3 sind Ausgaenge (für LED)
   TCCR0 = 0x05; TIMSK =0x01;             // Timer0 mit Prescaler 1024
   sei();                                 // Interrupts ermoeglichen
        
   while (1) {                    
     PORTB ^= _BV(PB3); _delay_ms(50); //normales LED-Blinken (hier die schnelle LED)
   }
 
 return(0);
}
 

Hier gibt es den Code-Ordner zum Programmieren des Atmega8.




Ein paar Anmerkungen dazu:

ISR steht für Interrupt Service Routine. Hier springt die Abarbeitung des Programmes hin, wenn der Interrupt "geworfen" wurde.
Üblicherweise solltest Du Dir überlegen, da evtl. nur wenige Befehle hineinzuschreiben. Denn bedenke: Die Abarbeitung der Main-Funktion bleibt solange unterbrochen, wie die ISR abgearbeitet wird. Andererseits benutzen wir gerade einen mit 1MHz getakteten Mikrocontroller und reden hier deshalb von ein paar millionstel Sekunden.

TIMER0_OVF-vect
steht für Timer0-Overflow-Vector und bedeutet soviel wie: "Zeitgeber Überlauf Anzeiger"
Der Timer Nr. 0 wurde so programmiert, daß er zu bestimmten Zeiten "überläuft", was im "Zeitgeber Überlauf Anzeiger" bemerkt wird.
Dieser "Zeitgeber Überlauf Anzeiger" sagt dann: "es ist Zeit, das normale Programm zu unterbrechen und die Interrupt Service Routine auszuführen!".

Das ^ in PORTB ^= ...   bedeutet toggeln (den Zustand des Bits umkehren).

Näheres wie immer im Datenblatt.