2.3. Registros de funciones especiales (SFR) de los microcontroladores 8051
El área de registros o funciones especiales (SFR) está comprendida entre la dirección 80H y FFH de la memoria interna del microcontrolador.
Esta zona de memoria no se puede utilizar como memoria de datos, resulta evidente que si escribimos de forma descontrolada en la memoria asignada a un registro especial, se modifica el comportamiento del microcontrolador, obteniéndose resultados inesperados según el registro afectado. Aunque las posiciones de memoria que no están asignadas a un registro especial pueden ser utilizadas para contener datos, no es aconsejable su uso, se ha de tener en cuenta que estas pueden estar reservadas y asignadas a registros especiales en otros modelos de microcontroladores o de fabricantes y nuestro programa entrará en conflicto cuando cambiemos de modelo.
Los puertos de entradas y salidas también ocupan unas posiciones específicas o direcciones de memoria. Las posiciones de memoria del lateral izquierdo (80H, 88H, 90H..) están reservadas para el direccionamiento de bit por lo que los registros que las ocupan se podrán acceder mediante este sistema.
En la siguiente tabla se detalla la disposición de cada registro del microcontrolador 8051 y 8052.
F8H | | | | | | | | | FFH |
F0H | B *
| | | | | | | | F7H |
E8H | | | | | | | | | EFH |
E0H | ACC *
| | | | | | | | E7H |
D8H | | | | | | | | | DFH |
D0H | PSW *
| | | | | | | | D7H |
C8H | T2CON *#
| | RCAP2L #
| RCAP2H #
| TL2 #
| TH2 #
| | | CFH |
C0H | | | | | | | | | C7H |
B8H | IP *
| | | | | | | | BFH |
B0H | P3 *
| | | | | | | | B7H |
A8H | IE *
| | | | | | | | AFH |
A0H | P2 *
| | | | | | | | A7H |
98H | SCON *
| SBUF | | | | | | | 9FH |
90H | P1 *
| | | | | | | | 97H |
88H | TCON *
| TMOD | TL0 | TL1 | TH0 | TH1 | | | 8FH |
80H | P0 *
| SP | DPL | DPH | | | | PCON | 87H |
La siguiente tabla muestra la descripción y los símbolos de cada bit o pin de los registros internos (SFR) de la familia de microcontroladores 8051/8052.
Registro | Descripción | Dirección | Símbolo del bit o función alternativa del puerto | Valor del reset |
| | | MSB | | | | | | | LSB | |
ACC* | Acumulador (Accumulator) | E0H | E7 | E6 | E5 | E4 | E3 | E2 | E1 | E0 | 00H |
B* | Registro B (register B) | F0H | F7 | F6 | F5 | F4 | F3 | F2 | F1 | F0 | 00H |
DPTR: | Apuntador a datos (Data pointer) (2 bytes) | | | | | | | | | | |
DPH | Byte alto del DPTR (Data pointer high) | 83H | | | | | | | | | 00H |
DPL | Byte bajo del DPTR (Data pointer low) | 82H | | | | | | | | | 00H |
| | | AF | AE | AD | AC | AB | AA | A9 | A8 | |
IE* | Habilitación de interrupciones (Interrupt enable) | A8H | EA | – | ET2 | ES | ET1 | EX1 | ET0 | EX0 | 0x000000B |
| | | BF | BE | BD | BC | BB | BA | B9 | B8 | |
IP* | Prioridad de las interrupciones (Interrupt priority) | B8H | – | – | PT2 | PS | PT1 | PX1 | PT0 | PX0 | 0x000000B |
| | | 87 | 86 | 85 | 84 | 83 | 82 | 81 | 80 | |
P0* | Puerto 0 (Port 0) | 80H | AD7 | AD6 | AD5 | AD4 | AD3 | AD2 | AD1 | AD0 | FFH |
| | | 97 | 96 | 95 | 94 | 93 | 92 | 91 | 90 | |
P1* | Puerto 1 (Port 1) | 90H | – | – | – | – | – | – | T2EX | T2 | FFH |
| | | A7 | A6 | A5 | A4 | A3 | A2 | A1 | A0 | |
P2* | Puerto 2 (Port 2) | A0H | A15 | A14 | A13 | A12 | A11 | A10 | A9 | A8 | FFH |
| | | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 | |
P3* | Puerto 3 (Port 3) | B0H | RD | WR | T1 | T0 | INT1 | INT0 | TxD | RxD | FFH |
PCON1 | Control del consumo (Power control) | 87H | SMOD | – | – | – | GF1 | GF0 | PD | IDL | 0xxxxxxxB |
| | | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |
PSW* | Palabra de estado del programa (Program status word) | D0H | CY | AC | F0 | RS1 | RS0 | OV | – | P | 00H |
Registro | Descripción | Dirección | Símbolo del bit o función alternativa del puerto | Valor del reset |
| | | MSB | | | | | | | LSB | |
RCAP2H# | Byte alto de captura (Capture high) | CBH | | | | | | | | | 00H |
RCAPL# | Byte Bajo de captura (Capture low) | CAH | | | | | | | | | 00H |
SBUF | Buffer de datos serie (Serial data buffer) | 99H | | | | | | | | | xxxxxxxxB |
| | | 9F | 9E | 9D | 9C | 9B | 9A | 99 | 98 | |
SCON* | Control puerto serie (Serial controller) | 98H | SM0 | SM1 | SM2 | REN | TB8 | RB8 | TI | RI | 00H |
SP | Puntero del stack (Stack pointer) | 81H | | | | | | | | | 07H |
| | | 8F | 8E | 8D | 8C | 8B | 8A | 89 | 88 | |
TCON* | Control de las temporizadores (Timer control) | 88H | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 | 00H |
| | | CF | CE | CD | CC | CB | CA | C9 | C8 | |
T2CON*# | Control del timer 2 (Timer 2 control) | C8H | TF2 | EXF2 | RCLK | TCLK | EXEN2 | TR2 | C/T2 | CP/RL2 | 00H |
TH0 | Temporizador 0 parte alta (Timer high 0) | 8CH | | | | | | | | | 00H |
TH1 | Temporizador 1 parte alta (Timer high 1) | 8DH | | | | | | | | | 00H |
TH2# | Temporizador 2 parte alta (Timer high 2) | CDH | | | | | | | | | 00H |
TL0 | Temporizador 0 parte baja (Timer low 0) | 8AH | | | | | | | | | 00H |
TL1 | Temporizador 1 parte baja (Timer low 1) | 8BH | | | | | | | | | 00H |
TL2# | Temporizador 2 parte baja (Timer low 2) | CCH | | | | | | | | | 00H |
TMOD | Modo de los temporizadores (Timer mode) | 89H | GATE | C/T | M1 | M0 | GATE | C/T | M1 | M0 | 00H |
* Registro con direccionamiento a nivel de bit.
# Registros añadidos en la familia de microcontroladores 8052.