Titelbild Mikrocontroller

C-Befehle


oben CALL - Long Call to a Subroutine

Syntax: CALL k
Funktion: Ruft ein Unterprogramm innerhalb des zur Verfügung stehenden Programmspeichers auf. Die Rücksprungadresse (aktueller PC + 2), die den Befehl nach der Call-Anweisung enthält, wird in den Stack gesichert (siehe auch RCALL). Dieser Befehl ist nicht in allen AVR-Mikrocontrollern verfügbar.
Operation: (a) PC ← k, Bausteine mit 16 Bit PC (128k)
(b) PC ← k, Bausteine mit 22 Bit PC (8M)
Operanden: (a) 0 ≤ k ≤ 64k, STACK ← PC+2, SP ← SP-2
(b) 0 ≤ k ≤ 4M, STACK ← PC+2, SP ← SP-3
Programmzähler: PC ← k
Words: 2 (4 Byte)
Zyklen: (a) 4
(b) 5
32 Bit Operations Code: 1001 010k kkkk 111k
kkkk kkkk kkkk kkkk

Flags im Status-Register (SREG):
ITHSVNZC
--------

Beispiel:
    call ausgabe      ;Aufruf des Unterprogramms ausgabe
    nop               ;Leerbefehl, der nach dem Rücksprung 
                      ;ausgeführt wird.
    ...

ausgabe: add r0,r1    ;Beginn des Unterprogramms ausgabe
    ...
    ret               ;Rücksprung aus dem Unterprogramm 


oben CBI - Clear Bit in I/O-Register

Syntax: CBI A,b
Funktion: Dieser Befehl löscht ein einzelnes Bit in einem der I/O-Register. Mit CBI können allerdings nur die Bits in den unteren 32 I/O-Registern gelöscht werden (Adresse 0 bis 31).
Operation: I/O(A,b) ← 0
Operanden: 0 ≤ A ≤ 31, 0 ≤ b ≤ 7
Programmzähler: PC ← PC + 1
Words: 1 (2 Byte)
Zyklen: 1
16 Bit Operations Code: 1001 1000 AAAA Abbb

Flags im Status-Register (SREG):
ITHSVNZC
--------

Beispiel:
cbi $12,7    ;Löscht das Bit 7 in Port D

oben CBR - Clear Bits in Register

Syntax: CBR Rd,K
Funktion: Dieser Befehl löscht ein oder mehrer Bits in einem Register. Dabei führt er eine logische UND-Verknüpfung zwischen dem Register Rd und dem Komplement der Konstante K durch. Mit CBR können allerdings nur die Bits in den oberen 32 Registern gelöscht werden (R16 bis R31).
Operation: Rd ← RD • (FFh - K)
Operanden: 16 ≤ d ≤ 31, 0 ≤ K ≤ 255
Programmzähler: PC ← PC + 1
Words: 1 (2 Byte)
Zyklen: 1
16 Bit Operations Code: 0111 KKKK dddd KKKK

Flags im Status-Register (SREG):
ITHSVNZC
---0-
S: Das S-Flag wird gesetzt, wenn entweder das N-Flag oder das V-Flag gesetzt ist. Wenn beide Flags gleich sind, wird das S-Flag gelöscht.
V: Das V-Flag wird gelöscht.
N: Das N-Flag wird gesetzt, wenn das MSB des Ergebnisses gesetzt ist, andernfalls wird es gelöscht.
Z: Das Z-Flag wird gesetzt, wenn das Ergebnis 00h ist, andernfalls wird das Flag gelöscht.


Beispiel:
cbr r16,$F0    ;Löscht die oberen 4 Bit im Register R16

cbr r18,1    ;Löscht das Bit 0 im Register R18



oben CLC - Clear Carry-Flag

Syntax: CLC
Funktion: Dieser Befehl löscht das Carry-Flag C im Status-Register SREG.
Operation: C ← 0
Operanden: keine
Programmzähler: PC ← PC + 1
Words: 1 (2 Byte)
Zyklen: 1
16 Bit Operations Code: 1001 0100 1000 1000

Flags im Status-Register (SREG):
ITHSVNZC
-------0
C: Das C-Flag wird gelöscht.

Beispiel:
sec    ;Setzt das Carry-Flag
clc    ;Löscht das Carry-Flag

oben CLH - Clear Half-Carry-Flag

Syntax: CLH
Funktion: Dieser Befehl löscht das Half-Carry-Flag H im Status-Register SREG.
Operation: H ← 0
Operanden: keine
Programmzähler: PC ← PC + 1
Words: 1 (2 Byte)
Zyklen: 1
16 Bit Operations Code: 1001 0100 1001 1000

Flags im Status-Register (SREG):
ITHSVNZC
--0-----
H: Das H-Flag wird gelöscht.

Beispiel:
seh    ;Setzt das Half-Carry-Flag
clh    ;Löscht das Half-Carry-Flag

oben CLI - Clear Global Interrupt-Flag

Syntax: CLI
Funktion: Dieser Befehl löscht das Global Interrupt-Flag I im Status-Register SREG. Damit werden alle Interrupts sofort gesperrt, so dass keine weiteren Interrupts ausgeführt werden, selbst wenn der Interrupt zeitgleich mit dem CLI Befehl auftritt.
Operation: I ← 0
Operanden: keine
Programmzähler: PC ← PC + 1
Words: 1 (2 Byte)
Zyklen: 1
16 Bit Operations Code: 1001 0100 1111 1000

Flags im Status-Register (SREG):
ITHSVNZC
0-------
I: Das I-Flag wird gelöscht.

Beispiel:
in temp, SREG    ;SREG in Variable temp zwischenspeichern
cli        ;Alle Interrupts sperren
sbi EECR, EEMWE    ;Beginn Schreiben EEPROM


oben CLN - Clear Negativ-Flag

Syntax: CLN
Funktion: Dieser Befehl löscht das Negativ-Flag N im Status-Register SREG.
Operation: N ← 0
Operanden: keine
Programmzähler: PC ← PC + 1
Words: 1 (2 Byte)
Zyklen: 1
16 Bit Operations Code: 1001 0100 1010 1000

Flags im Status-Register (SREG):
ITHSVNZC
-----0--
N: Das N-Flag wird gelöscht.

Beispiel:
sen    ;Setzt das Negativ-Flag
cln    ;Löscht das Negativ-Flag

oben CLR - Clear Register

Syntax: CLR Rd
Funktion: Dieser Befehl löscht das Register Rd, indem eine Exclusiv-Oder - Operation zwischen dem Register und sich selbst durchgeführt wird. Dadurch werden alle Bits in dem Register gelöscht.
Operation: C ← 0 Rd ← Rd xor Rd
Operanden: 0 ≤ d ≤ 31
Programmzähler: PC ← PC + 1
Words: 1 (2 Byte)
Zyklen: 1
16 Bit Operations Code: 0010 01dd dddd dddd

Flags im Status-Register (SREG):
ITHSVNZC
---0001-
S: Das S-Flag wird gelöscht.
V: Das V-Flag wird gelöscht.
N: Das N-Flag wird gelöscht.
Z: Das Z-Flag wird gesetzt.

Beispiel:
clr r18    ;Alle Bits im Register R18 werden gelöscht.

oben CLS - Clear Signed-Flag

Syntax: CLS
Funktion: Dieser Befehl löscht das Signed-Flag S im Status-Register SREG.
Operation: S ← 0
Operanden: keine
Programmzähler: PC ← PC + 1
Words: 1 (2 Byte)
Zyklen: 1
16 Bit Operations Code: 1001 0100 1100 1000

Flags im Status-Register (SREG):
ITHSVNZC
---0----
S: Das S-Flag wird gelöscht.

Beispiel:
ses    ;Setzt das Signed-Flag
cls    ;Löscht das Signed-Flag

oben CLT - Clear T-Flag

Syntax: CLT
Funktion: Dieser Befehl löscht das T-Flag im Status-Register SREG.
Operation: T ← 0
Operanden: keine
Programmzähler: PC ← PC + 1
Words: 1 (2 Byte)
Zyklen: 1
16 Bit Operations Code: 1001 0100 1110 1000

Flags im Status-Register (SREG):
ITHSVNZC
-0------
T: Das T-Flag wird gelöscht.

Beispiel:
set    ;Setzt das T-Flag
clt    ;Löscht das T-Flag

oben CLV - Clear Overflow-Flag

Syntax: CLV
Funktion: Dieser Befehl löscht das Overflow-Flag V im Status Register SREG.
Operation: V ← 0
Operanden: keine
Programmzähler: PC ← PC + 1
Words: 1 (2 Byte)
Zyklen: 1
16 Bit Operations Code: 1001 0100 1011 1000

Flags im Status-Register (SREG):
ITHSVNZC
----0---
V: Das V-Flag wird gelöscht.

Beispiel:
sev    ;Setzt das Overflow-Flag
clv    ;Löscht das Overflow-Flag

oben CLZ - Clear Zero-Flag

Syntax: CLZ
Funktion: Dieser Befehl löscht das Zero-Flag Z im Status-Register SREG.
Operation: Z ← 0
Operanden: keine
Programmzähler: PC ← PC + 1
Words: 1 (2 Byte)
Zyklen: 1
16 Bit Operations Code: 1001 0100 1001 1000

Flags im Status-Register (SREG):
ITHSVNZC
------0-
Z: Das Z-Flag wird gelöscht.

Beispiel:
sez    ;Setzt das Zero-Flag
clz    ;Löscht das Zero-Flag

oben COM - One's Complement

Syntax: COM Rd
Funktion: Dieser Befehl bildet das Einerkomplement des Registers Rd (Zustand aller Bits wechselt). Das Ergebnis wird im Register Rd abgelegt.
Operation: Rd ← FFh - Rd
Operanden: 0 ≤ d ≤ 31
Programmzähler: PC ← PC + 1
Words: 1 (2 Byte)
Zyklen: 1
16 Bit Operations Code: 1001 010d dddd 0000

Flags im Status-Register (SREG):
ITHSVNZC
---01
S: Das S-Flag wird gesetzt, wenn das N-Flag gesetzt ist, andernfalls wird das S-Flag gelöscht.
V: Das V-Flag wird gelöscht.
N: Das N-Flag wird gesetzt, wenn das MSB des Ergebnisses gesetzt ist, andernfalls wird es gelöscht.
Z: Das Z-Flag wird gesetzt, wenn das Ergebnis 00h ist, andernfalls wird das Flag gelöscht.
C: Das C-Flag wird gesetzt.

Beispiel:
com r1    ;Bildet das Einerkomplement von R1

oben CP - Compare

Syntax: CP Rd,Rr
Funktion: Dieser Befehl vergleicht die beiden Register Rd und Rr miteinander, indem er die Inhalte beider Register subtrahiert. Die Inhalte beider Register bleiben dabei unverändert. Alle bedingten Verzweigungen können nach diesem Befehl ausgeführt werden.
Operation: Rd - Rr
Operanden: 0 ≤ d ≤ 31, 0 ≤ r ≤ 31
Programmzähler: PC ← PC + 1
Words: 1 (2 Byte)
Zyklen: 1
16 Bit Operations Code: 0001 01rd dddd rrrr

Flags im Status-Register (SREG):
ITHSVNZC
--
H: Das H-Flag wird gesetzt, wenn bei der Subtraktion ein Übertrag von Bit 3 erfolgt, andernfalls wird es gelöscht.
S: Das S-Flag wird gesetzt, wenn entweder das V-Flag oder das N-Flag gesetzt ist. Wenn beide Bits gleich sind, wird das S-Flag gelöscht.
V: Das V-Flag wird gesetzt, wenn aus der Operation ein Zweierkomplement- Überlauf erfolgt, andernfalls wird das Flag gelöscht.
N: Das N-Flag wird gesetzt, wenn das MSB des Ergebnisses gesetzt ist, andernfalls wird es gelöscht.
Z: Das Z-Flag wird gesetzt, wenn das Ergebnis 00h ist, andernfalls wird das Flag gelöscht.
C: Das C-Flag wird gesetzt, wenn der absolute Wert von Rr größer ist als der absolute Wert von Rd, andernfalls wird das C-Flag gelöscht.

Beispiel:
    cp r3,r20         ;Vergleicht die Register R3 und R20.
    brne ungleich     ;Verzweigung zum Label ungleich, 
                      ;wenn R3 ≠ R20 ist.
    ...

ungleich: nop         ;Ziel der Verzweigung, Leerbefehl 

oben CPC - Compare with Carry

Syntax: CPC Rd,Rr
Funktion: Dieser Befehl vergleicht die beiden Register Rd und Rr miteinander, indem er die Inhalte beider Register und das Carry subtrahiert. Die Inhalte beider Register bleiben dabei unverändert. Alle bedingten Verzweigungen können nach diesem Befehl ausgeführt werden.
Operation: Rd - Rr - C
Operanden: 0 ≤ d ≤ 31, 0 ≤ r ≤ 31
Programmzähler: PC ← PC + 1
Words: 1 (2 Byte)
Zyklen: 1
16 Bit Operations Code: 0000 01rd dddd rrrr

Flags im Status-Register (SREG):
ITHSVNZC
--
H: Das H-Flag wird gesetzt, wenn bei der Subtraktion ein Übertrag von Bit 3 erfolgt, andernfalls wird es gelöscht.
S: Das S-Flag wird gesetzt, wenn entweder das V-Flag oder das N-Flag gesetzt ist. Wenn beide Bits gleich sind, wird das S-Flag gelöscht.
V: Das V-Flag wird gesetzt, wenn aus der Operation ein Zweierkomplement- Überlauf erfolgt, andernfalls wird das Flag gelöscht.
N: Das N-Flag wird gesetzt, wenn das MSB des Ergebnisses gesetzt ist, andernfalls wird es gelöscht.
Z: Das Z-Flag wird gesetzt, wenn das Ergebnis 00h ist, andernfalls wird das Flag gelöscht.
C: Das C-Flag wird gesetzt, wenn der absolute Wert von Rr plus dem Carry größer ist als der absolute Wert von Rd, andernfalls wird das C-Flag gelöscht.

Beispiel:
Vergleich zweier 16-Bit Register (R3:R2) und (R1:R0)

    cp r2,r0         ;Vergleicht die Low-Bytes der Register
    cpc r3,r1        ;Vergleicht die High-Bytes der Register
    brne ungleich    ;Verzweigung zum Label ungleich, 
                     ;wenn R3:R2 ≠ R1:R0 ist.

ungleich: nop        ;Ziel der Verzweigung, Leerbefehl


oben CPI - Compare with Immediate

Syntax: CPI Rd,K
Funktion: Dieser Befehl vergleicht das Register Rd mit einer Konstanten, indem er die Konstante vom Register subtrahiert. Der Inhalt des Registers bleibt dabei unverändert. Der Befehl kann nur mit den oberen 32 Register R16 bis R31 durchgeführt werden. Alle bedingten Verzweigungen können nach diesem Befehl ausgeführt werden.
Operation: Rd - K
Operanden: 16 ≤ d ≤ 31, 0 ≤ K ≤ 255
Programmzähler: PC ← PC + 1
Words: 1 (2 Byte)
Zyklen: 1
16 Bit Operations Code: 0011 KKKK dddd KKKK

Flags im Status-Register (SREG):
ITHSVNZC
--
H: Das H-Flag wird gesetzt, wenn bei der Subtraktion ein Übertrag von Bit 3 erfolgt, andernfalls wird es gelöscht.
S: Das S-Flag wird gesetzt, wenn entweder das V-Flag oder das N-Flag gesetzt ist. Wenn beide Bits gleich sind, wird das S-Flag gelöscht.
V: Das V-Flag wird gesetzt, wenn aus der Operation ein Zweierkomplement- Überlauf erfolgt, andernfalls wird das Flag gelöscht.
N: Das N-Flag wird gesetzt, wenn das MSB des Ergebnisses gesetzt ist, andernfalls wird es gelöscht.
Z: Das Z-Flag wird gesetzt, wenn das Ergebnis 00h ist, andernfalls wird das Flag gelöscht.
C: Das C-Flag wird gesetzt, wenn der absolute Wert von K größer ist als der absolute Wert von Rd, andernfalls wird das C-Flag gelöscht.

Beispiel:
    cpi r3,$03       ;Vergleicht das Register R3 mit 3
    brne ungleich    ;Verzweigung zum Label ungleich, 
                     ;wenn R3 ≠ 3 ist.
    ...

ungleich: nop        ;Ziel der Verzweigung, Leerbefehl 




oben CPSE - Compare Skip if Equal

Syntax: CPSE Rd,Rr
Funktion: Dieser Befehl vergleicht die beiden Register Rd und Rr miteinander und überspringt den nächsten Befehl, wenn beide Register gleich sind.
Operation: (a) PC ← PC + 1, wenn Rd ≠ Rr
(b, c) PC ← PC + 2 (oder 3), wenn Rd = Rr
Operanden: 0 ≤ d ≤ 31, 0 ≤ r ≤ 31
Programmzähler: (a) PC ← PC + 1, wenn Rd ≠ Rr
(b) PC ← PC + 2, wenn Rd = Rr und der nächste Befehl 1 Word lang ist
(c) PC ← PC + 3, wenn Rd = Rr, und der nächste Befehl 2 Word lang ist
Words: 1 (2 Byte)
Zyklen: (a) 1
(b) 2
(c) 3
16 Bit Operations Code: 0001 00rd dddd rrrr

Flags im Status-Register (SREG):
ITHSVNZC
--------

Beispiel:
oben:    inc r4        ;Register R4 um eins erhöhen
         cpse r4,r0    ;Nächsten Befehl überspringen, 
                       ;wenn R4 = R0 ist.
         jmp oben      ;Sprung zum Label oben, da R4 ≠ R0
         nop           ;Weitermachen, wenn R4 = R0

Impressum