header.self8051
Suche   ||   HOME   ||   Eigenschaften   ||   Befehlsreferenz   ||   Derivate   ||  
 Eigenschaften
 Befehlsreferenz
     Einführung
    > alle Befehle
        ACALL
        ADD
        ADDC
        AJMP
        ANL
        ANL  C
        CJNE
        CLR
        CLR  A
        CPL
        CPL  A
        DA  A
        DEC
        DIV  AB
       > DJNZ
        INC
        INC  DPTR
        JB
        JBC
        JC
        JMP
        JNB
        JNC
        JNZ
        JZ
        LCALL
        LJMP
        MOV
        MOV  C
        MOV  DPTR
        MOVC
        MOVX
        MUL  AB
        NOP
        ORL
        ORL  C
        POP
        PUSH
        RET
        RETI
        RL  A
        RLC  A
        RR  A
        RRC  A
        SETB
        SJMP
        SUBB
        SWAP  A
        XCH
        XCHD
        XRL
 Derivate
 interessante Links
Sie sind hier: SELF8051 || Befehlsreferenz || alle Befehle || DJNZ

DJNZ     <byte>,<rel>


Funktion


Dekrementiere (um 1 verringern) und springe, wenn ungleich Null.

 

DJNZ     Rr,rel                     Rr = Inhalt eines der Register R0 bis R7
DJNZ     direct,rel   direct = Adresse im unteren RAM oder SFR

 

Beschreibung


DJNZ dekementiert (um 1 verringern) den in byte angegebenen Speicherplatz und führt eine Programmverzweigung durch, wenn byte nach dem Dekrementieren ungleich Null ist. Aus dem Wert 00H wird durch Dekrementieren FFH.

Relatives Sprungziel rel
Der Programmzähler wird zunächst auf den nächsten Befehl gesetzt. Ist byte nach dem Dekrementieren von byte ungleich Null ist, wird der Sprungwert rel  zum Programmzähler hinzuaddiert (PC=PC+rel), welches den relativen Sprung zur Folge hat.
Der Sprungwert rel  wird dabei als vorzeichenbehaftete Zahl interpretiert. So sind Sprünge von -128 Bytes (zurück) bzw. 127 Bytes (vor) möglich.

Kennzeichnungsbits werden nicht verändert.

Zur Beachtung:
Dient dieser Befehl zur Änderung des Wertes eines Ausgangsports, so wird der zu verarbeitende Portwert vom Ausgangs-Zwischenspeicher und nicht von den Eingangsanschlüssen direkt gelesen.

 

Beispiel


Die Speicherplätze 40H, 50H und 60H des internen RAM enthalten die Werte 01H, 70H bzw. 15H. Der 2. Befehl

DJNZ     40H,MARKE1
DJNZ     50H,MARKE2
DJNZ     60H,MARKE3

bewirkt einen Sprung zu MARKE2, wobei die drei RAM-Speicherplätze jetzt 00H, 6F und 15H enthalten. Aufgrund des ersten Befehls findet kein Sprung statt, da der Speicherplatz 40H nach dem Dekrementieren Null enthält.

Mit einem einzigen Befehl DJNZ läßt sich eine vorgegebene Anzahl von Programmschleifen auf einfache Weise durchführen oder eine bestimmte Zeitverzögerung im Programm erreichen. Der 2. Befehl der Folge

                     MOV       R2,#8
TOGGLE:    CPL       P1.7
                     DJNZ     R2,TOGGLE

verursacht ein 8maliges Springen nach P1.7, wodurch 4 Ausgangsimpulse an Bit 7 von Port 1 auftreten. Jeder Impuls hat die Länge von 3 Maschinenzyklen, zwei wegen DJNZ und einer wegen der Änderung des Anschlusses (CPL).

 

 

 

DJNZ     Rr,rel

Rr = R0 .. R7 der gewählten Registerbank

Bytes:      2
Zyklen:    2

Befehlscodierung

 1   1   0   1   1   r    r    r 
    
  relative Adresse  

 

 

DJNZ     direct,rel

direct = Adresse im unteren RAM oder SFR

Bytes:      3
Zyklen:    2

Befehlscodierung

 1   1   0   1   0   1   0   1 
    
  direkte Adresse  
   
  relative Adresse  


Fehler auf dieser Seite melden



 

Seite drucken

Send a Friend

 
 zum Seitenanfang   © Autor Dipl. Ing. Sven Pohl || Impressum || Datenschutz


Tipp: rechtssichere Patientenverfügung einfach online erstellen für nur 14,90 €

  

 

Wertschätzen Sie den Aufwand und den Inhalt mit einer kleinen Spende. Danke.

Sie bestimmen die Höhe, jeder noch so kleine Betrag hilft.

 

   
HASM - Skyscrapper 2