Interrupt (14.03.06) 2006-03-14 19:10:57 Interrupt Ein Interrupt ist ein Signal af das der Prozessor reagieren muss, z.B. ein Alarmknopf in einem Aufzug. Durch den Interrupt wird der laufende Prozess unterbrochen. Damit das Programm später weitergeführt werden kann, werden wichtige Daten auf dem Stack gespeichert. Dann erfolgt die Abarbeitung des Interrupts. Dazu wird eine bestimmte Interrupt-Service-Routine angesprungen. (siehe Tabelle) Damit der Prozessor auf einen Interrupt reagieren kann, muss dieser Interrupt explizit freigeschaltet werden. D.h. jeder einzelne Interrupt muss separat freigeschaltet werden. Zusätzlich muss noch die globale Freigabe EA gesetzt werden. Die externen Interrupts können über Flankensteuerung oder Low-Signale gesteuert werden. ;Meistens wird Flankensteuerung gewählt. (setb IT0 bzw. setb IT1) Tabelle: (siehe Blatt) Interrupt-Service-Routine (IRS): Die Interrupt-Service-Routine ist die Adresse, an die gesprungen wird. Sobald der entsprechende Interrupt ausgelöst wird. Die Adresse kann der Tabelle (siehe Blatt) entnommen werden. Beispielprogramm: code at 0 include C51RD2.INC taster bit P3.2 //bit weil 1 bit "betroffen" ist LEDs data P2 //data weil 1 byte "betroffen" ist sjmp init org 0003h //org ist ein Befehl für die Speicherverwaltung des Compilers... inc LEDs //der dann für alles folgendes einen festen Speicherplatz an dieser Stelle einräumt reti //ret aus dem Interrupt init: mov P2, #0 setb IT0 //Flankensteuerung für ext. Interrupt 0 clr IE0 //Anforderungsbit löschen setb EX0 //Interrupt 0 aktivieren setb EA //globale Freischaltung haupt: sjmp haupt //Hauptprogramm, hier endlosschleife als Ersatz Mit beiden Interrupts: code at 0 include C51RD2.INC taster1 bit P3.2 taster2 bit P3.3 LED1 data P2 sjmp init org 0003h inc LEDs reti org 0013h mov P2,#0 reti init: mov P2,#0 setb IT0 setb IT1 clr IE0 clr IE1 setb EX0 setb EX1 setb EA haupt: sjmp haupt