Impressum
< Bussystem Inhalt SFR des 8051 >

Speicher des 8051

Der Speicher eines 8051 Mikrokontroller teilt sich in mehrere Teile auf. Der erste ist das ROM für den Programmcode, der zweite ist das RAM, welches für das Speichern veränderliche Werte zur Laufzeit genutzt wird. Der dritte Speicherbereich ist das Special Function Register (SFR) welches zur Konfiguration der integrierten Komponenten des Mikrocontrollers dient. Zusätzlich kann ein Erweiterungsspeicher angeschlossen werden, welcher im Prinzip wie der Ram funktioniert und so die Menge der veränderlichen Werte um ein vielfaches erhöht.

Das ROM

Das Read-Only-Memory (ROM) des Mikrocontrollers wird zum Speichern von Programmcode und konstanten Werten verwendet. Es wird einmal beschrieben und ist vom Programm aus nicht veränderbar (read only=nur lesen). Es hat eine Größe von maximal 64kB =65536 = 216 Byte, allerdings verfügen viele Mikrocontroller über ein wesentlich kleineres ROM (meist 2kB = 2048Byte).
Während der Ausführung gibt der Programm-Counter (kurz: PC) an, an welcher Adresse im ROM sich der aktuelle Befehl befindet, welcher als nächstes ausgeführt wird. Nach einem Reset hat der PC immer den Wert 0. Da das ROM 216 Byte groß ist, hat der PC eine Breite von 16 Bit. Der PC kann nicht direkt ausgelesen oder geschrieben werden. Er wird immer um einen Befehl weitergeschaltet oder über Sprungbefehle verändert.
Es gibt Befehle (movc), welche es erlauben, Werte an einer bestimmten Position im ROM auszulesen. Somit kann nicht für das Programm benötigtes ROM zur Speicherung von Konstanten verwendet werden, welche zur Laufzeit in der ALU verarbeitet werden können.

Das RAM

Der RAM des 8051 ist 256 = 28 Byte groß. Die meisten Speicherzellen im RAM sind frei verfügbar und ohne besondere Bedeutung. Ausnahmen hiervon bilden die Register R0 bis R7 welche an den Adressen 0 bis 7 im RAM liegen. Allerdings kann deren Lage verändert werden, so dass die Register in 4 unterschiedlichen Bänken liegen können. Die Bank 0 sind die Adressen 0h-7h, die Bank 1 sind 8h-Fh, die Bank 2 liegt in den Adressen 10h-17h und die letzte Bank an 18h-1Fh.
Die Lage der Register wird im PSW festgelegt. Somit ist die Adressen für das Schreiben und Lesen aus einem Register abhängig von den Einstellungen des PSW.
Eine weiterer Bereich im RAM sind die Adressen, welche der Stack verwendet. Der Stack wird verwendet, um nach einem Unterprogrammaufruf wieder an die richtige Stelle im Hauptprogramm zurückzuspringen. Das Ende des Stacks steht immer im SP. Initial ist der SP auf den Wert 8 gesetzt. Werden Werte auf den Stack gelegt, so wächst diese Adresse und der Speicher im RAM wird an dieser Adresse verändert.
Sollte der Stack an einer anderen Position starten, so muss der Stackpointer beim Programmstart verändert werden. Dieses Wissen ist dann wichtig, wenn Unterprogramme (oder Interrupts) verwendet werden, da in diesem Fall keine Veränderung der Werte im RAM an den Adressen 8 bis Fh (oder weiter) vorgenommen werden dürfen.

Das SFR

Im Special Function Register (SFR) hat jede Speicherzelle eine besondere Bedeutung. Die Werte in diesen Bytes bestimmen die Konfiguration und somit das Verhalten von eingebauten Komponenten. Das SFR wird ausfürhlicher auf der nächsten Seite behandet.

Der Erweiterungsspeicher

Einige Kontroller besitzten bereits einen eingebauten Erweiterungsspeicher. Es kann jedoch an jeden 8051 ein externer Erweiterungspeicher von bis zu 65536 = 216 Byte angeschlossen werden (64kb). Dieser Speicher wird über die Ports angescholossen und mit dem Befehl movx angesprochen.
Jeder Wert, welcher aus dem Erweiterungsspeicher gelesen wird, landet zunächst im Accumulator. Soll ein Wert in den Erweiterungsspeicher geschrieben werden geht dies nur, wenn der Wert vorher in den Accumulator geladen wurde.
Um alle 64kb des Erweiterungsspeichers anzusprechen wird eine 16 Bit Variable benötigt, welche in diesem Fall der DPTR (=Data-Pointer) darstellt. Will man nur auf die unteren 256 Byte zugreifen, so funktioniert dies auch, indem man die Adresse in die Register R0 oder R1 legt.