Titelbild Mikrocontroller

Adressierungsarten AVR

Die AVR Mikrocontroller unterstützen mächtige und effiziente Adressierungsarten, um auf den Programmspeicher (Flash) und den Datenspeicher (SRAM, Register, I/O-Speicher und erweiterten I/O-Speicher) zuzugreifen. Nachfolgend werden die verschiedenen Arten der Adressierung beschrieben.
In den Abbildungen bedeutet OP das Stück des Operationscodes innerhalb des Befehlswortes. Aus Gründen der Vereinfachung zeigen nicht alle Bilder den exakten Ort der adressierenden Bits. Die Variablen RAMEND und FLASHEND stehen für die höchste Speicherzelle im Daten- und Programmspeicher. Nicht alle Adressierungsarten sind in allen Bausteinen verfügbar.

oben Direkte Adressierung eines Registers

Der Operand für den Befehl ist im Register d (Rd).
Direkte Adressierung eines Registers


oben Direkte Adressierung von zwei Registern (Rd und Rr)

Die Operanden für den Befehl sind in den Registern d (Rd) und r (Rr) enthalten. Das Ergebnis der Operation wird im Register d (Rd) abgelegt.
Direkte Adressierung von zwei Registern


oben Direkte I/O-Adressierung

Die Adresse des I/O-Operanden ist in den 6 Bits des Befehlswortes enthalten. Rr/Rd ist die Adresse des Ziel- oder Quellregisters. In manchen Bausteinen sind mehr als 64 Speicherzellen im I/O-Bereich vorhanden. Dieser erweiterte Speicherbereich von 64 bis 255 kann nur über die Datenadressierung und nicht über die I/O-Adressierung erreicht werden.
Direkte I/O-Adressierung


oben Direkte Datenadressierung

Die 16 Bit - Adresse in den unteren 16 Bit des zwei Worte langen Befehls gibt die Speicherzelle im Datenspeicher an. Rr/Rd ist die Adresse des Ziel- oder Quellregisters.
Direkte Datenadressierung


oben Indirekte Datenadressierung mit Versatz

Die Adresse des Operanden ergibt sich aus der Addition des Y- oder Z-Registers mit den 6 Bits (Versatz) in dem Befehlswort. Rr/Rd ist die Adresse des Ziel- oder Quellregisters.
Indirekte Datenadressierung mit Versatz


oben Indirekte Datenadressierung

Die Adresse des Operanden wird über den Inhalt des X-, Y- oder Z-Registers bestimmt. In Bausteinen ohne SRAM entspricht die indirekte Datenadressierung der indirekten Registeradressierung. Die indirekte Registeradressierung ist eine Teilmenge der indirekten Datenadressierung, da der Datenspeicher von 0 bis 31 im Registerbereich liegt.
Indirekte Datenadressierung


oben Indirekte Datenadressierung mit vorherigem Dekrement

Indirekte Datenadressierung mit vorherigem Dekrement: Bei dieser Art der Adressierung wird das X-, Y- oder Z-Register vor der Ausführung des Befehls dekrementiert. Die Adresse des Operanden ist also der um eins verminderte Inhalt des entsprechenden Registers.
Indirekte Datenadressierung mit vorherigem Dekrement


oben Indirekte Datenadressierung mit anschließendem Inkrement

Bei dieser Art der Adressierung wird das X-, Y- oder Z-Register nach der Ausführung des Befehls inkrementiert. Die Adresse des Operanden ist also der Inhalt des entsprechenden Registers, bevor dieses um eins erhöht wird.
Indirekte Datenadressierung mit anschließendem Inkrement


oben Adressierung von Konstanten im Programmspeicher mit den LPM-, ELPM- und SPM-Befehlen

Die Adresse der Daten wird im Z-Register angegeben. Die oberen 15 Bit geben die Wortadresse an. Beim LPM-Befehl selektiert das LSB das Low-Byte (LSB=0) oder High-Byte (LSB=1). Beim SPM-Befehl muss das LSB=0 sein, da er sich auf ganze Worte (zwei Bytes) bezieht. Wenn der ELPM-Befehl genutzt wird, adressiert das RAMPZ-Register den erweiterten Speicherbereich, das Z-Register die Seite.
Adressierung von Konstanten


oben Adressierung von Konstanten im Programmspeicher mit den LPM Z+ und ELPM Z+ Befehlen

Die Adresse der Daten wird im Z-Register angegeben. Nach dem Zugriff auf die angegebene Speicherzelle wird der Z-Pointer inkrementiert. Die oberen 15 Bit geben die Wortadresse an. Das LSB adressiert das Low-Byte (LSB=0) oder das High-Byte (LSB=1). Wenn der ELPM Z+ Befehl genutzt wird, adressiert das RAMPZ-Register den erweiterten Speicherbereich, das Z-Register die Seite.
Adressierung von Konstanten mit den LPM Z+ und ELPM Z+


oben Direkte Programmadressierung, JMP und CALL

Die Ausführung des Programms wird an der Adresse fortgesetzt, die in den 16 Bit des zweiten Befehlswortes angegeben ist.
Direkte Programmadressierung, JMP und CALL


oben Indirekte Programmadressierung, IJMP und ICALL

Die Ausführung des Programms wird an der Adresse fortgesetzt, die in den 16 Bit des Z- Registers angegeben ist.
Indirekte Programmadressierung, IJMP und ICALL


oben Relative Programmadressierung, RJMP und RCALL

Die Ausführung des Programms wird an der Adresse fortgesetzt, die sich aus der Addition des aktuellen PC mit der relativen Adresse k und 1 ergibt. Die relative Adresse k kann Werte zwischen -2048 und +2047 annehmen.
Relative Programmadressierung, RJMP und RCALL


Impressum