Einführung
Fast jeder hat als Kind schon mal das Geschicklichkeitsspiel „Der heiße Draht“ gespielt. Das Ziel ist es, eine Drahtöse so schnell wie möglich über einen gebogenen Draht zu führen, ohne dass dieser mit der Öse berührt wird.
Im folgenden Quelltext-Beispiel ist so ein „Heißer Draht“ an Port Port 3.3 angeschlossen. Berührt man also den Draht mit der Drahtöse, springt das Bit an Port 3.3 auf eins und erhöht einen Counter an Port 2 um 1. Damit die Sprungmarke „hoch“ bei einer Berührung nicht aus Versehen mehrmals geladen wird, wird noch ein Delay eingebaut.
Quelltext
$NOMOD51 //Vordefinitionen vergessen #include <at89c5131.h> //Neue Definitionen einbinden cseg at 0x0000 //Nachfolgende Befehle betreffen das Code-Segment ab Adresse 0x0000 loop: //Endlosschleife jb P3.3,hoch //Springe zu "hoch", wenn der Inhalt von P3.3 gleich 1 ist jmp loop //Springe zu loop hoch: //Sprungmarke "hoch" inc P2; //P2 um Eins erhöhen mov r3, #0xff //r3 auf 0xff setzen delay: //Sprungmarke "delay" dec r3 //r3 im 1 verringern mov a,r3 //r3 in Akkumulator laden jnz delay //Springe zu "delay", wenn der Inhalt des Akkumulators ungleich 0 ist jmp loop //Springe zu loop end //Programmende