Heißer Draht (Assembler)

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