Das Interrupt-System des 8051 Mikrocontrollers

Ein Interrupt ist ein Signal, das den Prozessor bei seiner aktuellen Arbeit unterbricht!

Das auslösende Ereignis wird Unterbrechungsanforderung (Interrupt Request, IRQ) genannt. Danach wird die Unterbrechungsroutine (Interrupt Service Routine, ISR) ausgeführt. Anschließend wird die Ausführung des Programms an der Unterbrechungsstelle fortgesetzt.

Interrupt 8051 Mikrocontroller

Bei einem Interrupt führt der Prozessor den aktuellen Befehl noch aus und unterbricht dann an dieser Stelle das Programm.
Jetzt wird die Interruptroutine ausgeführt. Mit dem Befehl RETI (Return from interrupt) wird der Interrupt beendet, der Prozessor springt an die Unterbrechungsstelle und führt sein Programm weiter fort.

Am Ende der Interrupt-Service-Routine wird, wie bei einem Unterprogramm, zu der Adresse zurückgekehrt, die der Unterbrechung folgt.
Die Rücksprungadresse wird bei der Programmunterbrechung auf dem Stack gerettet.

 

Anwendung:

Z.B. bei einer Temperaturüberwachung. Wird eine bestimmte Temperatur überschritten, springt der Prozessor aus dem Hauptprogramm heraus und bringt durch das Unterprogramm eine Warnlampe zum Leuchten.

 

Unterschied zum Polling-Verfahren:

Polling = eine periodische Abfrage von Peripheriegeräten. (Aktives Warten).
Befindet sich der Prozessor in einer Polling-Schleife, so ist dieser ausschließlich damit beschäftigt, nachzufragen, ob ein Gerät Daten senden möchte. z.B. aktives Warten auf eine Tasteneingabe.

 

Das Interrupt-System des SAB 80C517 

Interruptsystem SAB 80C517 Mikrocontroller

 

Der 80C517 verfügt über externe (Interrupt 0 bis 6) und interne Interrupts (Timer).

Wir betrachten uns erst die externen Interrupts.
Interrupt 0 (IT0 am Port 3 Pin 2)  kann auf LOW-Pegel oder auf fallende Flanke reagieren. Dies teilen wir dem Prozessor mit, indem wir an IT0 das Bit setzen (1) oder nicht setzen (0).

 

Beispiel: Der externe Interrupt 0 soll auf fallende Flanke reagieren.

SETB IT0      (Set Bit an IT0)


Wie im Blockschaltbild ersichtlich, müssen noch EX0 und EAL aktiviert werden.

EX0 schaltet den ext. Interrupt 0 frei

EAL schaltet alle Interrupts frei = Hauptschalter für Interrupts

IE0 = Request-Flag

 

Der interne Interrupt-Controller fragt jedes Request-Flag ab, ob es gesetzt ist. Der Interrupt wird nur angenommen, wenn er auch freigegeben ist.

Ebenso gibt es für den Fall, das mehrere Interrupts gesetzt sind eine programmierte Prioritätenfolge.

 

Externe Interrupt-Quellen und Anforderungs-Flags

Interrupt SAB 80C517 Request-Flag

 

Pegelwahl und Freigabe der Interrupts

Der Pegel kann bei einigen externen Interrupts gewählt werden, ob z.B. der Signalpegel oder eine Signalflanke den Interrupt auslösen soll.
Die Auswahl erfolgt über Bits im SFR (Special-Functions-Register).

Der Interrupt-Controller prüft zyklisch, welche Request-Flags gesetzt sind. Berücksichtigt werden nur die freigegebenen Flags.
Jedes Flag besitzt eine eigene Freigabe (Enable).
Mit EAL gibt es eine generelle Freigabe (Hauptschalter) für alle Flags. Auch diese Freigabe erfolgt durch das Setzen bestimmter Bits im SFR.

Ein Interrupt wird also nur angenommen, wenn EAL und das Flag gesetzt ist und wenn er von der Priorität (Gruppe) her an der Reihe ist.

Interruptsystem Pegelwahl

 

Interrupt-Vektoren

Jedem Flag ist eine bestimmte Sprungadresse (Einsprungadresse) fest zugeordnet. Diese festen Adressen werden als Interrupt-Vektoren bezeichnet.

Der externe Interrupt 0 hat z.B. die feste Einsprungadresse 03h und der externe Interrupt 1 die Adresse 13h.

Interrupt-Vektoren

 

Programmbeispiel:

Im folgenden Programmbeispiel soll das 1. Bit im Akku über eine Endlosschleife nach links verschoben werden.
Das Programm soll über den externen Interrupt 0 unterbrochen werden und der Akku soll gelöscht werden.

Interrupt 80517A Assembler

 

Programmbeispiel Motorsteuerung:

Programmieren Sie eine Motorsteuerung von zwei Motoren.

Bei Programmstart sollen beide Motore an Port 4 (Anschluss 0 und 1) anlaufen.
An P3.2 ist ein Not-Aus-Taster angeschlossen, der bei Betätigung sofort beide Motoren abschaltet und am Port 1 alle Lichter zum Blinken bringt.
Über Port 5 sollen die Motoren jederzeit ein bzw. ausgeschaltet werden können.

Motorsteuerung 80517A Assembler

 

Programmbeispiel Lauflichtsteuerung mit Interrupt:

Nach dem Programmstart wird ein Lauflicht am Port 4 mit einer Frequenz von ca. 1 Hz nach links gestartet.
Mit Auslösen des externen Interrupts 0 wird das Lauflicht auf Rechtslauf geschaltet.
Mit Auslösen des externen Interrupts 0 wird das Lauflicht auf Rechtslauf geschaltet.

Lauflichtsteuerung 80517A Assembler