Ich versuche mal, das hier alles ein wenig zusammenzufassen:
Bei einem Interrupt wird die aktuell laufende Befehlskette unterbrochen, um einen anderen Programmabschnitt auszuführen. Nach der Ausführung dieses Programnmabschnitts kehrt der Controller wieder zu seiner vorherigen Position zurück.
Ein Interrupt wird verwendet, um
a) zeitkritische Funktionen zu erledigen
b) den Prozessor zu entlasten
Ein Beispiel zu a)
Du willst ein Signal abfragen, das aber sehr kurz ist, z.B. einen Impuls mit der Dauer 1µs. Die Durchlaufzeit Deiner Hauptschleife beträgt aber z.B. 10µs. Wenn Du in der Hauptschleife eine if-Abfrage ausführst, um den Impuls zu erfassen, ist es sehr wahrscheinlich, dass Du den Impuls verpasst. Benutzt Du einen Interrupt, erkennt der Prozessor den Impuls sofort und kann in der Interruptroutine entsprechend darauf reagieren. Somit wird kein Impuls verpasst.
Diese Hardware-Interrupts werden auch zum Auslesen von Kommunikationsleitungen verwendet, damit keine Übertragungen verloren gehen.
Ein Beispiel zu b)
Du willst einige Taster abfragen. Fragst Du die Taster per if in Deiner Hauptschleife ab, muss der Prozessor diese Abfrage bei jedem Durchlauf abarbeiten, auch wenn kein Taster gedrückt wurde. Das kostet Rechenzeit.
Hier kann man dann per Timer einen Interrupt z.B. alle 100 Millisekunden erzeugen lassen, durch den dann die Taster abgefragt werden. Dadurch wird der Controller entlastet.
Wichtig ist, dass Interruptroutinen möglichst kurz gehalten werden, vor allem dann, wenn mehrere Interruptroutinen benutzt werden.
Gruß,
askazo
Lesezeichen