Aus RN-Wissen.de
< Benutzer:Benedikt.Seidl
Version vom 12. April 2007, 15:16 Uhr von Benedikt.Seidl (Diskussion | Beiträge) (meins ;-))

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche
Balkonkraftwerk Speicher und Wechselrichter Tests und Tutorials

Kurzübersicht Assembler Befehle

ADDLW Add literal and W
ADDWF Add W and f
ANDLW AND literal with W
ANDWF AND W with f
BCF Bit Clear f
BSF Bit Set f
BTFSC Bit Test f, Skip if Clear
BTFSS Bit Test f, Skip if Set
CALL Call subroutine
CLRF Clear f
CLRW Clear W
CLRWDT Clear Watchdog Timer
COMF Complement f
DECF Decrement f
DECFSZ Decrement f, Skip if 0
GOTO Go to address or label
INCF Increment f
INCFSZ Increment f, Skip if 0
IORLW Inclusive OR literal with W
IORWF Inclusive OR W with f
MOVF Move f
MOVLW Move literal to W
MOVWF Move W to f
NOP No Operation
RETFIE Return from interrupt
RETLW Return with literal in W
RETURN Return from Subroutine
RLF Rotate Left f through Carry
RRF Rotate Right f through Carry
SLEEP Go into standby mode
SUBLW Subtract W from literal
SUBWF Subtract W from f
SWAPF Swap nibbles in f
XORLW Exclusive OR literal with W
XORWF Exclusive OR W with f

Kurzübersicht zum Ausdrucken

Ausführliche Beschreibung zu den Befehlen

Erklärungen zu den Verwendeten Platzhaltern:

  • k stellt einen fest definierten Wert da. z.B. 0x20, d'42' oder b'00101010'
  • W steht für das W-Register.
  • d steht für destination (Ziel). Im code wird d durch ein w bzw. 0 (der Wert wird in das W-Register gespeichert ) oder f bzw. 1 (der Wert wird in das davor definierte Register gespeichert)
  • b steht für Bitnummer im Register (eine Zahl zwischen 0 und 7)
  • R steht für ein Register
  • fett geschrieben Bedeutet, dass es ein Platzhalter ist und im Quellcode durch eine Registeradresse oder einen Wert ersetzt werden muss
  • Schreibmaschinenstil bedeutet, dass es so im Quellcode geschrieben werden kann.
ADDLW k Add W and literal - Addiere W und Zahl
Es wird die Rechenoperation [math]k+W[/math] ausgeführt und das Ergebniss in das W-Register gespeichert. Dieser Befehl beeinflusst das STATUS-Register. Siehe hierzu Überprüfung von Rechenergebnissen mit Hilfe des STATUS-Register
ADDWF R,d Add W and f - Addiere W und f
Es wird die Rechenoperation [math]R+W[/math] ausgeführt und das Ergebniss entweder in das W-Register (d=W=0) oder in R gespeichert (d=F=1). Dieser Befehl beeinflusst das STATUS-Register. Siehe hierzu Überprüfung von Rechenergebnissen mit Hilfe des STATUS-Register
ANDWF k AND literal with W
Es wird bitweise die logische Funktion [math]W\ and\ k[/math] ausgeführt und das Ergebniss in das W-Register gespeichert. Dieser Befehl setzt das Z bit des STATUS-Register, falls W=k und das Ergebnis 0 ist.
Zur Verdeutlichung der Operation:
1100 1010 ---- and 1000
ANDWF R,d AND W with f - ???
Es wird bitweise die logische Funktion [math]W\ and\ R[/math] ausgeführt und das Ergebniss entweder in das W-Register (d=W=0) oder in R gespeichert (d=F=1). Vergleiche ANDWF
BCF R,b Bit Clear f - Bit b im R wird gelöscht
Mit dem Befehl BCF wird das Bit b im Register R gelöscht. Ein Beispiel:
movlw b'11111111'  ;es wird b'11111111' in das W-Register geschrieben BCF W,2  ;es wird bit 2 im W-Register gelöscht.  ;das Ergebnis ist: b'11111011'
</dd> BSF R,b Bit Set f - Bit b im R wird gesetzt
Mit dem Befehl BSF wird das Bit b im Register R gesetzt. Ein Beispiel:
clrw  ;es wird b'00000000' in das W-Register geschrieben BSF W,2  ;es wird bit 2 im W-Register gesetzt.  ;das Ergebnis ist: b'00000100'
</dd> BTFSC R,b Bit Test f, Skip if Clear - Wenn das Bit b im Register R 0 ist, überspringe den nächsten Befehl
Mit dem Befehl BTFSC kann eine Verzweigung im Programmablauf bewirkt werden. Wenn das Bit b im Register R 0 ist, wird der nächste Befehl übersprungen. Ein Beispiel:
movlw b'00000001'  ;es wird die Zahl 1 in das W-Register kopiert. BTFSC W,0  ;es wird bit 0 geprüft.  ;wenn es 0 ist, wird der nächste Befehl übersprungen goto IST_EINS  ;springt zur Marke "IST_EINS" <- in diesem Fall wird dieser Sprungbefehl ausgeführt. goto IST_NULL  ;springt zur Marke "IST_NULL"
</dd> BTFSS R,b Bit Test f, Skip if Set - Wenn das Bit b im Register R 1 ist, überspringe den nächsten Befehl
Mit dem Befehl BTFSS kann eine Verzweigung im Programmablauf bewirkt werden. Wenn das Bit b im Register R 1 ist, wird der nächste Befehl übersprungen. Ein Beispiel:
movlw b'00000001'  ;es wird die Zahl 1 in das W-Register kopiert. BTFSS W,0  ;es wird bit 0 geprüft.  ;wenn es 1 ist, wird der nächste Befehl übersprungen goto IST_NULL  ;springt zur Marke "IST_NULL" goto IST_EINS  ;springt zur Marke "IST_EINS" <- in diesem Fall wird dieser  ;Sprungbefehl ausgeführt, da der Befehl  ;darüber übersprungen wurde.
</dd>


CALL Call Subroutine - Rufe Unterprogramm auf
Mit dem CALL Befehl wird ein Unterprogramm aufgerufen. Mit dem RETURN-Befehl wird das Unterprogramm beendet und man kehrt zum Befehl nach dem CALL-Befehl zurück. Das Unterprogramm wird so definiert, dass im Quellcode der Name des Unterprogramms nicht eingerückt steht. Ein Beispiel:
movlw d'13'  ;in das W-Register wird 13d geladen CALL Unterprogramm1  ;es wird das Unterprogramm "Unterprogramm1" aufgerufen movwf ergebnis  ;das W-Register wird in das Register "ergebnis" kopiert.  ;im Register "ergebnis" steht nun 23d Unterprogramm1  ;zählt 10 zum W-Register addlw d'10'  ;es wird 10d zum W-Register addiert RETURN  ;kehre zurück zum Aufrufer
</dd> CLRF R Clear f - Schreibe 0 in das Register R
Das Register R wird mit Nullen gefüllt (gelöscht).
CLRW Clear W - Schreibe 0 in W
Das W-Register (W) wird mit Nullen gefüllt (gelöscht).
CLRWDT Clear Watchdog Timer - Setzt den Watchdog-Timer zurück
Es wird der WDT (Watchdog-Timer) zurückgesetzt und der Zähler des WDT auf 0 gesetzt, zusätzlich werden die STATUS-bits TO und PD gesetzt.
COMF R,d Complement f - negiere alle bits im Register R
Von der Binärzahl im Register R werden die 0 mit 1 und 1 mit 0 ersetzt. Das Ergebnis wird entweder in das W-Register (d=W=0) oder in R gespeichert (d=F=1). Ein kleines Beispiel: aus AAh (10101010b) wird 55h (01010101b).
DECF R,d Decrement f, Skip if 0 - Subtrahiert 1 vom Regiser f
Vom Wert des Registers R wird 1 subtrahiert und das Ergebnis entweder in das W-Register (d=W=0) oder in R gespeichert (d=F=1). Dieser Befehl beeinflusst das C-Flag im STATUS-Register nicht.
DECFSZ R,d Decrement f, Skip if 0 - Subtrahiert 1 vom Regiser f, überspringe wenn 0
Vom Wert des Registers R wird 1 subtrahiert und das Ergebnis entweder in das W-Register (d=W=0) oder in R gespeichert (d=F=1). Der Zusatz SZ steht für skip if zero, d.h. wenn das Ergebnis der Rechnung Null ist, wird der nächste Befehl übersprungen. Dieser Befehl wird für Schleifen mit bestimmter Anzahl der Durchläufe benutzt.
GOTO Go to address - Gehe zu Adresse/Sprungmarke
Nach dem GOTO Befehl wird das Programm ab der Adresse weiter ausgeführt, die nach dem GOTO-Befehl steht. Diese Adresse wird durch so genannte Sprungmarke definiert, welche, im Gegensatz zu den Befehlen nicht eingerückt im Quellcode stehen.
INCF R,d Increment f - Addiere 1 zum Register f
Zum Wert des Registers R wird 1 addiert und das Ergebniss entweder in das W-Register (d=W=0) oder in R gespeichert (d=F=1). Dieser Befehl beeinflusst das C-Flag im STATUS-Register nicht.
INCFSZ R,d Increment f, Skip if 0 - Addiere 1 zum Regiser f, überspringe wenn 0
Zum Wert des Registers R wird 1 addiert und das Ergebniss entweder in das W-Register (d=W=0) oder in R gespeichert (d=F=1). Der Zusatz SZ steht für skip if zero, d.h. wenn das Ergebnis der Rechnung Null ist, wird der nächste Befehl übersprungen. Dieser Befehl wird für Schleifen mit bestimmter Anzahl der Durchläufe benutzt.
IORLW k OR literal with W
Es wird bitweise die logische Funktion [math]W\ or\ k[/math] ausgeführt und das Ergebniss in das W-Register gespeichert. Dieser Befehl setzt das Z bit des STATUS-Register, falls W=k und das Ergebnis 0 ist.
Zur Verdeutlichung der Ooperation:
1100 1010 ---- or 1110
IORWF R,d OR W with f
Es wird bitweise die logische Funktion [math]W\ or\ R[/math] ausgeführt und das Ergebniss entweder in das W-Register (d=W=0) oder in R gespeichert (d=F=1). Vergleiche IORLW
MOVF R,d Move f - Bewege f
Das Register R wird in das W-Register (d=W=0) oder wieder in R kopiert (d=F=1). Letzteres mag sinnlos scheinen, ist aber nützlich, da durch den Befehl das Z-Bit im STATUS-Regsiter gesetzt wird, falls R Null ist.
MOVLW k Move literal to W - Bewege Zahl in W-Register
Der festgelegte Wert k wird in das W-Register kopiert.
MOVWF R Move W to f - Bewege W-Register in das Register F
Das W-Register wird in das Register R kopiert.
NOP No Operation - Kein Befehl zum Ausführen (warte)
Dieser Befehl macht nichts. Er verbraucht nur Zeit, welche sich einfach mit folgender Formel berechnen lässt. [math]t=\frac{4}{f}[/math],wobei [math]f[/math] für die Frequenz des Oszillators steht.
RETFIE Return from interrupt - Kehre zurück aus der Unterbrechung
Mit diesem Befehl wird die Interrupt Service Routine (ISR) beendet und das Programm wird an der Zeile weiter ausgeführt, vor der es durch den Interrupt angehalten wurde. Es werden auch alle Interrupts wieder erlaubt (das GIE bit wird gesetzt). Siehe hierzu auch Interrupt
RETLW k Return with literal in W - Kehre zurück mit Zahl k im W-Register
Wurde ein Programmteil mit dem Befehl CALL aufgerufen, dann springt man mit dem Befehl RETLW zurück in die nächste Zeile nach der Zeile aus der das CALL Befehl ausgeführt wurde. Der in k angegebene Wert wird dabei in das W-Register geschrieben. Dieser Befehl wird vor allem für s.g Wertetabellen (eng: lookup tables) verwendet.
RETURN Return from Subroutine - Kehre zurück zum Übergeordneten Programmteil
Wurde ein Programmteil mit dem Befehl CALL aufgerufen, dann springt man mit dem Befehl RETURN zurück zu der nächsten Zeile nach der Zeile aus der das CALL Befehl ausgeführt wurde.
RLF R,d Rotate Left f through Carry - Rotiere das Register f mithilfe des Carry-bits nach links
Alle Bits im Register R werden um eine Position nach links verschoben. Dabei wird das Carry bit (STATUS,C) in das Bit 0 des Registers R geschoben. Bit 7 aus dem Register R wird in das Carry bit "geschoben". Das Ergebnis wird entweder in das W-Register (d=W=0) oder in R gespeichert (d=F=1).
Zur Verdeutlichung:
|C| |-Register R-| ;C steht für das Carry-bit, STATUS,C c 7 6 5 4 3 2 1 0 ;vor dem Verschieben 7 6 5 4 3 2 1 0 c ;nach dem Verschieben
RRF R,d Rotate Right f through Carry - Rotiere das Register f mithilfe des Carry-bits nach rechts
Alle Bits im Register R werden um eine Position nach rechts verschoben. Dabei wird das Carry bit (STATUS,C) in das 7.Bit des Registers R geschoben. Bit 0 aus dem Register R wird in das Carry bit "geschoben". Das Ergebnis wird entweder in das W-Register (d=W=0) oder in R gespeichert (d=F=1).
Zur Verdeutlichung:
|C| |-Register R-| ;C steht für das Carry-bit, STATUS,C C 7 6 5 4 3 2 1 0 ;vor dem Verschieben 0 C 7 6 5 4 3 2 1 ;nach dem Verschieben
SLEEP Go into standby mode - Versetze den Mirokontroller in Bereitschaftsmodus
Der µC wird in den Sleep-Mode versetzt, in dem er weniger Strom verbraucht. Er kann durch einen Reset, einem Watchdog-Timer-Reset oder durch einen Interrupt wieder aufgeweckt werden.
SUBLW k Subtract W from literal - Ziehe W von Zahl ab
Es wird die Rechenoperation [math]k-W[/math] ausgeführt und das Ergebniss in das W-Register gespeichert. Dieser Befehl beeinflusst das STATUS-Register. Siehe hierzu Überprüfung von Rechenergebnissen mit Hilfe des STATUS-Register
SUBWF R,d Subtract W from f - Ziehe W von f ab
Es wird die Rechenoperation [math]R-W[/math] ausgeführt und das Ergebniss entweder in das W-Register (d=W=0) oder in R gespeichert (d=F=1). Dieser Befehl beeinflusst das STATUS-Register. Siehe hierzu Überprüfung von Rechenergebnissen mit Hilfe des STATUS-Register
Beispiel:
movlw d'20'  ;schreibe 20 in das W-Register movwf Register1  ;bewegt das W-Register in das Register1 movlw d'10'  ;schreibt 10 in das W-Register SUBWF Register1,F ;schreibt Register1(20)-W(10) in Register1
SWAPF R,d Swap nibbles in f - Vertausche die Halbbytes (Nibbles)
Es werden die höheren 4 bit (bit7-bit4) mit den niedrigeren 4 bit (bit3-bit0) eines Registers vertauscht und entweder in das W-Register (d=W=0) oder in R gespeichert (d=F=1).
Beispiel:
movlw b'00001111' ;schreibe b'00001111' in das W-Register movwf Register1  ;kopiert das W-Register in das Register1 SWAPF Register1,W ;vertauscht die ersten 4 bit mit den letzen  ;4 bit in Register 1 und schreibt es in das W-Register  ;im W-Register steht nun b'11110000'
XORLW k Exclusive OR literal with W
Es wird bitweise die logische Funktion [math]W\ xor\ k[/math] ausgeführt und das Ergebniss in das W-Register gespeichert. Dieser Befehl setzt das Z bit des STATUS-Registers, falls W=k und das Ergebnis 0 ist.
Zur Verdeutlichung der Operation:
1100 1010 ---- xor 0110
XORWF R,d Exclusive OR W with f
Es wird bitweise die logische Funktion [math]W\ xor\ R[/math] ausgeführt und das Ergebniss entweder in das W-Register (d=W=0) oder in R gespeichert (d=F=1). Vergleiche XORLW

LiFePO4 Speicher Test