1.0 Einführung
Damit die Adressierungsarten noch verständlicher werden, ist eine Übersicht über die Speicherorganisation und Adressierbereiche von großer Bedeutung. In diesem Referat wurden die 80C51-Based Microcontrollers behandelt.
1.1 Programmspeicher- & Datenspeicheradressierbereiche
Der µP-80C51 hat im Prinzip folgende Speicher-Adressierbereiche, wobei 80C51 und 80C552 einige Unterschiede aufweisen.
Programmspeicher besteht so wie der Datenspeicher aus einem internen und externen Teil. Wird der Anschluß EA auf High-Pegel gehalten, so greift die CPU auf den internen Programmspeicher zu. Wenn aber die Adresse höher als die des Datenspeichers des unteren Bereiches [siehe Fig.a) bzw. b)] ist, dann wird der externe Programmspeicher angesprochen. (Bei Programmspeicher besteht der externe Programmspeicher aus 2 Teilen; aus dem oberen und dem unteren. EA Anschluß hat nur dann eine Bedeutung, wenn der untere externe Programmspeicher angesprochen werden soll.) Programmspeicher wird mit MOVC-Befehl zugegriffen.
Der externe Datenspeicher wird mit MOVX-Befehl angesprochen. Siehe Unterschiede zwischen internen Datenspeicher von 80C51 & 80C552. Der obere Bereich des internen Datenspeichers zwischen den Adressen 80h - FFh ist bei 80C51 nicht vorhanden.
Für ausführlichere Infomation in diesem Gebiet siehe das Referat "Speicher-organisation ".
2.Adressierungsarten
2.0 Bit oder Byte?
Bitadressierbar ist eine Adresse dann, wenn jedes Bit einzeln gesetzt (SetB) bzw. gelöscht (CLR) werden kann. Die bitadressierbaren Bereiche im internen Datenspeicher befinden sich 20h - 2Fh. Auch SFR sind bitadressierbar, außer einigen speziellen Register so wie TMOD, SP, DPTR, T1, T2.....
2.1 Direkte Adressierung & Registeradressierung
Der untere Bereich des internen Datenspeichers kann direkt adressiert werden (Adressen zw. 0-7Fh), so wie die SFR (80h-FFh). Direktes Adressieren heißt, die Adresse, deren Inhalt bearbeitet werden soll, wir im Befehl angegeben.
MOV dadr1,dadr2 Der Inhalt der dadr2 wird in die Adresse dadr1 gemove d.
MOV A,40h Der Inhalt der Adresse 40h wird in das Akku gemoved.
MOV 42h,A Der Inhalt des Akku wird in die Adresse 40h gemoved.
ADD A,33h Der Inhalt der Adresse 33h wird zum Akku addiert.
MOV R1,A Der Inhalt des Akku wird in das Register R1 gemoved.
MOV A,R2 Der Inhalt des R2 wird in das Akku gemoved.
MOV A,P0 Der Inhalt des P0 wird in das Akku gemoved.
MOV P1,R2 Der Inhalt des R2 wird in das P1 gemoved.
2.2 Unmittelbare Wertzuweisung
Die unmittelbare Wertzuweisung -Ladung einer Konstanten- wird häufig auch zu den Adressierungsarten gerechnet.
MOV A,#007 Die Zahl "007" (Dezimal) wird in das Akku gemoved.
MOV R5,#007h Die Zahl "007" (Hex) wird in das Register R5 gemoved.
Das vorangestellte Gatterzeichen "#" dient der Unterscheidung zwischen unmittelbarer Wertzuweisung und der direkten Adressierung.
2.3 Indirekte, indizierte Adressierung
MOV A,@R1
Der Inhalt der Adresse, die im Register R1 steht, wird in das Akku gemoved.
Eine indirekte indizierte Adresse ergibt sich aus der Inhalte eines Basis- und eines Indexregister
MOV A,@A+DPTR
holt aus dem Programmspeicher den Inhalt der Adresse, die sich aus der Summe der Inhalte des Akku & DPTR ergibt.
|