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