Special Function Register (SFR)
Das Special Funtction Register (kurz SFR) ist ein 128 Byte großer Speicherbereich. Jedes Byte im SFR hat eine spezielle Funktion.
Eine dieser Speicherzellen ist der Accumulator, welcher für Berechnungen speziell verbunden ist. Eine andere Gruppe sind die Ports
P0 bis P3 (bzw. P0 bis P4) welche einen Datenaustausch zwischen dem Mikrocontroller und der Peripherie zulassen. Andere Register in diesem
Speicherbereich dienen zur Konfiguration des Mikrocontrollers, so können diese Timer aktivieren oder die serielle Schnittstelle konfigurieren.
Je nach Mikrocontroller-Modell variiert die Ausstattung der integrierten Hardware (USB, CAN-Bus, I2C-Bus, AD-Wandler, ...). Da diese
Hardware angesteuert und eingestellt werden muss, befinden sich hierfür immer Speicherzellen im SFR, welche somit je nach Modell unterschiedlich
belegt sind. Die Grundausstattung des SFR ist jedoch immer gleich.
Im folgenden werden drei Belegungen des SFR betrachtet. Die erste stellt die minimale Grundausstattung eines jeden 8051 dar, die zweite ist die des
AT89S8252, welcher unsere alten Mikrocontroller-Boards zierte und zu guter letzt, das SFR des AT89C51CC03, welcher auf unserern aktuellen Boards
verbaut ist.
SFR Grundausstattung
Hier sind 21 der 128 Speicherplätze belegt. Alle anderen sind für spätere Erweiterungen reserviert und dürfen weder gelesen noch beschrieben
werden.
Die Grundausstattung umfasst neben dem obligatorischen Accu und B-Register, welche beide für Berechnungen benötigt werden,
das Programm Status Word (PSW), in welchem jedes Bit eine Bedeutung hat (Carry, Half-Carry, Parität etc.).
Das SFR enthält ebenso
den 16-Bit DataPointer (DPL, DPH),
4 Ports (P0-P3),
zwei Timer (T0,T1) welche mittels TCon und TMod konfiguriert werden und die Register TL0/1 und TH0/1 als Variablen verwenden.
Des Weitern ist eine serielle Schnittstelle vorhanden (SCon, SBuf).
Das Register PCon dient der Power-Konfiguration des Mikrocontrollers (Sleep-Mode etc.).
Die Register IP und IE dienen der Interrupt-Konfiguration.
|
+0
|
+1
|
+2
|
+3
|
+4
|
+5
|
+6
|
+7
|
|
0F8h
|
|
|
|
|
|
|
|
|
0FFh
|
0F0h
|
B
00000000
|
|
|
|
|
|
|
|
0F7h
|
0E8h
|
|
|
|
|
|
|
|
|
0EFh
|
0E0h
|
ACCU
00000000
|
|
|
|
|
|
|
|
0E7h
|
0D8h
|
|
|
|
|
|
|
|
|
0DFh
|
0D0h
|
PSW
00000000
|
|
|
|
|
|
|
|
0D7h
|
0C8h
|
|
|
|
|
|
|
|
|
0CFh
|
0C0h
|
|
|
|
|
|
|
|
|
0C7h
|
0B8h
|
IP
xx000000
|
|
|
|
|
|
|
|
0BFh
|
0B0h
|
P3
11111111
|
|
|
|
|
|
|
|
0B7h
|
0A8h
|
IE
0x000000
|
|
|
|
|
|
|
|
0AFh
|
0A0h
|
P2
11111111
|
|
|
|
|
|
|
|
0A7h
|
098h
|
SCON
00000000
|
SBUF
xxxxxxxx
|
|
|
|
|
|
|
09Fh
|
090h
|
P1
11111111
|
|
|
|
|
|
|
|
097h
|
088h
|
TCON
00000000
|
TMOD
00000000
|
TL0
00000000
|
TL1
00000000
|
TH0
00000000
|
TH1
00000000
|
|
|
08Fh
|
080h
|
P0
11111111
|
SP
00000111
|
DPL
00000000
|
DPH
00000000
|
|
|
|
PCON
0xxx0000
|
087h
|
|
+0
|
+1
|
+2
|
+3
|
+4
|
+5
|
+6
|
+7
|
|
SFR des AT89S8252
Der AT89S8252 verfügt über alle Komponenten eines 8051 Controllers. Zusätzlich besitzt er noch folgende Komponenten:
- Timer 2: Dies ist ein 16 Bit-Timer mit 16-Bit Auto-Reload Funktion.
Er wird über die Register T2Mod und T2Con konfiguriert.
In den Registern TH2 und TL2 zählt er die Zeit und in
RCAP2H und RCAP2L wird sein Reload-Wert gespeichert.
Der Timer 2 kann auch als Counter verwendet werden und besitzt zusätzlich einen Capture-Mode. Weiterführende Information hierzu
findet sich in der Dokumentation ab Seite 11.
- Watchdog: Der Watchdog (=Wachhund) wird eingesetzt, um Programmabstürzte zu erkennen. Wird er aktiviert,
so zählt eine eigene Schaltung einen Wert herunter. Ist diese Zeit bei 0 angekommen wird ein Neustart ausgeführt. Ein Programm, welches
den Watchdog verwendet setzt diesen Wert immer wieder zurück, so dass der Reset nicht ausgelöst wird. Bleibt das Programm hängen, so wird
dieses Rücksetzten nicht ausgeführt und der Controller führt einen Neustart durch. Der Watchdog wird über WMCON konfiguriert.
- Interner Erweiterungsspeicher: Der AT89S8252 besitzt auf dem Chip einen 2kB Erweiterungsspeicher.
Im WMCON Register wird eingestellt, ob man diesen internen Erweiterungspeicher benutzt oder einen externen.
Weiterführende Information hierzu
findet sich in der Dokumentation ab Seite 8.
- Dual Data Pointer: Dieser Controller verfügt über zwei Data-Pointer. Das Bit WMCON.2
gibt an, welcher dieser beiden Data Pointer der aktive ist. Ist dieses Bit 0, so ist der aktuelle Data Pointer Wert in
DP0H und DP0L. Ist der Wert des Bits 1 so ist er in DP1H und DP1L.
|
+0
|
+1
|
+2
|
+3
|
+4
|
+5
|
+6
|
+7
|
|
0F8h
|
|
|
|
|
|
|
|
|
0FFh
|
0F0h
|
B
00000000
|
|
|
|
|
|
|
|
0F7h
|
0E8h
|
|
|
|
|
|
|
|
|
0EFh
|
0E0h
|
ACCU
00000000
|
|
|
|
|
|
|
|
0E7h
|
0D8h
|
|
|
|
|
|
|
|
|
0DFh
|
0D0h
|
PSW
00000000
|
|
|
|
|
SPCR
000001xx
|
|
|
0D7h
|
0C8h
|
T2CON
00000000
|
T2MOD
xxxxxx00
|
RCAP2L
00000000
|
RCAP2H
00000000
|
TL2
00000000
|
TH2
00000000
|
|
|
0CFh
|
0C0h
|
|
|
|
|
|
|
|
|
0C7h
|
0B8h
|
IP
xx000000
|
|
|
|
|
|
|
|
0BFh
|
0B0h
|
P3
11111111
|
|
|
|
|
|
|
|
0B7h
|
0A8h
|
IE
0x000000
|
|
SPSR
00xxxxxx
|
|
|
|
|
|
0AFh
|
0A0h
|
P2
11111111
|
|
|
|
|
|
|
|
0A7h
|
098h
|
SCON
00000000
|
SBUF
xxxxxxxx
|
|
|
|
|
|
|
09Fh
|
090h
|
P1
11111111
|
|
|
|
|
|
WMCON
00000010
|
|
097h
|
088h
|
TCON
00000000
|
TMOD
00000000
|
TL0
00000000
|
TL1
00000000
|
TH0
00000000
|
TH1
00000000
|
|
|
08Fh
|
080h
|
P0
11111111
|
SP
00000111
|
DP0L
00000000
|
DP0H
00000000
|
DP1L
00000000
|
DP1H
00000000
|
SPDR
xxxxxxxx
|
PCON
0xxx0000
|
087h
|
|
+0
|
+1
|
+2
|
+3
|
+4
|
+5
|
+6
|
+7
|
|
SFR des AT89C51CC03
Der AT89C51CC03 verfügt über die Komponenten des Standart 8051, sowie den Timer 2, welcher schon im AT89S8252 vorhanden ist (rot hinterlegte Speicherzellen).
- Port 4: Dieser zusätzliche Port besitzt nur 4 Bits erweitert die bisherige Anbindung nach außen von 32 auf 36 Bits.
- CAN-Bus Controller: Die meisten zusätzlich Speicherzellen im SFR sind für den vollständig implementierten CAN-Bus
zuständig. Die meisten Adressen kann man an dem CAN im Namen erkennen.
Näheres hierzu findes sich in der Dokumentation auf Seite 85.
- Dual Data Pointer: Die zwei Data Pointer des AT89C51CC03 sind nicht wie im AT89S8252 beide im SFR abgelegt. Hier ist
nur der aktive DPTR über DPH und DPL ansprechbar. Welcher DPTR aktive ist
wird über AUXR1.0 (SFR Adresse 0A2h) geregelt.
- Weiteres: Des weiteren verfügt der Controller über einen Power Monitor, eine Highspeed SPI Interface,
Programmable Counter Array (PCA) und einiges mehr. Sollte man Interesse an diesen Erweiterungen haben, so sehe man sich
die Dokumentation an.
|
+0
|
+1
|
+2
|
+3
|
+4
|
+5
|
+6
|
+7
|
|
0F8h
|
IPL1
xxxxx000
|
CH
00000000
|
CCAP0H
00000000
|
CCAP1H
00000000
|
CCAP2H
00000000
|
CCAP3H
00000000
|
CCAP4H
00000000
|
|
0FFh
|
0F0h
|
B
00000000
|
|
ADCLK
xxx00000
|
ADCON
x0000000
|
ADDL
00000000
|
ADDH
00000000
|
ADCF
00000000
|
IPH1
xxxxx000
|
0F7h
|
0E8h
|
IE1
xxxx000
|
CL
00000000
|
CCAP0L
00000000
|
CCAP1L
00000000
|
CCAP2L
00000000
|
CCAP3L
00000000
|
CCAP4L
00000000
|
|
0EFh
|
0E0h
|
ACCU
00000000
|
|
|
|
|
|
|
|
0E7h
|
0D8h
|
CCON
00000000
|
CMOD
00xxx000
|
CCAPM0
x0000000
|
CCAPM1
x0000000
|
CCAPM2
x0000000
|
CCAPM3
x0000000
|
CCAPM4
x0000000
|
|
0DFh
|
0D0h
|
PSW
00000000
|
FCON
00000000
|
EECON
xxxxxx00
|
FSTA
xxxxxx00
|
SOCON
00010100
|
SPSCR
00000000
|
SPDAT
xxxxxxxx
|
|
0D7h
|
0C8h
|
T2CON
00000000
|
T2MOD
xxxxxx00
|
RCAP2L
00000000
|
RCAP2H
00000000
|
TL2
00000000
|
TH2
00000000
|
CANEN1
x0000000
|
CANEN2
00000000
|
0CFh
|
0C0h
|
P4
xx111111
|
CANGIE
xx00000x
|
CANIE1
x0000000
|
CANIE2
00000000
|
CANIDM1
xxxxxxxx
|
CANIDM2
xxxxxxxx
|
CANIDM3
xxxxxxxx
|
CANIDM4
xxxxxxxx
|
0C7h
|
0B8h
|
IPL0
x0000000
|
SADEN
00000000
|
CANSIT1
00000000
|
CANSIT2
00000000
|
CANIDT1
xxxxxxxx
|
CANIDT2
xxxxxxxx
|
CANIDT3
xxxxxxxx
|
CANIDT4
xxxxxxxx
|
0BFh
|
0B0h
|
P3
11111111
|
CANPAGE
00000000
|
CANSTCH
xxxxxxxx
|
CANCONCH
xxxxxxxx
|
CANBT1
xxxxxxxx
|
CANBT2
xxxxxxxx
|
CANBT3
xxxxxxxx
|
IPH0
x0000000
|
0B7h
|
0A8h
|
IE0
0x000000
|
SADDR
00000000
|
CANGSTA
x0x00000
|
CANGCON
00000x00
|
CANTIML
00000000
|
CANTIMH
00000000
|
CANSTMPL
00000000
|
CANSTMPH
00000000
|
0AFh
|
0A0h
|
P2
11111111
|
CANTCON
00000000
|
AUXR1
xxxx00x0
|
CANMSG
xxxxxxxx
|
CANTTCL
00000000
|
CANTTCH
00000000
|
WDTRST
11111111
|
WDTPRG
xxxxxxx0
|
0A7h
|
098h
|
SCON
00000000
|
SBUF
00000000
|
|
CANGIT
0x000000
|
CANTEC
00000000
|
CANREC
00000000
|
|
CKCON1
xxxxxxx0
|
09Fh
|
090h
|
P1
11111111
|
|
|
|
|
|
|
|
097h
|
088h
|
TCON
00000000
|
TMOD
00000000
|
TL0
00000000
|
TL1
00000000
|
TH0
00000000
|
TH1
00000000
|
AUXR
x0010100
|
CKCON0
00000000
|
08Fh
|
080h
|
P0
11111111
|
SP
00000111
|
DPL
00000000
|
DPH
00000000
|
|
|
|
PCON
0xxx0000
|
087h
|
|
+0
|
+1
|
+2
|
+3
|
+4
|
+5
|
+6
|
+7
|
|
Speicherzellen im SFR
ACCU
B
PSW
P0
P1
P2
P3
IE
TCON
TMOD
TL0
TL1
TH1
TH0
PCON
SP
DPL
DPH
SCON
SBUF
IP
DP0L
DP1L
DP0H
DP1H
T2CON
T2MOD
TL2
TH2
IE0
IE1
P4
IPL0
IPH0
IPL1
IPH1