Programmierung des Mikrocontrollers mit C



7. Interrupts benutzen

Interrupt bedeutet Unterbrechung.
Unterbrochen wird der normale Programmablauf.

Wozu ist das nützlich?

Die folgenden zwei Beispiele sollen Dir das erläutern:



Anwendung 1


Ein Tastendruck von einer Taste, die an einem Interrupteingang des Mikrocontrollers angeschlossen ist soll ein laufendes Programm sofort unterbrechen. 

Dann wäre das ein externer Interrupt.

Beachte den Unterschied:

  • eine Taste an einem normalen digitalen Eingang des Mikrocontrollers wird immer erst dann abgefragt, wenn der Programmablauf gerade an der Tastenabfrage "vorbeikommt"

  • eine Taste an einem Interrupteingang des Mikrocontrollers unterbricht sofort den Programmablauf.



Anwendung 2


Im Hauptprogramm macht der Mikrocontroller etwas zeitunabhängiges - z. B. steuert er einen kleinen Roboter, der fröhlich im Zimmmer herumfährt und Hindernissen ausweicht. Exakt jede Minute soll er aber "Piep" sagen, und dabei ist es völlig egal, womit er gerade beschäftigt ist. Seine "normale" Tätigkeit wird unterbrochen und er sagt pünktlich "Piep".

Schau Dir folgenden Pseudocode an:

interrupt-funktion(exakt jede Minute){
    sage "Piep";
}

main-funktion{
    fahre ewig herum und weiche Hindernissen aus;
}

Stell Dir einfach zwei kleine Männchen im Gehirn dieses Roboters vor:

  • Der Fahrer fährt mit dem Roboter, wie mit einem Auto herum und paßt darauf auf, nirgends anzustoßen.
    Er sitzt am Lenkrad, betätigt Gas, Kupplung und Bremse und hält Ausschau nach Hindernissen.

  • Exakt jede Minute hält ihm sein Beifahrer die Augen zu, schiebt ihm vom Lenkrad weg und hupt!
    Egal, was der Fahrer gerade tut, der Beifahrer unterbricht ihn einfach dabei.

Für solcherart Interrupts kann man einen im Mikrocontroller vorhandenen Timer benutzen. Das wäre ein Timerinterrupt.



Mit Interrupts beschäftigen sich auf der Mikrocontrollerspielwiese folgende Projekte:

Hier mit Attiny2313 und hier und hier und hier mit Atmega8.



weiter