zum Directory-modus

PIC-Programmierung

Befehl INTERRUPT

Ein Interrupt ist eine Programmunterbrechung, die aufgrund bestimmter Ereignisse stattfinden kann. Ein Ereignis, welches einen Interrupt hervorrufen kann, heißt Interruptquelle.

Bei einer Programmunterbrechung geschieht folgendes: der Wert des Programm-Counters wird zwischengespeichert und das Programm verzweigt an eine Bedienungsadresse, genannt Interruptvektor, welche bei der PIC16CXX-Reihe an der Adresse 4 liegt. Damit man weiß, welche Interruptquelle die Ursache war, wird ein Bit in einem Interrupt-Control-Register gesetzt. Dieses Bit muss (meist per Software) wieder zurückgesetzt werden, damit nicht sofort nach der Rückkehr aus dem Bedienungsprogramm der gleiche Interrupt wieder ausgelöst wird.

Das Bedienungsprogramm muss mit dem Befehl RETFIE beendet werden. Dadurch wird der "gerettete" PC wieder geladen, und das Programm fährt dort fort, wo es unterbrochen wurde. Damit während einer Interruptbedienung keine weiteren Interrupts stören, wird das globale Interrupt-Enable-Bit (GIE) im INTCON automatisch gelöscht. Bei dem INTCON handelt es sich um ein spezielles Register bei den PIC16CXX mit dem die gesamte Interruptbearbeitung softwaremäßig gesteuert werden kann. Dabei können mit Hilfe der einzelnen Bits die einzelnen Interrupts zugelassen oder gesperrt werden. Außerdem kann durch Überprüfen der entsprechenden Bits festgestellt werden, welche Ursache der anstehende Interrupt hatte.

Abb.1

Zur genaueren Erläuterung: Möchte man einen Interrupt an Port B4...7 erfassen, so muss im INTCON-Register das Bit 3 und das Bit 7 gesetzt werden. Bei Eintreten des Ereignisses wird Bit 0 gesetzt. Der Interrupt tritt bei allen Pegelwechseln ein, sowohl bei steigender, als auch bei fallender Flanke. Der Interrupt an Port B0 wird ermöglicht, wenn Bit 7 und Bit 4 im INTCON-Register gesetzt sind. Im Gegensatz zum vorher beschriebenen Interrupt tritt diese Programmunterbrechung wahlweise nur bei steigender, oder nur bei fallender Flanke am Portpin B0 ein. Dies wird im OPTION-Register eingestellt. Ist das Bit 6 dieses Registers gesetzt, so wird ein Interrupt bei steigender Flanke ausgelöst, ist es gelöscht, wird eine Programmunterbrechung bei fallender Flanke ausgelöst. Bei Auslösung des Interrupts wird Bit 1 im INTCON-Register gesetzt. Die dritte Interruptquelle ist der Überlauf des Timers TMR0. Ist Bit 7 und Bit 5 im INTCON-Register gesetzt, so wird ein Interrupt ausgelöst, wenn der Timer vom Wert FFh auf 00h springt. Somit wird es möglich, Zeitschleifen mit Interrupt zu programmieren. Beim Auslösen wird Bit 2 des INTCON-Registers gesetzt und muss in der Interruptroutine zurückgesetzt werden.

Das Verwenden von Interrupts hat Vor- und Nachteile. Nützlich sind sie dann, wenn man schnell auf Ereignisse reagieren muss, besonders wenn es sich um sehr kurze Vorgänge handelt. Auch wenn man bestimmte Prozesse bequem ein- und ausschalten möchte, können Interrupts nützlich sein.

Seite 19 von 36