Ein sehr wichtiger Bestandteil der 8051- Controller ist das interne RAM. Dieser Schreib- und Lesespeicher wird benötigt, um Daten innerhalb des Programmablaufs abzuspeichern und wieder zu lesen. Das gesamte RAM ist in Bereiche mit unterschiedlichen Funktionen unterteilt.
Spezial-Funktions-Register
Eine Sonderstellung innerhalb des RAMs nehmen die sogenannten Spezial-Funktions-Register ein. Wie der Name schon sagt, sind diese Register für bestimmte Funktionen zuständig. Dabei haben die verschiedenen Controller- Versionen der 8051- Familie durchaus eine verschiedene Anzahl von SFRs, da die Nachfolgemodelle meist mehr on-chip-Peripherie integriert haben, die durch zusätzliche SFRs angesprochen werden.
Die folgende Tabelle soll einen Überblick über die SFRs geben.
|
Symbol |
Adresse |
Bit |
Binvalue |
Kommentar |
Name |
ACC |
0E0h |
* |
0000 0000b |
|
Akkumulator |
B |
0F0h |
* |
0000 0000b |
|
Hilfs- Akku |
PSW |
0D0h |
* |
0000 0000b |
|
Programm Status Wort |
SP |
081h |
|
0000 0111b |
|
Stapelzeiger |
DPTR |
|
|
0000 0000b |
16 Bit |
Datenzeiger |
DPL |
082h |
|
0000 0000b |
|
niederwertiges Lowbyte |
DPH |
083h |
|
0000 0000b |
|
höherwertiges Highbyte |
P0 |
080h |
* |
1111 1111b |
|
Port 0 Adress/Datenbus |
P1 |
090h |
* |
1111 1111b |
|
Port 1 |
P2 |
0A0h |
* |
1111 1111b |
|
Port 2 Adressbus Highbyte |
P3 |
0B0h |
* |
1111 1111b |
|
Port 3 |
IP |
0B8h |
* |
xxx0 0000b |
beim 8051 |
Interrupt Priortätsregister |
IP |
0B8h |
* |
xx00 0000b |
beim 8052 |
Interrupt Priortätsregister |
IE |
0A8h |
* |
0xx0 0000b |
beim 8052 |
Interrupt Einschaltregister |
IE |
0A8h |
* |
0x00 0000b |
beim 8052 |
Interrupt Einschaltregister |
TMOD |
089h |
|
0000 0000b |
|
Timer Modus Register |
TCON |
088h |
* |
0000 0000b |
|
Timer Control |
T2CON |
0C8h |
* |
0000 0000b |
|
Timer2 Control |
TH0 |
08Ch |
|
0000 0000b |
|
Timer0 Highbyte |
TL0 |
08Ah |
|
0000 0000b |
|
Timer0 Lowbyte |
TH1 |
08Dh |
|
0000 0000b |
|
Timer1 Highbyte |
TL1 |
08Bh |
|
0000 0000b |
|
Timer1 Lowbyte |
TH2 |
0CDh |
|
0000 0000b |
nur 8052 |
Timer2 Highbyte |
TL2 |
0CCh |
|
0000 0000b |
nur 8052 |
Timer2 Lowbyte |
RCAP2H |
0CBh |
|
0000 0000b |
nur 8052 |
Capture Register Highbyte |
RCAP2H |
0CAh |
|
0000 0000b |
nur 8052 |
Capture Register Lowbyte |
SCON |
098h |
* |
0000 0000b |
|
Serialcontrol |
SBUF |
099h |
|
xxxx xxxxb |
|
Serial Buffer |
PCON |
087h |
|
0xxx xxxxb |
HMOS |
Prozessor Control |
PCON |
087h |
|
0xxx 0000b |
CHMOS |
Prozessor Control |
|
Adresse: | Adresse unter der das Register angesprochen wird |
Bit: | * falls bitadressierbar |
Bitvalue: | Inhalt binär nach dem Einschalten oder Reset |
- Akkumulator (A)
über den Akku werden alle arithmetischen Operationen abgewickelt. Des weiteren kann er als Arbeitsregister verwendet werden. Viele Befehle können nur über den Akku bearbeitet werden.
- B- Register
Das B- Register, auch Hilfsakku genannt, kommt bei den Multiplikations- und Divisionsbefehlen (MUL AB und DIV AB) zum Einsatz. Auch dieses Register kann als Arbeitsregister verwendet werden.
- Stackpointer (SP)
Im Stackpointer (Stapelzeiger) steht die Speicheradresse, in welche das letzte Byte im Stack abgelegt wurde. Dieses Register wird mit jedem Unterprogramm beeinflusst, um die Rücksprungadresse zu verwalten.
- Datenpointer (DPTR)
Der Datenpointer ist ein 16- Bit Register, wobei das Highbyte und das Lowbyte auch einzeln angesprochen werden kann. Der Datenpointer wird verwendet für die Adressierung von Daten, die im Programmspeicher abgelegt sind, sowie für den Zugriff auf die Externen Bauteile (RAM).
- Portregister (Px)
Die Portregister P0, P1, P2 und P3 steuern die Ein-/ Ausgabeports. Zu beachten ist, dass P0 und P2 nur bei Controllern mit internen Programmspeicher zur freien Verfügung stehen. Der Controller 80C32, gibt über die beiden Ports die Adressen für die Adressierung von EPROM und RAM aus.
- Interrupt- Priorität- Register (IP)
Das Interrupt- Prioritäts- Register IP enthält die Informationen über die Priortätenverteilung der verschiedenen Interruptquellen.
- Interrupt- Enable- Register (IE)
Durch Setzen der entsprechenden Bits im Interrupt- Enable- Register werden die Interrupts freigegeben.
- Timer- Mode- Register (TMOD)
Mit diesen Registern wird die Betriebsart von Timer 0 und Timer 1 eingestellt. Die Bits haben spezielle Namen, sie können jedoch nicht über die Bit- Befehle beeinflusst werden. Wir müssen stets das komplette Register TMOD mit definierten Werten beschreiben.
Das Timer- Mode- Register bestimmt, in welchen Modus Timer 0 und Timer 1 arbeiten.
Dieses Register hat 8 Bit. Diese Bits haben folgende Aufgaben:
GATE:
Wenn dieses Bit gesetzt ist, dann wird der Timer nur freigegeben, wenn der Pin INT0 (für Timer0 und Pin INT1 für Timer 1) des Controllers HIGH ist. Dadurch kann der Timer über ein externes Signal aus oder eingeschaltet werden. Z.B. Pulsweitenmessung.
C/T:
Mit diesem Register wird die Timerfunktion festgelegt. Bei gesetztem Bit arbeitet der Timer als Zähler (Counter) und reagiert auf Impulse am Controller-Eingang T0 (T1 bei Timer 1). Z.B. bei einem Frequenzmessgerät.
M1/M2:
Diese beiden Bits legen den Arbeitsmodus fest. Die nachfolgende Tabelle zeigt den Zusammenhang.
M1 |
M0 |
Arbeitsmodi |
0 |
0 |
Modus 0 |
0 |
1 |
Modus 1 |
1 |
0 |
Modus 2 |
1 |
1 |
Modus 3 |
MODUS 0:
Das LOW-Byte von TL0 bzw. (TL1 bei Timer 1) arbeitet als 5- Bit Vorteiler. Er zählt von 00000b bis 11111b (0...31) und läuft dann über auf 00000b. Mit diesem überlauf wird das HIGH- Byte TH0 bzw. (TH1 bei Timer 1) des Timers um eins erhöht. Damit stellt TH0 und TH1 einen 1:32 Vorteiler für TH0 und TH1 dar. Die höherwertigen Bits in TL0 und TL1 haben einen undefinierten Zustand.
MODUS 1:
Das LOW- Byte TL0 und TL1 arbeitet als mit seiner vollen Länge von 8 Bit. Dadurch erhält man einen 1:256 Vorteiler. Modus 0 und 1, unterscheiden sich nur durch den Vorteiler.
MODUS 2:
Der Timer arbeit im AUTO- RELOAD- Betrieb. Als Timer arbeitet nur das LOW- Byte TL0 und TL1, während das HIGH- Byte den Reload- Wert bereitstellt. Mit dem Inhalt des Registers TH0 bzw. TH1 wird nach dem Timerüberlauf TL0 nachgeladen. TH0 muss über die Software beschrieben werden, ändert aber beim Reload- Vorgang seinen Wert nicht.
MODUS 3:
In diesem Modus ist Timer0 aufgesplittet in zwei unabhängige 8- Bit Timer TL0 und TH0. TL0 kann dabei als Zähler oder auch als Zeitgeber betrieben werden. Es wird durch die Steuerbits kontolliert. ( C/T,GATE,TR0,TF0). TH0 kann nur als Zeitgeber betrieben werden. Er benutzt dabei die Steuerbits von Timer1 (TR1,TF1,siehe TCON) Timer 1 stoppt in diesem Modus.
Wählt man für Timer0 diesen Modus, so erhält man 2 unabhängige Timer. Timer1 kann aber in einem anderen Modus betrieben werden, so dass ein zusätzlicher Timer zur Verfügung steht. TR1 beeinflusst TH0, Timer1 kann aber durch Umschalten auf Modus 3 gestoppt werden. Zu beachten ist aber, dass ein Überlauf von Timer1 nicht erkannt werden kann, da das Überlaufflag von TF1 von TH0 bedient wird. Beim Betrieb von Timer0 in Modus 3 beschränkt sich der Einsatz von Timer1 auf Anwendungen, für die keine Überlauferkennung erforderlich ist. Die Voraussetzungen sind beim Betrieb als Baudratengenerator für die serielle Schnittstelle gegeben.
- TH0, TL0
Diese beiden Register enthalten den aktuellen Timerstand von Timer 0. Sie sind kaskadiert, wobei in TH0 das Highbyte, in TL0 das Lowbyte abgelegt ist. Damit kann bis zum Wert 65535 (FFFFh) gezählt werden.
- TH1,TL1
Analog zu Timer 0 ist in diesen beiden Registern der aktuelle Timerstand von Timer 1 abgelegt.
Diese vier Timer- Register können jederzeit im Programm gelesen und auch überschrieben werden.
- Timer- Control- Register (TCON und T2CON)
Das Timer- Control- Register enthält die Steuerbits für die Timer 0 und Timer 1. Durch T2CON wird Timer 2 beeinflusst. Dieses Register steht erst ab der 8032- Version zur Verfügung.
Das Register TCON hat folgendende Aufgaben:
TF1: Timer1 Überlauf
TF1 wird harwaremäßig gesetzt, wenn Timer 1 überläuft. Dieses Bit stellt die Anforderung eines Interrupts dar. Mit Aufruf der Interruptroutine wird TF1 wieder von der Harware gelöscht. Man beachte die Ausnahme in Modus 3, hier setzt ein überlauf von TH0 das Flag TH1.
TR1: Timer1 Start/Stop
Bei gelöschtem TR1 stoppt Timer 1. Um den Timer zu starten, muss TR1 gesetzt werden.
TF0: Timer0 überlauf
TF0 wird hardwaremäßig gesetzt, wenn Timer 0 überläuft. Mit Aufruf der Interruptroutine für Timer0 wir auch dieses Bit gelöscht.
TR0: Timer0 Start/Stop
Bei gelöschtem TR0 stoppt Timer 0. Um Timer 0 zu starten, muss TR0 gesetzt werden.
- Timer 2
Für Timer 2 stehen neben den Registern TH2, TL2, die den aktuellen Zählerstand beinhalten, noch 2 Capture Register (RCAP2H, RCAP2L) zur Verfügung, um den Zählerstand einzufrieren.
- Serial- Control- Register (SCON)
Das Serial- Control- Register steuert die serielle Schnittstelle des Controllers.
- Serial- Data- Buffer (SBUF)
Das Serial- Data- Buffer enthält den Wert, den die serielle Schnittstelle ausgibt oder empfangen hat.
- Prozessor- Control- Register (PCON)
In diesem Register ist beim 8032 nur ein Bit adressierbar. Es bestimmt die Baudrate der seriellen Schnittstelle. Dieses Bit hat die Bezeichnung SMOD und ist in PCON.7 abgelegt.
|