Speicheraufbau

 

Des internen und externen Speichers beim 80515 / 80535

 

 

 

 

 

Speicher-Übersicht

->

Gesamtspeicher

 

 

Der Programmspeicher, ROM

->

CODE

 

 

Der Datenspeicher, externer RAM

->

XDATA

 

 

Interner unterer RAM

->

DATA / IDATA

 

 

Spezial Funktions Register

->

DATA

 

 

Interner oberer RAM

 

 

IDATA

 

 

Bitadressierbarar Speicher

 

 

BIT

 

 


  Speicher Übersicht


Der Gesamtspeicher von Mikrocontrollern der 8051 Familie besteht aus zwei grundsätzlichen Speicherblöcken, dem Daten- und dem Programmspeicher. Beide liegen mit ihren Adressen parallel zueinander, besitzen also gleiche Adreßbereiche. Durch zwei Sätze von Lese- Schreibsignalen können die Bereiche trotz gleichlautender Adressen voneinader getrennt werden. Der Datenspeicher selber besitzt ebenfalls adreßparallele Speicherbereiche, die jedoch durch die Art der Adressierungsmethode voneinander unterschieden werden. Die verschiedenen Speicherarten werden in der Assemblerprogrammierung durch festgelegte Kennworte, die Typenbezeichnungen voneinander unterschieden. Es gibt die, in der Folge beschriebenen Typen...

 

CODE

(Externer) 8kByte großer Programmspeicher, auf dem Chip, abschaltbar

(normalerweise im externen ROM, max. 64kByte)

XDATA

Externer Datenspeicher

(normalerweise im externen RAM, max 64kByte)

DATA

Interner, direkt adressierbarer Datenspeicher

(unterer RAM und SFR-Speicher auf den Chip, 128 Bytes + max.128Bytes)

IDATA

Interner, indirekt adressierbarer Datenspeicher

(unterer und oberer interner RAM auf dem Chip, 128 Bytes + 128Bytes)

BIT

Bits der bitadressierbaren Speicherbytes

(unterer interner RAM und SFR-Speicher, auf dem Chip, 32 Bytes, 265 Bits)

 


  Der Programmspeicher, Typ: CODE

Dieser befindet sich in einem ROM der beim MC80515 auf dem Chip untergebracht ist. Der MC80535 besitzt ihn nicht. In der Anahme, daß ein Mikrocontroller als Steuerbaustein nur eine Aufgabe zu erledigen hat, besteht nicht die Notwendigkeit das Programm wie bei Personal-Computern zu wechseln. Obwohl dieser ROM bereits 8 kByte Speicher umfasst, kann er extern bis auf 64kByte erweitert werden. In ihm können auch feste Daten enthalten sein, die das Steuerprogramm für seinen Betrieb benötigt. Jedoch ist der Zugriff auf diese Daten im Gegensatz zu den Möglichkeiten eines Mikroprozessors sehr eingeschränkt. Der 'on Chip' ProgrammRom ist bei den einzelnen Mitgliedern der Familie unterschiedlich groß. Er kann in der Regel nur bei der Herstellung des Controllers maskenprogrammiert werden und eignet sich somit nicht für die Programmentwicklung. Deswegen gibt es Möglichkeiten ihn abzuschalten und extern zu ersetzen.

Typengleiche Mikrocontroller sind aus diesem Grund häufig in zwei Varianten erhältlich. Die eine Variante besitzt einen internen ROM und kann extern erweitert werden. Die andere Variante besitzt keinen ROM und muß extern erweitert werden. Da sich die Maskenprogrammierung erst bei großen Stückzahlen lohnt und um beide Typen funktionsgleich zu erhalten, besitzen beide Varianten den Hardware_Anschluß (Pin 51 EA). Er wird an Bezugspotential (GND) gelegt, wenn ausschließlich externer Speicher benutzt werden soll. Dieser beginnt dann bei Adresse 0000h. Bei der ROM_losen Variante muß dieser Pin an Bezugspotential gelegt werden. Bei den Controllern, die einen ROM auf den Chip besitzen, kann dieser Pin dazu benutzt werden den internen ROM abzuschalten. Ist der interne ROM aktiv, werden alle Adressen des unteren Adreßbereichs auf den internen ROM gelenkt. Alle Adressen die oberhalb der Speicherkapazität des internen ROMs liegen, erscheinen an den Adreßtoren des Mikrocontrollers. (Als Nachteil verliert dieser dadurch die zwei digitale Tore P0 und P2)

Dieser Logik folgend müssen die Einsprungadressen für den RESET und die Interrupts im unteren ROM_Bereich untergebracht sein. Die RESET Einsprungadresse 0000h ist bei allen Familienmitgliedern der 8051-Familie gleich. Es folgen die Einsprungadressen für die Interrupts. Die im Bild angegebenen Adressen sind die Stellen, an denen ein Programm beginnt. Es handelt sich nicht um Zeiger (Vektoren) auf ein Programm. Diese Programme können aus einem einfachen Sprungbefehl zum eigendlichen IRQ-Treiberprogramm bestehen oder sich über nicht benutzte Interrupt_Einsprungadressen hinwegerstrecken.


Aus dem Programmspeicher kann der Benutzer nur lesen. Der Befehl lautet MOVC (Move_Code). Als Ziel dieser Leseoperation kann nur der Akkumulator (A) angegeben werden. Dabei steht die Basisadresse der zu lesenden Speicherzelle im Programmzähler (PC) oder im Datenzeiger (DPTR). Zu dieser Adresse wird vor dem Zugriff auf den Speicher noch ein Offset hinzuaddiert. Der Offset muß im Akkumulator (A) enthalten sein. Diese Adressierungsart nennt man 'indirekt, indiziert'. Die beiden möglichen Assemblerbefehle lauten ...

 

 

Lesen:

MOVC A, @A+PC

MOVC A, @A+DPTR

 

Damit der Programmspeicher vom Datenspeicher unterschieden werden kann, beide liegen ja wie gesagt adreßparallel, wird bei den obigen Befehlen das Lesesignal PSEN aktiviert. Ein Schreibsignal für den Programmspeicher gibt es nicht.

 

 


  Der Datenspeicher, Typ: XDATA

In ihm können Daten, die der Mikrocontroller während seines Betriebs erzeugt und verarbeitet, gespeichert werden. Dieser Speicherblock besteht aus RAM-Speicher.

Der Datenspeicher ist wiederum in zwei parallele Adreßbereiche unterteilt.


Den internen Speicher auf dem Chip, der nur eine Größe bis 256 Bytes besitzt und den externen Speicher in zusätzlichen Bauelementen. Letzer kann eine maximale Größe von 64kByte besitzen.

Da beide Speicher parallel liegen, also gleiche Adressen besitzen, können sie nur durch unterschiedliche Lese-Schreibsignale voneinander getrennt werden. Diese Signale werden durch entsprechende Maschinenbefehle ausgelöst. Für den externen RAM-Speicher gibt es als einzigen Befehl den Tranferbefehl MOVX. Er kann nur indirekt über die 8-Bit Register R0, R1 oder den 16-Bit Datenzeiger DPTR adressiert werden. Durch die Umkehrung von Ziel- und Quelloperand ist es möglich ihn zu lesen oder zu beschreiben. Bei neuen Mikrocontrollern sind wegen der zunehmenden Integrationsdichte einige KByte des externen RAMs bereits auf dem ControllerChip integriert.

 

 

Lesen:

MOVX A, @R0

MOVX A, @DPTR

 

 

MOVX A, @R1

 

 

Schreiben:

MOVX @R0, A

MOVX @DPTR, A

 

 

MOVX @R1, A

 

 

Damit der externe Datenspeicher vom internen Datenspeicher und vom externen Programmspeicher unterschieden werden kann, alle drei liegen ja adreßparallel, werden bei den obigen Befehlen das Signal RD als Lesesignal und das Signal WR als Schreibsignal benutzt. Beide Signale sind Bits des Tores P3.
Auf den internen RAM beziehen sich mit Ausnahme von MOVC und MOVX alle restlichen Maschinenbefehle der 8051 Maschinensprache. Sein Transferbefehl lautet MOV und dieser besitzt viele Adressierungsarten.


Der interne Speicher besitzt ebenfalls zwei parallele Adreßbereiche.
Es handelt sich hierbei um die 128 Bytes oberes internes RAM, die nicht bei allen Controllern der Familie vorhanden sind und die Spezial-Funktions-Register (SFR). Beide Speichergruppen liegen im Adreßbereich 80h bis FFh. Ihre Unterscheidung wird nicht durch unterschiedliche Maschinenbefehle vorgenommen, sondern durch verschiedene Adressierungsmethoden. Der obere interne RAM ist nur indirekt über R0 und R1 adressierbar, der SFR-Speicher nur direkt. Auf beiden Wegen kann der untere interne RAM adressiert werden. Er besitzt ebenfalls 128 Bytes und ist wie der SFR-Speicher in allen Controllern vorhanden.
  • Bei der direkten Adressierung wird die Adresse der gewünschten Speicherzelle in den Maschinenbefehlen angegeben.

 

 

mov

A,

12h

; Inhalt des Speichers 12 zum Akkumulator

 

  • Bei der indirekten Adressierung wird die Adresse der gewünschten Speicherzelle zunächst in eines der Register R0 oder R1 geladen. In einem weiteren Maschinenbefehl wird nun nicht die Speicherzelle angegeben, sondern das Register in der ihre Adresse steht.

 

 

mov

R1,

#12h

; Adresse des Speichers 12 zum Register R0

 

mov

A,

@R1

; A mit dem Inhalt der Speicherzelle laden,

 

 

 

 

; deren Adresse in R1 steht.

 

 

 

 

Sowohl der untere RAM wie der SFR-Speicher besitzen bitadressierbare Speicher.

Dazu sind die Bits einzelner Speicherzellen durchnummeriert. In der Maschinensprache wurden spezielle Befehle eingeführt, die nur mit Bits arbeiten (Boolescher Prozessor, mit C dem CarryFlag als BitAkkumulator). Es ist also möglich, von bestimmten Speicherzellen jedes Bit einzeln zu verändern, oder alle 8 Bits gemeinsam durch Lesen oder Schreiben der entsprechenden Speicherzelle. Bits lassen sich durch die Transferbefehle MOV bit, C oder MOV C, bit lesen und schreiben. Dabei erkennt die CPU des Controllers an der Verwendung des CarryFlags C, daß es sich bei der angegebenen Adresse um eine Bitnummer handeln muß.

 

 

Lesen:

MOV C, BitNummer

 

 

Schreiben:

MOV BitNummer, C

 

 

 

 

 

  DatenSpeicher: interner unterer RAM Typ: DATA, IDATA


Der untere interne RAM besteht aus 128, 8-Bit Speichern. Er kann direkt und indirekt adressiert werden. In seinem Adreßbereich von 00-7Fh befinden sich 4 Registerbänke, die von der CPU des Controllers als Arbeits- und Adreßregister verwendet werden können.


Der Controller benutzt zu einer Zeit nur eine Registerbank für Aufgaben seiner CPU.
Die Speicher der Registerbänke sind normale 8-Bit Allzweckspeicher. Es kann zu jedem Zeitpunkt über ihre Adresse auf sie zugegriffen werden. Andererseits kann je eine Registerbank der CPU als Arbeitsbereich zur Verfügung gestellt werden. Nach dem RESET sind das die 8 Register der Registerbank 0. Durch Angabe der Speichernamen R0-R7 in Maschinenbefehlen, erledigen diese Register besondere Aufgaben. Soll die CPU eine andere Registerbank benutzen, so kann diese im Flaggenregister (PSW) gewählt werden. Die Namen R0-R7 beziehen sich jetzt auf die neuen Registerbank und damit andere absolute Adressen.

Die Register R0, R1, R2, R3, R4, R5, R6 oder R7 kurz Rr
Sie enthalten bei vielen Maschinenbefehlen den Quell- bei einigen den ZielOperanden. Man spricht dann von Register-Adressierung. Die Register entlasten so häufig den Akkumulator der CPU.

Die Register R0 oder R1 kurz Ri
Sie enthalten bei vielen Maschinenbefehlen die Adresse einer Speicherzelle, auf deren Inhalt sich der Befehl bezieht. Man spricht hier von 'Register'- indirekter Adressierung. Diese bezieht sich fast ausschließlich auf die 128 Bytes des unteren und oberen internen RAM. Nur bei dem Befehl MOVX kann sie auch auf den externen Datenspeicher angewendet werden.

(Das Flaggenregister der CPU wird auch Program-Status-Word (PSW) genannt. In ihm kann die Registerbank gewählt werden, die der CPU zu einer Zeit zugeordnet werden soll. Es befindet sich in dem Spezial-Funktions-Register Bereich (SFR) und besitzt hier die Adresse D0h.)

Der Stack beginnt nach einem RESET in Registerbank 1.
Das würde die Zuweisung der Registerbänke behindern. Jedoch kann der Stapelbeginn verlegt werden. Hierzu muß vor seiner ersten Benutzung im Programm der Stapelzeiger (SP) entsprechend gesetzt werden. Der Stapel kann sich über den unteren internen RAM hinweg bis in den oberen internen RAM erstrecken. Da der obere RAM (Adressen 80h bis FFh) für den Benutzer nur indirekt adressierbar ist, wäre dieser Speicher ein guter Platz für den Stack. (SP Anfangswert = 7Fh) Jedoch besitzt nicht jeder Controller der Familie diesen Speicher.

(Der Stapelzeiger der CPU wird auch Stack-Pointer (SP) genannt. Er zeigt immer auf die zuletzt belegte Speicherzelle im Stapel (Stack). Bevor ein weiterer Wert auf den Stapel gebracht werden kann, muß der Stapelzeiger um eins erhöht (inkrementiert) werden. Er befindet sich in dem Spezial-Funktions-Register Bereich (SFR) und besitzt hier die Adresse 81h. Sein Inhalt nach einem Reset ist 07h, so daß der Stack bei 08h beginnt.)

Den Speichern der Registerbänke folgen bitadressierbare Speicher.
Bei den 16 Speichern 20h-2Fh im unteren internen RAM ist jedes Bit mit einer Kennzahl belegt. Diese Zahl wird Bitadresse genannt. Ein ganzer Satz von Maschinenbefehlen kann über die Bitadresse auf diese Einzelbits zugreifen, sie kopieren und verändern. Dies geschieht über einen 'Booleschen Prozessor' innerhalb der ALU. Dessen 'Arbeitsregister' ist das CarryFlag C. Durch die Bitverarbeitung können z.B. schnell und einfach Veränderungen an den Ein/Ausgabetoren vorgenommen werden. Es entfällt also die Maskenbildung, die bei der Adressierung der Gesamtspeicherzelle nötig wäre, um nur eines ihrer Bits zu verändern. Ebenso entfällt im Flaggenregister die von anderen Prozessoren gewohnte Flagge für das Vorzeichen (Negativ-Flag).

Ruhestromversorgung
Die 40 Bytes 58h-7Fh können bei der NMOS-Variante des Controllers mit einem Ruhestrom versorgt werden. Sie verlieren ihre Inhalte dann nicht, wenn der Controller aufgrund einer zusammenbrechenden Betriebsspannung aufhört zu arbeiten.

Bei der CMOS-Variante ist dies nicht notwendig, da der gesamte Controller aufgrund seiner geringen Leistungsaufnahme ruhestromversorgt werden kann. So entfällt die Ruhestromversorgung dieser Speicher. Dennoch sind dem Controller zwei stromsparende Zustände (Modi) hinzugefügt worden. Diese beziehen sich jedoch auf den gesamten Baustein.
  • Modus 1: Im Idle-Modus führt der Controller zwar keine Befehle mehr aus, aber der Taktoszillator arbeitet und versorgt alle von ihm abhängigen Komponenten. Im Besonderen sind das die Timer und die serielle Schnittstelle. Alle Inhalte der internen Speicherzellen bleiben erhalten. Auch an den Toren bleiben die letzten Signale bestehen. Ein beliebiger Interrupt (oder ein RESET) beenden diesen Zustand. Nach dem Interrupt kann der Controller seine Arbeit fortsetzen, als sei nichts gewesen.

  • Modus 2: Im Power-Down Modus behalten alle internen Speicher sowie die Torausgänge zunächst ihre Informationen bis ein RESET diesen Zustand aufhebt. Nach dem RESET werden die Register des SFR-Bereichs in ihren Resetzustand gebracht und der Oszillator beginnt wieder zu arbeiten.

 

 

 

 

 

  DatenSpeicher: Spezial-Funktions-Register (SFR), Typ: DATA


Im Bereich der SFR-Register müssen nicht alle Adressen mit Speichern besetzt sein. Die Menge der SFR-Register ist abhängig von der leistungsfähigkeit des Contollerbausteins. Jeder Controller der Familie besitzt je nach Ausstattung unterschiedliche Mengen von SFR-Registern.


Die SFR -Speicher steuern die Alternativfunktionen der Tore.
Die Spezial-Funktions-Register (kurz SFR) bestehen aus 8 Bit Speichern. Zwei dieser Speicher (DPH und DPL) können zu einem 16 Bit Speicher (DPTR) zusammengefaßt werden. Die SFR-Speicher umfassen die Ein-und Ausgabespeicher der parallelen Tore, der seriellen Schnittstelle und des A/D Wandlers. Diese können durch Alternativfunktionen zu weiteren Zwecken als der einfachen Daten Ein- bzw Ausgabe verwendet werden. Die Aufgaben sind dabei so umfangreich, daß sie in einem gesonderten Kapitel besprochen werden müssen.

Die SFR enthalten die CPU -Register des Controllers.

Neben den Registern die die Schnittstelleneigenschaften des Controllers bestimmen, sind im SFR-Speicher die Register der CPU des Mikrocontrollers enthalten. Dazu gehören ..

 

 

 

 

 

der Akkumulator

(A)

[E0h]

Prozessorhauptregister

 

 

das Hilfsregister

(B)

[F0h]

Benutzt bei Multiplikation und Division

 

 

das Flaggenregister

(PSW)

[D0h]

(Program_Status_Word)

 

 

der Stapelzeiger

(SP)

[81h]

(Stack_Pointer)

 

 

der 16 Bit Datenzeiger

(DPTR)

 

(Data_Pointer) Er kann in den externen RAM zeigen und ist das einzige 16-Bit Register

 

 

der sich aus den Registern..

(DPL)

[82h]

 

 

 

zusammensetzt.

(DPH)

[83h]

 

 

 

 

 

 

Diese Register können wie normale Speicherzellen benutzt werden und besitzen dann die angegebenen Adressen. Bis auf den Datenzeiger sind alle CPU-Register bitadressierbar. Dabei ist die Bitnummer des 0. Bit einfach zu merken, denn sie entspricht immer der Adresse des 8-Bit Registers. Für die höheren Bits muß diese Adresse entsprechend weitergezählt werden. So lautet die Bitadresse für das 0.Bit im Akkumulator E0h, die Bitadresse für das 1.Bit im Akkumulator E1h usw.

In der Assemblermnemonik werden die CPU- Register mit der oben angegebenen Kurzbezeichnung verwendet. Diese stimmt in der Regel mit dem LabelNamen überein, den ihre Adressen erhalten haben. Nur die Akkumulatorbezeichnung und die des CarryFlags machen hier eine Ausnahme. In Assembler-Befehlen wird der Akkumulator mit (A) und das CarryFlag mit (C) angegeben. Als Labelname für die Speicherzelle [E0h] (das ist der Akkumulator) findet man häufig ACC als Abkürzung und als Labelname für die Bitadresse [D7h] (das ist das CarryFlag) findet man den LabelNamen CY.


Das einzige Register der CPU auf das der Benutzer nicht zugreifen kann ist ..

 

 

der Programmzähler
(PC)
 
(Programm_Zeiger, Program_Counter)
 

 

Dieses Register, das auf den jeweils nächsten abzuarbeitenden Befehl zeigt, verwaltet die CPU von sich aus. Es besitzt keine Adresse im SFR-Speicher.

 

 

 

 

 

 

Nach dem RESET sind alle alternativen Funktionen abgeschaltet.
Alle Pins der parallelen Tore liegen hochohmig an der positiven Betriebsspannung und eignen sich als Eingänge. Werden den Pins in diesem Zustand externe TTL-Signale zugeführt kann die Setzung an den Eingängen durch Lesen des entsprechenden Torregisters von der CPU erkannt werden. Dabei werden eigentlich nur die externen Signale erkannt, die den Ruhezustand des Toreinganges von 1 auf 0 gezogen haben.
Bei der Ausgabe wird dieses Prinzip in den Controller verlegt. Durch das Schreiben in eines der Torregister werden die Signale aus dem Ruhezustand 1 auf 0 heruntergezogen, in deren Bits eine 0 im Register steht.

Daraus ergibt sich, eine sehr einfache Handhabung der Paralleltore. So werden keine Richtungsregister benötigt, die angeben ob ein Torausgang der Ein- oder Ausgabe von Signalen dienen soll. Andererseits kann ein Tor keine Eingabesignale erkennen, wenn in seinem Ausgaberegister an der entsprechenden Bitstelle eine 0 steht. Sollen Bits eines Tores der Eingabe dienen. dann müssen die entsprechenden Ausgabebits der Pins auf 1 gesetzt sein.

Die Eingangswiderstände, die die Torsignale im Ruhezustand auf 1 halten sind sehr groß. Sie können nicht den für externe NMOS-Eingänge benötigten Strom liefern. Dementsprechend benötigen Bausteine mit NMOS-Eingängen externe Pull_up Widerstände, die den internen Pull_ups parallel liegen. TTL-Bausteine der HCT-Serie sind CMOS-Bausteine mit TTL-Signaldefinitionen und eignen sich daher in besonderer Weise für den Einsatz mit Mikrocontrollern. Sie können ohne externe Pull_up Widerstand angesteuert werden.

Jede Speicherzelle des SFR-Bereichs besitzt einen Labelnamen.

Damit sich die Programmierung eines Controllers vereinfacht sind den Adressen des SFR-Speichers sowie den Bitadressen Namen zugeordnet. Diese Namen werden normalerweise in Assemblerprogrammen zur Kennzeichnung der Adressen verwendet. Hier gibt es von Assembler zu Assembler geringe Abweichungen. Namen und Adressen werden in Definitionsdateien miteinander in Bezug gebracht, so daß eine Änderung jederzeit möglich ist. Da nicht jeder Controller den gleichen SFR-Speicherumfang besitzt, werden solche Definitionsdateien zu jedem Mitglied der Familie vorgehalten oder können vom Programmierer erstellt werden.

 

 

 

 

 

  DatenSpeicher: interner oberer RAM, Typ: IDATA



Der interne obere RAM besteht aus 128 Speicherzellen die nur indirekt adressiert werden können. Sie besitzen ansonsten keine Besonderheiten. Die indirekte Adressierung unterscheidet sie von den SFR-Registern, die adreßparallel liegen und nur durch direkte Adressierung angesprochen werden können. Die indirekte Adressierung geschieht durch die Benutzung der Register R0 oder R1 der aktiven Registerbank.


Ein Beispiel für einen indirekten Lesevorgang der internen oberen Speicherzelle 84h wäre:

 

 

mov

R0

#84h

; Register R0 mit 84h direkt laden

 

 

mov

A

@R0

; den Inhalt der Speicherzelle, auf die R0

 

 

 

 

 

; zeigt, das ist die Speicherzelle 84h,

 

 

 

 

 

; in den Akkumulator übertragen.

 

 

 

 

 

Schreiben nach 84h würde so aussehen:

 

 

mov

R0

#84h

; Register R0 mit 84h direkt laden

 

 

mov

@R0

A

; den Inhalt von A zu der Speicherzelle,

 

 

 

 

 

; auf die R0 zeigt. Das ist die

 

 

 

 

 

; Speicherzelle 84h, deren Adresse

 

 

 

 

 

; in R0 steht.

 

 

 

 

 

Der Umgang mit den internen oberen RAM-Speichern ist etwas umständlich. Deswegen wird man in der Regel den Stack des Mikrocontrollers dorthinlegen. Über den Stackpointer SP wird ohnehin indirekt adressiert und dieser Vorgang läuft automatisch ab.

Beispiel für eine Verlagerung des Stacks in den internen oberen RAM:

 

 

mov

SP

#7Fh

; Stackpointer weist auf Stack ab 80h

 

Da der Stackpointer vor jeder Ablage eines Wertes auf dem Stack incrementiert wird, muß er am Anfang, vor die erste Speicherzelle des Stacks zeigen. Im Beispiel 7Fh. Der Stack beginnt dann bei 80h. Mit einem Stack von 128 Bytes könnten 64 Unterprogrammsprünge stattfinden, ohne daß der Stack überläuft. Aber Achtung, sollte der Stack überlaufen, dann würde er sich bei 00h fortsetzen und Registerbank 0 überschreiben.

 

 

 

 

 

  Der bitadressierbarar Speicher, Typ: BIT

Die bitweise adressierbaren Speicher, von denen schon im Kapitel 1.3 berichtet wurde sind eine Besonderheit der Mikrocontroller. Sie entsprechen den Bedürfnissen der Steuerungs- und Regelungstechnik. Bei ihnen kann jedes Bit des Speichers durch eine eigene Adresse und über separate Maschinenbefehle angesprochen und verändert werden. Das Adressierunssystem der Bits hat nichts mit dem der Bytespeicher gemein. Es ist von diesem unabhängig und besitzt 8 Adreßleitungen so daß maximal 256 Bits adressierbar sind. 128 adressierbare Bits liegen im unteren internen RAM. Sie besitzen die Adressen 0-7Fh und befinden sich in den 16 aufeinanderfolgenden Byte-Speichern 20h-2Fh. Diese Bits kann der Programmierer des Mikrocontrollers frei für eigene Zwecke benutzen.

Die anderen 128 Bits sind auf Speicherbytes des SFR-Speichers verteilt. Hier ist jedes 8. Byte bitadressierbar, so daß das erste Bit des Speicherbytes die gleiche Adresse wie das Byte selber besitzt. Die Bits im SFR-Speicher besitzen festgelegte Labelnamen, die in dem Bild des SFR-Speichers angegeben sind.


Ein ganzer Satz von Maschinenbefehlen kann über die Bitadresse auf diese Einzelbits zugreifen, sie kopieren, verändern und logisch verknüpfen. Dies geschieht über einen 'Booleschen Prozessor' innerhalb der ALU. Dessen 'Arbeitsregister' ist das CarryFlag C. Durch die Bitverarbeitung können so z.B. schnell und einfach Veränderungen an den Ein/Ausgabetoren vorgenommen werden. Es entfällt die Maskenbildung, die bei der Adressierung der Gesamtspeicherzelle nötig wäre, um nur eines ihrer Bits zu verändern. Besonders hervorzuheben ist die Bitadressierbarkeit der CPU-Register.. des Akkumulators A, des Hilfsregisters B und des Flaggenregisters PSW.

 

www.GoBlack.de