Sprungbefehle, Verzweigungen und Unterprogramme

 

Hier einige Programmbeispiele:

 

Mit SWAP Bits tauschen

swap Befehl

 

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:

bedingte Verzweigungen CJNE DJNZ

 

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:

Sprungbefehle und Vergleiche

 

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:

Sprungbefehl CALL ACALL LCALL

 

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.

Unterprogramme