Titelbild Mikrocontroller

Befehlsübersicht AVR

oben Arithmetische und logische Befehle

MnemonikOperandenBeschreibungOperationFlagsTakte
ADD Rd, Rr Addiert zwei Register Rd ← Rd + Rr Z, C, N, V, S, H 1
ADC Rd, Rr Addiert Carry und zwei Register Rd ← Rd + Rr + C Z, C, N, V, S, H 1
ADIW (1) Rd, K (3) Addiert eine Konstante zu einem Registerpaar Rd+1:Rd ← Rd+1:Rd + K Z, C, N, V, S 2
SUB Rd, Rr Subtrahiert zwei Register Rd ← Rd - Rr Z, C, N, V, S, H 1
SUBI Rd, K (3) Subtrahiert eine Konstante vom Register Rd ← Rd - K Z, C, N, V, S, H 1
SBC Rd, Rr Subtrahiert Carry und Register vom Register Rd ← Rd - Rr - C Z, C, N, V, S, H 1
SBCI Rd, K (3) Subtrahiert eine Konstante und Carry vom Register Rd ← Rd - K - C Z, C, N, V, S, H 1
SBIW (1) Rd, K (3) Subtrahiert eine Konstante von einem Registerpaar Rd+1:Rd ← Rd+1:Rd - K Z, C, N, V, S 2
AND Rd, Rr Logische UND-Verknüpfung zweier Register Rd ← Rd • Rr Z, N, V, S 1
ANDI Rd, K (3) Logische UND-Verknüpfung Register mit Konstante Rd ← Rd • K Z, N, V, S 1
OR Rd, Rr Logische ODER-Verknüpfung zweier Register Rd ← Rd v Rr Z, N, V, S 1
ORI Rd, K (3) Logische ODER-Verknüpfung Register mit Konstante Rd ← Rd v K Z, N, V, S 1
EOR Rd, Rr Logische XOR-Verknüpfung zweier Register Rd ← Rd unten Rr Z, N, V, S 1
COM Rd Einerkomplement des Registers Rd ← FFh - Rd Z, C, N, V, S 1
NEG Rd Zweierkomplement des Registers Rd ← 00h - Rd Z, C, N, V, S, H 1
SBR Rd, K (3) Setzt Bit(s) in Register Rd ← Rd v K Z, N, V, S 1
CBR Rd, K (3) Löscht Bit(s) in Register Rd ← Rd • (FFh - K) Z, N, V, S 1
INC Rd Inkrementieren Register Rd ← Rd + 1 Z, N, V, S 1
DEC Rd Dekrementieren Register Rd ← Rd - 1 Z, N, V, S 1
TST Rd Test ob Register Null oder Minus Rd ← Rd • Rd Z, N, V, S 1
CLR Rd Löschen Register Rd ← Rd unten Rd Z, N, V, S 1
SER Rd (3) Setzen des Registers Rd ← FFh keines 1
MUL (1) Rd, Rr Multipliziert die Register Rd und Rr, ohne Vorzeichen R1:R0 ← Rd x Rr Z, C 2
MULS (1) Rd, Rr (3) Multipliziert die Register Rd und Rr, mit Vorzeichen R1:R0 ← Rd x Rr Z, C 2
MULSU (1) Rd, Rr (3) Multipliziert die Register Rd und Rr, mit / ohne Vorzeichen R1:R0 ← Rd x Rr Z, C 2
FMUL (1) Rd, Rr (3) Multipliziert die Register Rd und Rr, gebrochene Zahlen ohne Vorzeichen R1:R0 ← (Rd x Rr)<<1 Z, C 2
FMULS (1) Rd, Rr (3) Multipliziert die Register Rd und Rr, gebrochene Zahlen mit Vorzeichen R1:R0 ← (Rd x Rr)<<1 Z, C 2
FMULSU (1) Rd, Rr (3) Multipliziert die Register Rd und Rr, gebrochene Zahlen mit / ohne Vorzeichen R1:R0 ← (Rd x Rr)<<1 Z, C 2




oben Datentransport - Befehle

MnemonikOperandenBeschreibungOperationFlagsTakte
MOV Rd, Rr Kopiert von Register nach Register Rd ← Rr keines 1
MOVW (1) Rd, Rr Kopiert von Registerpaar nach Registerpaar Rd+1:Rd ← Rr+1:Rr keines 1
LDI Rd, K (3) Register mit Konstante laden Rd ← K keines 1
LDS (1) Rd, k Register mit Konstante aus Datenspeicher laden Rd ← (k) keines 2
LD (2) Rd, X Register indirekt laden Rd ← (X) keines 2
LD (2) Rd, X+ Register indirekt laden und Zeiger anschließend inkrementieren Rd ← (X), X ← X + 1 keines 2
LD (2) Rd, -X Register indirekt laden und Zeiger vorher dekrementieren X ← X - 1, Rd ← (X) keines 2
LD (2) Rd, Y Register indirekt laden Rd ← (Y) keines 2
LD (2) Rd, Y+ Register indirekt laden und Zeiger anschließend inkrementieren Rd ← (Y), Y ← Y + 1 keines 2
LD (2) Rd, -Y Register indirekt laden und Zeiger vorher dekrementieren Y ← Y - 1, Rd ← (Y) keines 2
LDD (1) Rd, Y+q Register indirekt mit Verschiebung laden Rd ← (Y + q) keines 2
LD (2) Rd, Z Register indirekt laden Rd ← (Z) keines 2
LD (2) Rd, Z+ Register indirekt laden und Zeiger anschließend inkrementieren Rd ← (Z), Z ← Z + 1 keines 2
LD (2) Rd, -Z Register indirekt laden und Zeiger vorher dekrementieren Z ← Z - 1, Rd ← (Z) keines 2
LDD (2) Rd, Z+q Register indirekt mit Verschiebung laden Rd ← (Z + q) keines 2
STS (1) k, Rr Register in Datenspeicher speichern (k) ← Rr keines 2
ST (2) X, Rr Register indirekt speichern (X) ← Rr keines 2
ST (2) X+, Rr Register indirekt speichern und X danach inkrementieren (X) ← Rr, X ← X + 1 keines 2
ST (2) -X, Rr Register indirekt speichern und X vorher dekrementieren X ← X - 1, (X) ← Rr keines 2
ST (2) Y, Rr Register indirekt speichern (Y) ← Rr keines 2
ST (2) Y+, Rr Register indirekt speichern und Y danach inkrementieren (Y) ← Rr, Y ← Y + 1 keines 2
ST (2) -Y, Rr Register indirekt speichern und Y vorher dekrementieren Y ← Y - 1, (Y) ← Rr keines 2
STD (1) Y+q, Rr Register indirekt mit Verschiebung speichern (Y + q) ← Rr keines 2
ST (2) Z, Rr Register indirekt speichern (Z) ← Rr keines 2
ST (2) Z+, Rr Register indirekt speichern und Z danach inkrementieren (Z) ← Rr, Z ← Z + 1 keines 2
ST (2) -Z, Rr Register indirekt speichern und Z vorher dekrementieren Z ← Z - 1, (Z) ← Rr keines 2
STD (1) Z+q, Rr Register indirekt mit Verschiebung speichern (Z + q) ← Rr keines 2
LPM (2)   Laden aus dem Programmspeicher in R0 R0 ← (Z) keines 3
LPM (2) Rd, Z Laden aus dem Programmspeicher in Rd Rd ← (Z) keines 3
LPM (2) Rd, Z+ Laden aus dem Programmspeicher in Rd und Z hinterher inkrementieren Rd ← (Z), Z ← Z + 1 keines 3
ELPM (1)   Laden aus dem erweiterten Programmspeicher in R0 R0 ← (RAMPZ:Z) keines 3
ELPM (1) Rd, Z Laden aus dem erweiterten Programmspeicher in Rd Rd ← (RAMPZ:Z) keines 3
ELPM (1) Rd, Z+ Laden aus dem erweiterten Programmspeicher in Rd und Z hinterher inkrementieren Rd ← (RAMPZ:Z), Z ← Z + 1 keines 3
SPM (1)   In den Programmspeicher speichern (Z) ← R1:R0 keines -
IN Rd, A I/O Stelle einlesen Rd ← A keines 1
OUT A, Rr I/O Stelle ausgeben A ← Rr keines 1
PUSH (1) Rr Sichert Rr in den Stack STACK ← Rr keines 2
POP (1) Rd Holt Stack in Rd Rd ← STACK keines 2


oben MCU - Steuerbefehle

MnemonikOperandenBeschreibungOperationFlagsTakte
BREAK (1) - Unterbrechung siehe Beschreibung der Break - Funktion keines 1
NOP - Leerbefehl keine Operation keines 1
SLEEP - Übergang in den Sleep-Modus siehe Beschreibung der Sleep - Funktion keines 1
WDR - Watchdog Reset siehe Beschreibung Watchdog / Timer keines 1


oben Verzweigungs - Befehle

MnemonikOperandenBeschreibungOperationFlagsTakte
RJMP k Relativer Sprung PC ← PC + k + 1 keines 2
IJMP (1)   Indirekter Sprung zu (Z) PC(15:0) ← Z, PC(21:16) ← 0 keines 2
EIJMP (1)   Erweiterter indirekter Sprung zu (Z) PC(15:0) ← Z, PC(21:16) ← EIND keines 2
JMP (1) k Direkter Sprung PC ← k keines 3
RCALL k Relativer Aufruf Unterprogramm PC ← PC + k + 1 keines 3 / 4
ICALL (1)   Indirekter Aufruf Unterprogramm PC(15:0) ← Z, PC(21:16) ← 0 keines 3 / 4
EICALL (1)   Erweiterter indirekter Aufruf Unterprogramm PC(15:0) ← Z, PC(21:16) ← EIND keines 4
CALL (1) k Direkter Aufruf Unterprogramm PC ← k keines 4
RET   Rückkehr aus Unterprogramm PC ← STACK keines 4
RETI   Rückkehr aus Interrupt - Routine PC ← STACK I 4
CPSE Rd, Rr Vergleichen, überspringen wenn gleich Wenn (Rd=Rr) dann PC ← PC + 2 oder 3 keines 1/2/3
CP Rd, Rr Vergleichen Rd - Rr Z, N, S, V, C, H 1
CPC Rd, Rr Register Vergleichen mit Carry Rd - Rr - C Z, N, S, V, C, H 1
CPI Rd, K (3) Vergleiche Register mit Konstante Rd - K Z, N, S, V, C, H 1
SBRC Rr, b Überspringen, wenn Bit in Register gelöscht Wenn (Rr(b)=0) dann PC ← PC + 2 oder 3 keines 1/2/3
SBRS Rr, b Überspringen, wenn Bit in Register gesetzt Wenn (Rr(b)=1) dann PC ← PC + 2 oder 3 keines 1/2/3
SBIC A, b (3) Überspringen, wenn Bit in I/O-Register gelöscht Wenn (A(b)=0) dann PC ← PC + 2 oder 3 keines 1/2/3
SBIS A, b (3) Überspringen, wenn Bit in I/O-Register gesetzt Wenn (A(b)=1) dann PC ← PC + 2 oder 3 keines 1/2/3
BRBS s, k Verzweigen, wenn Statusbit s gesetzt ist. Wenn (SREG(s)=1) dann PC ← PC + k + 1 keines1 / 2
BRBC s, k Verzweigen, wenn Statusbit s gelöscht ist. Wenn (SREG(s)=0) dann PC ← PC + k + 1 keines1 / 2
BREQ k Verzweigen wenn gleich Wenn (Z=1) dann PC ← PC + k + 1 keines1 / 2
BRNE k Verzweigen wenn nicht gleich Wenn (Z=0) dann PC ← PC + k + 1 keines1 / 2
BRCS k Verzweigen wenn Carry gesetzt ist. Wenn (C=1) dann PC ← PC + k + 1 keines1 / 2
BRCC k Verzweigen wenn Carry gelöscht ist. Wenn (C=0) dann PC ← PC + k + 1 keines1 / 2
BRSH k Verzweigen wenn gleich oder grösser Wenn (C=0) dann PC ← PC + k + 1 keines1 / 2
BRLO k Verzweigen wenn kleiner Wenn (C=1) dann PC ← PC + k + 1 keines1 / 2
BRMI k Verzweigen wenn Minus Wenn (N=1) dann PC ← PC + k + 1 keines1 / 2
BRPL k Verzweigen wenn Plus Wenn (N=0) dann PC ← PC + k + 1 keines1 / 2
BRGE k Verzweigen wenn größer oder gleich, vorzeichenbehaftet Wenn (N unten V = 0) dann PC ← PC + k + 1 keines1 / 2
BRLT k Verzweigen wenn kleiner als, vorzeichenbehaftet Wenn (N unten V = 1) dann PC ← PC + k + 1 keines1 / 2
BRHS k Verzweigen wenn H-Carry Flag gesetzt ist Wenn (H=1) dann PC ← PC + k + 1 keines1 / 2
BRHC k Verzweigen wenn H-Carry Flag gelöscht ist Wenn (H=0) dann PC ← PC + k + 1 keines1 / 2
BRTS k Verzweigen wenn T-Flag gesetzt ist Wenn (T=1) dann PC ← PC + k + 1 keines1 / 2
BRTC k Verzweigen wenn T-Flag gelöscht ist Wenn (T=0) dann PC ← PC + k + 1 keines1 / 2
BRVS k Verzweigen wenn Overflow-Flag (V) gesetzt ist Wenn (V=1) dann PC ← PC + k + 1 keines1 / 2
BRVC k Verzweigen wenn Overflow-Flag (V) gelöscht ist Wenn (V=0) dann PC ← PC + k + 1 keines1 / 2
BRIE k Verzweigen wenn Interrupt freigegeben Wenn (I=1) dann PC ← PC + k + 1 keines1 / 2
BRID k Verzweigen wenn Interrupt gesperrt Wenn (I=0) dann PC ← PC + k + 1 keines1 / 2


oben Bit - Befehle und Bit-Test - Befehle

MnemonikOperandenBeschreibungOperationFlagsTakte
SBI A, b (3) Bit in I/O-Register setzen I/O(A, b) ← 1 keines2
CBI A, b (3) Bit in I/O-Register löschen I/O(A, b) ← 0 keines2
LSL Rd Logisches Schieben nach Links Rd(n+1) ← Rd(n), Rd(0) ← 0 Z, C, N, V, H 1
LSR Rd Logisches Schieben nach Rechts Rd(n) ← Rd(n+1), Rd(7) ← 0 Z, C, N, V 1
ROL Rd Nach Links rotieren durch Carry Rd(0) ← C, Rd(n+1) ← Rd(n), C ← Rd(7) Z, C, N, V, H 1
ROR Rd Nach Rechts rotieren durch Carry Rd(7) ← C, Rd(n) ← Rd(n+1), C ← Rd(0) Z, C, N, V 1
ASR Rd Arithmetisches Schieben nach Rechts Rd(n) ← Rd(n+1), n = 0...6 Z, C, N, V 1
SWAP Rd Nibbles vertauschen Rd(3..0) ← Rd (7..4), Rd(7..4) ← Rd(3..0) keines 1
BSET s Flag im SREG setzen SREG(s) ← 1 SREG(s) 1
BCLR s Flag im SREG löschen SREG(s) ← 0 SREG(s) 1
BST Rr, b Bit von Register nach T speichern T ← Rr(b) T 1
BLD Rd, b Bit von T nach Register laden Rd(b) ← T keines 1
SEC   Carry setzen C ← 1 C 1
CLC   Carry löschen C ← 0 C 1
SEN   Negativ-Flag N setzen N ← 1 N 1
CLN   Negativ-Flag N löschen N ← 0 N 1
SEZ   Zero-Flag setzen Z ← 1 Z 1
CLZ   Zero-Flag löschen Z ← 0 Z 1
SEI   Globale Interrupt-Freigabe I ← 1 I 1
CLI   Globale Interrupt-Sperre I ← 0 I 1
SES   Vorzeichen Test-Flag setzen S ← 1 S 1
CLS   Vorzeichen Test-Flag löschen S ← 0 S 1
SEV   Zweierkomplement-Overflow setzen V ← 1 V 1
CLV   Zweierkomplement-Overflow löschen V ← 0 V 1
SET   T in SREG setzen T ← 1 T 1
CLT   T in SREG löschen T ← 0 T 1
SEH   Half-Carry-Flag in SREG setzen H ← 1 H 1
CLH   Half-Carry-Flag in SREG löschen H ← 0 H 1


Erläuterungen:
(1) Dieser Befehl ist nicht in allen AVR - Mikrocontrollern implementiert
(2) Nicht alle Varianten dieses Befehls sind in allen AVR - Mikrocontrollern verfügbar
(3) Dieser Befehl kann nicht mit allen Registern verwendet werden


Impressum