Einführung
Dieses Beispiel ist recht einfach gehalten. Ziel ist es mithilfe eines Tasters einen Zähler bei jedem Tastendruck um 1 zu erhöhen und mithilfe eines anderen Tasters diesen wiederum zurückzusetzen.
Taster 1 (Inkrement) ist an Port 3.2 angeschlossen und agiert somit als Interrupt 0 in diesem Programm. Taster 2 (Reset) ist an Port 3.3 angeschlossen und agiert als Interrupt 1. Der Zähler befindet sich an Port 2. Sobald also Taster 1 gedrückt wird, wird P2 um 1 erhöht. Sobald Taster 2 gedrückt wird, wird P2 zurückgesetzt auf 0.
Quelltext
$NOMOD51 //Vordefinitionen vergessen #include <at89c5131.h> //Neue Definitionen einbinden cseg at 0x0000 //Nachfolgende Befehle betreffen das Code-Segment ab Adresse 0x0000 jmp main //Springe zu "main" cseg at 0x0003 //Nachfolgende Befehle betreffen das Code-Segment ab Adresse 0x0003 jmp inkrement //Springe zu "inkrement" cseg at 0x0013 //Nachfolgende Befehle betreffen das Code-Segment ab Adresse 0x0013 jmp reset //Springe zu "reset" main: //Sprungmarke "main" setb it0 //setze Flanken-Modus bei INT0 setb it1 //setze Flanken-Modus bei INT1 setb ex0 //INT0 freischalten setb ex1 //INT1 freischalten setb ea //Alle Interrupts "generell" freischalten mov p2,#0 //Zaehler auf 0 setzen loop: //Endlosschleife jmp loop //Springe zu "loop" inkrement: //Sprungmarke "inkrement" inc p2 //Zaehler inkrementieren reti //ISR verlassen reset: //Sprungmarke "reset" mov p2,#0 //Zaehler zurücksetzen reti //ISR verlassen end //Programmende