Interruptverarbeitung
In Mikrocontrollersystem gibt es zwei grundsätzliche
Möglichkeiten, auf externe (oder interne) Ereignisse zu reagieren.
Port-Polling
Beim Portpolling wird eine Eingabeleitung
des Controllers in einer Schleife zyklisch abgefragt. Dabei handelt
es sich um eine reine Softwarelösung, die im 8051-Controller
sehr einfach in einer Codezeile zu realisieren ist: Nachteilig ist allerdings,
dass die Eingabeleitung nur an jeweils einer Programmstelle abgefragt
wird. Befindet sich die Programmabarbeitung nicht in der Pollingschleife,
findet keine Reaktion auf ein externes Ereignis statt. Andererseits
führt das "Warten" in der Abfrageschleife dazu, dass
der Controller keine weiteren Aufgaben durchführen kann. Insbesondere
Sicherheitsfunktionen (z.B. Not-Aus) lassen sich mit dieser Abfrageart
nicht realisieren.
Interrupts
Ein Interrupereignis kann demgegenüber
jederzeit den normlen Programmablauf unterbrechen. Dies bietet die
Möglichkeit, auf bestimmte Ereignisse schnell und sicher zu
reagieren.
Wird ein Ereignis vom Interruptsystem erkannt, wird der aktuelle
Befehl fertig ausgeführt und anschließend auf die Einsprungadresse
des Interrupts gesprungen. Die Rückkehradresse wird - wie bei
Unterprogrammen - auf dem Stack gespeichert.
Auf der Einsprungadresse muss das Unterbrechungsprogramm (Interrupt-Service-Routine
ISR) stehen. Nach der Abarbeitung der ISR wird zurück
ins unterbrochene Programm gesprungen.
Beim 8051 können Interrupts durch verschiedene
Ereignisse ausgelöst werden:
Externe
Interrupts |
Abfallende
Flanke oder Low-Signal an den Portpins P3.2 (Int0) oder
P3.3 (Int1) |
Interne
Interrupts: |
Timerüberlauf
(TF0, TF1, TF2) serieller Empfangs- oder Sendeinterrupt
(TI, RI) usw. |
Der µC bearbeitet nur Interruptanforderungen,
wenn der entsprechende Interrupt freigegeben wurde. Jeder Interrupteingang
des 8051 hat eine Einzelfreigabe. Weiterhin gibt es eine
globale Interruptfreigabe für alle Interrupteingänge
kann einzeln freigegeben oder gesperrt werden.
|