Contenido>Indice>Intro Tutor

DESCRIPCIÓN DE LOS SFRs ESTÁNDAR



El 8051 es un microcontrolador bastante flexible ya que tiene un número relativamente alto de modos de operación.

El acceso a los SFRs se encuentra en la RAM Interna entre las direcciones 0x80 y 0xFF. Cada SFR tiene una dirección y un nombre propio como muestra la siguiente tabla de forma gráfica.

Como se observa en el cuadro de los SFRs, los que tienen el fondo en azul están relacionados con los puertos E/S. El 8051 tiene cuatro puertos E/S de 8 bits, lo que hace un total de 32 patillas E/S. 

Los SFRs con fondo amarillo controlan las interrupciones y los timer y los de fondo morado el puerto serie. También se observan otros tipos de SFRs con fondo verde de propósito general (p. ej: funciones aritméticas, posición de la pila, etc). 

Algunos nombres de los SFRs aparecen en color rojo, esto se debe a que son accesibles bit a bit ( por ejemplo, usando las instrucciones SETB o CLR). Es importante observar que la dirección física que poseen estos SFRs es siembre divisibles por ocho.

También se puede comprobar que aunque el rango desde la 80H hasta 0FFH ofrece 128 posibles posiciones, en realidad el 8051 standard solo posee 21 SFRs. El resto de direcciones son inexistentes. Si se escribe en una de estas posiciones cualquier dato al tratar de recuperarlo se obtendrá un valor totalmemte distinto.

i088.gif (541 bytes)Se recomienda no escribir ni leer en las direcciones que no han sido asignadas a ningún SFR en particular, ya que esto puede puede provocar conductas y valores indefinidos. Incluso podría ocurrir una incompatibilidad entre el programa y otros derivados del 8051 que usen estas direcciones para otros propósitos.

 

SFRs de propósito general

SP (Stack Pointer, Dirección 81H)

La pila puede colocarse en cualquier lugar de la RAM interna del µC escribiendo en este registro de 8 bits. El tamaño máximo de la pila es por lo tanto de 256 bytes. Durante una instrucción CALL o PUSH, el contenido del registro SP se incrementa antes de almacenar los datos en la dirección apuntada por SP. Durante una instrucción POP, RET, O RETI, el contenido del registro SP se decrementa después de recuperar los datos desde la dirección apuntada por SP (Salvo en "POP SP", en el cual SP se decrementa antes de ser cargado con el valor sacado de la pila).

Después de un Reset, el registro SP queda cargado con el valor 07H. Su misión es apuntar a la RAM interna donde serán guardadas las direcciones de retorno de las subrutinas llamadas con instrucciones CALL, y desde donde dichas direcciones serán leídas al encontrarse con instrucciones RET de retorno de subrutina. Asimismo, las instrucciones POP permiten recoger de la PILA los valores de las variables depositados anteriormente con instrucciones PUSH. 

i088.gif (541 bytes)Es importante recordar que el área de los bancos de registros es compartida con la posición de la pila, como se explica en profundidad en el apartado Bancos de Registros del primer capítulo.

 

DPL/DPH (Data Pointer Low/High, Direcciones 82H/83H)

El registro de 16 bits DPTR, está formado por la unión de los registros DPH y DPL, cuya misión principal consiste en apuntar a cualquier dirección dentro de los 64 Kbytes del espacio de memoria tanto de código como de datos. Para ello se dispone de instrucciones específicas.

Veamos un ejemplo:

CLR A ;Borrar Acumulador.
MOV DPTR,#1234H ;Cargar el DPTR con el valor 1234H.
MOVC A,@A+DPTR ;El contenido de la dirección 1234H de
    ;memoria de código, se copia en el Acc.
MOVX @DPTR,A ;El contenido del Acc se copia en la 
    ;dirección 1234H de la memoria de datos.

 

PSW (Program Status Word, Dirección 0D0H, Direccionable a nivel Bit)

Contiene información del estado de la CPU que se actualiza tras la ejecución de cada instrucción. En la siguiente tabla se explica detenidamente: 

PSW (0D0H)

MSB

           

LSB

C AC F0 RS1 RS0 OV F1 P
C Flag de acarreo. Se pone a 1 si hay llevada en sumas o restas.
AC  Flag de acarreo intermedio. Se pone a 1 en las sumas y restas si hay llevada desde el nibble bajo hacia el nibble alto.
F0 Flag de propósito general a disposición del programador.
RS1 RS0 Selección de banco de registros

0

0

1

1

0

1

0

1

Banco 0   Direcciones: 00H - 07H

Banco 1   Direcciones: 08H - 0FH

Banco 2   Direcciones: 10H - 17H

Banco 3   Direcciones: 18H - 1FH

OV Flag de desbordamiento. Cuando se utiliza aritmética entera en complemento a dos, OV = 1 indica que el resultado no cabe en 8 bits.
F1 Flag de propósito general a disposición del programador.
P Flag de paridad. (P = 1 si el acumulador tiene número impar de unos. P = 0 si el acumulador tiene un número par de unos.)

ACC (Acumulador, Dirección 0E0H, Direccionable a nivel Bit)

Es el registro más utilizado, y sobre el que recaen la mayoría de las operaciones, al estar conexionado con la Unidad Lógico Aritmética (ALU). Es direccionable a nivel Bit. Interviene en todas las instrucciones que llevan la letra A (Por ejemplo: ADD    A,#34H). Cuando una instrucción admite una dirección puede utilizarse el símbolo ACC, que equivale al valor 0E0H, o dirección del registro A.

 

B (B Register, Dirección 0F0H, Direccionable a nivel Bit)

Es un registro de propósito general, que colabora con el Acumulador en las instrucciones de multiplicación y división (MUL AB y DIV AB). 

 

SFRs que controlan los puertos E/S

Existen cuatro registros de 8 bits encargados de gestionar los puertos paralelos en el µC 8051 que son, P0 (Dirección 80H), P1 (Dirección 90H), P2 (Dirección 0A0H) y P3 (Dirección 0B0H). Estos puertos confieren 32 patillas al microcontrolador. Cada puerto consiste en un latch, un driver de salida, y un buffer de entrada.

A continuación se detalla la estructura interna de las patillas de los puertos:

Las patillas de los puertos además de servir como líneas de entrada y salida de propósito general, admiten las siguientes funciones alternativas:

  1. Los drivers de salida de los puertos P0 y P2, y el buffer de entrada del puerto P0 son usados en el acceso a la memoria externa.
  2. En cuanto al puerto P3, sus hilos proporcionan diferentes funciones alternativas al µC 8051.

i088.gif (541 bytes)Para comprender el funcionamiento de los puertos es recomendable consultar el capítulo 4 "Los puertos Entrada/Salida" (Ver Características generales de los 4 puertos)

 

SFRs que controlan las interrupciones y los timers

Los SFRs que poseen algún punto en común con los Timers (temporizadores o contadores) o las interrupciones son las siguientes.

i088.gif (541 bytes)En la siguientes tablas se utiliza el termino "x" haciendo referencia a la utilización tanto del Timer0 (T0) como del Timer1 (T1) indistintamente. 

TCON (Timer Control Register, Dirección 88H, Direccionable a nivel Bit)

Configura y modifica las funciones de los Timers T0 y T1.

TCON (88H)

MSB

           

LSB

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

TFx: Flag de desbordamiento del timer Tx, se borra automáticamente una vez atendida la interrupción.
TRx = "1" Permite que el timer Tx cuente ("0" no permite contar).

IEx: Flag de petición de la interrupción externa INTx, se borra automáticamente una vez atendida la interrupción.

ITx: "1" Interrupción INTx por flanco de Bajada, "0" por nivel bajo.

 

TMOD (Timer Mode Control Register, Dirección 89H)

Configura el modo de trabajo de los Timers entre los cuatro posibles de la siguiente figura.  

TMOD (89H)

MSB

LSB

GATE

C/T

M1

M0

GATE

C/T

M1

M0

Timer 1

Timer 0

MODO

M1

M0

OPERACIÓN

0

1

2

3

0

0

1

1

0

1

0

1

Timer de 13 bits

Timer de 16 bits

Timer de 8 bits con Auto-Recarga

T0 desdoblado, T1 parado en modo 3

C/T: Selecciona modo Contador (1) o modo Temporizador (0).
GATE = "1" Permite que la patilla PIN INTx actúe sobre la señal de CONTROL del Temporizador. (El bit TRx debe estar a "1").

 

TLx/THx (Timer x Low/High, Direcciones 8AH/8BH ó 8CH/8DH)

Un timer puede pedir una interrupción con carácter periódico (modo temporizador), o después de recibir un determinado número de flancos de bajada en una patilla (modo contador). Los dos modos incrementan los registros TLx y THx que piden una interrupción en el momento en que se desbordan. 

 

IE (Interrupt Enable, Dirección 0A8H, Direccionable a nivel Bit)

Es el registro de permiso de interrupción. Cada interrupción puede ser enmascarada individualmente activando el bit que tiene asignado en este SFR. A continuación se detalla cada bit del registro.

IE (0A8H)

MSB

           

LSB

EA

X

X

ES

ET1

EX1

ET0

EX0

EA Habilitación Global de las interrupciones. Si EA = 0 no se atenderá ninguna interrupción.
ES Desenmascara la interrupción del puerto serie.
EXx Desenmascara la interrupción externa INTx.
ETx Desenmascara la interrupción del Timer Tx.

 

IP (Interrupt Priority, Dirección 0B8H, Direccionable a nivel Bit)

Cada fuente de interrupción dispone de 2 niveles de prioridad. El nivel de prioridad de una interrupción se establece mediante el bit asignado a la misma en este registro. Una interrupción solo se verá interrumpida por otra de un nivel superior de prioridad. 

IP (0B8H)

MSB

           

LSB

X

X

X

PS

PT1

PX1

PT0

PX0

PS Prioridad de la interrupción del puerto serie. (1 = ALTA, 0 = BAJA)
PTx Prioridad de la interrupción del Timer Tx.
PXx Prioridad de la interrupción externa INTx.

i088.gif (541 bytes)Para comprender el funcionamiento de los registros relacionados con los timers y las interrupciones es recomendable consultar el capítulo 5 "Timers" (Características generales) y capítulo 7 "Interrupciones" (Introducción) respectivamente.

 

SFRs que controlan el puerto serie

SCON (Serial Control, Dirección 98H, Direccionable a nivel Bit)

Este SFR controla el modo de operación del Puerto Serie del µC 8051. A continuación se explica de forma más detenida:

SCON (98H)

MSB

           

LSB

SM0

SM1

SM0

REN

TB8

RB8

TI

RI

MODO

SM0

SM1

Descripción

Velocidad

0

1

2

3

0

0

1

1

0

1

0

1

Registro de Desplazamiento

UART de 8 bits

UART de 9 bits

UART de 9 bits

fOSC/12

Variable

fOSC/64 ó fOSC/32

Variable

SM2

Si vale 1, habilita la comunicación Multiprocesador en los Modos 2 y 3. TI no se activará si el 9º bit recibido (RB8) vale "0".

En Modo 1, RI no se activará si no se recibe un bit "STOP" válido.

En Modo 0, SM2 debe ponerse a "0".

REN Si vale 1, permite la Recepción de caracteres.
TB8 Es el 9º bit a transmitir en los modos 2 y 3.
RB8

En los Modos 2 y 3 contiene el 9º bit recibido.

En Modo 1, recoge el bit "STOP". En Modo 0, no se utiliza.

TI Flag de interrupción del transmisor. Se activa al final del 8º bit en Modo 0, o al inicio del bit "STOP" en los otros modos. Debe borrarse por programa.
RI Flag de interrupción del receptor. Se activa al final del 8º bit en Modo 0, o dentro del bit "STOP" en los otros Modos (salvo modo multiprocesador). Debe borrarse por programa.

 

SBUF (Serial Control, Dirección 99H)

A efectos de tratamiento es un único registro (una sola dirección) pero internamente son dos registros. Ambos registros, son accesibles mediante el SFR SBUF. La escritura en SBUF carga el registro de escritura mientras que su lectura accede al registro de recepción.

i088.gif (541 bytes)Para comprender el funcionamiento de los registros relacionados con el puerto serie es recomendable consultar el capítulo 6 "El puerto serie" (Introducción).

   

 


   Contenido>Indice>Intro Tutor