8051 Mikrocontroller
Sprungbefehle, Verzweigungen und Unterprogramme
Hier einige Programmbeispiele:
Mit SWAP Bits tauschen
Bedingte Verzweigungen [CJNE und DJNZ]
Wir schreiben ein Programm, welches 0F in ein Register laden und anschließend mit 01 auf Gleichheit prüfen soll.
Bei Ungleichheit, soll vom Register 1 abgezogen werden usw.
Bei Gleichheit soll 55 in den Akku geladen werden.
Beispiel:
Wir vergleichen mit dem Befehl DJNZ (Decrement Jump Not Zero) - [ziehe 1 ab und springe wenn nicht 0]
Ist der zu vergleichende Inhalt ungleich 0, wird zur Sprungmarke gesprungen und der zu vergleichende Inhalt wird um 1 decrementiert.
Beispiel:
Unbedingte Sprungbefehle
LJMP
(Long Jump) - Dieser Sprungbefehl kann einen Sprung über den gesamten 64Kbyte Programmspeicher ausführen
SJMP
(Short Jump) - bietet einen möglichen Sprung im Bereich -128 bis + 127 Bit
AJMP
(Along Jump) - kann Sprünge innerhalb eines 2Kbyte Bereiches ausführen
Bedingte Sprungbefehle
JZ
(Jump Zero) - Springe, wenn Akku = 0
Die relative Reichweite des Sprungbefehls liegt im Bereich -128 bis + 127 Bit
JNZ
(Jump Not Zero) - Springe, wenn Akku <> 0
Die relative Reichweite des Sprungbefehls liegt im Bereich -128 bis + 127 Bit
Unterprogramme werden vom Hauptprogramm mit dem Befehl CALL, ACALL oder LCALL aufgerufen.
Mit RET wird das Unterprogramm beendet und springt in das Hauptprogramm an die erste Stelle nach dem Aufruf.
Mit F11 können Sie den Debugger in Keil uVision auch das Unterprogramm schrittweise auszuführen lassen.
Beispiel:
Programmbeispiel:
Register 7 soll mit dem Wert 01 geladen werden.
Im Unterprogramm soll R7 solange um 1 erhöht werden, bis der Wert 0F erreicht ist.
Ist der Wert 0F erreicht, soll der Inhalt von R7 im Hauptprogramm in den Akku geladen werden.