Capítulo 1 - Organización de la memoria INTRODUCCIÓN

Anuncio
Capítulo 1 - Organización de la memoria
INTRODUCCIÓN
El microcontrolador 8051 permite el direccionamiento de 64Kbytes de memoria
de programa y 64Kbytes de memoria de datos. Además dispone de una memoria
RAM interna de 128bytes.
Como memoria de programa se denomina la memoria en la que se encuentra el
código máquina ejecutado por el procesador mientras que en la memoria de datos
se encuentran los datos manipulados por el procesador. Esta separación de
funciones se traduce en modos de acceso y direccionamientos diferentes.
El tamaño máximo de los programas del 8051 está limitado a 64K.
Algunos ensambladores y compiladores ofrecen métodos para salvar esta
limitación cuando se usa hardware especial. Sin embargo, sin estos compiladores
y hardware especial, los programas están limitados a 64K.
MEMORIA DE PROGRAMA
La memoria de código (o memoria de programa) es una memoria de sólo lectura
destinada a contener el programa a ejecutar por el 8051. El µC solamente puede
ejecutar las instrucciones que residan en este tipo de memoria. El 8051 dispone
de 4 Kbytes de memoria de código interna, que puede expandirse hasta 64
Kbytes utilizando chips de memoria externa. La memoria de código es una
memoria no volátil (los datos permanecen al quitar la alimentación) de tipo
ROM, EPROM o FLASH.
Es posible utilizar combinaciones de memoria interna y externa. Un ejemplo
típico es el que utiliza los 4Kbytes de ROM en el chip y el resto hasta completar
como máximo los 64Kbytes en chips de memoria EPROM.
Para direccionar la memoria de código el 8051 usa siempre direcciones de 16
bits. Si la patilla EA' (1) (External Address) se encuentra a nivel alto, el 8051
ejecuta instrucciones de la ROM interna, a menos que la dirección que se esté
leyendo sea superior a 0x0FFF (supere los 4 Kbytes internos), en cuyo caso los
accesos van dirigidos a la memoria de código externa. Si la patilla EA' se
encuentra a nivel bajo, el 8051 trata de leer todas las instrucciones desde la
memoria externa de código.
Dentro de la memoria de programa, las primeras direcciones están reservadas
para los vectores de interrupción así como para el comienzo de programa según
se muestra en la figura siguiente:
figura: VECTORES DE INTERRUPCIÓN DEL 8051
MEMORIA DE DATOS


RAM externa
RAM interna
o Area de registros de funciones especiales (SFRs)
o Memoria bit
o Bancos de registros
La memoria de datos (RAM) del µC 8051 se presenta dividida en dos; memoria
de datos externa (RAM externa) y memoria de datos interna (RAM interna).
RAM Externa
Como sugiere el mismo nombre, la RAM externa es una memoria de acceso
aleatorio, de lectura y escritura, que se encuentra fuera del chip. Los accesos a la
RAM externa son más lentos y menos flexibles que los accesos a la RAM
interna. Por ejemplo, para incrementar una posición en RAM interna sólo se
necesita 1 instrucción y 1 ciclo máquina. En cambio, para incrementar una
posición de RAM Externa se requieren 4 instrucciones y 7 ciclos máquina. En
este caso, la memoria externa es 7 veces más lenta.
Incrementar la posición 0x25 de RAM interna Ciclos
INC 25H
1
Incrementar la posición 0x2043 de RAM Externa Ciclos
n
2
MOVX A,@DPTR
2
INC A
1
MOVX @DPTR, A
2
Pero lo que pierde la RAM Externa en velocidad y flexibilidad, lo gana en
cantidad, ya que la RAM interna está limitada a 128 bytes, mientras que la RAM
externa puede tener un tamaño máximo de 64Kbytes.
RAM Interna
El 8051 dispone de 128 bytes de RAM interna (en algunos derivados como el
8052 alcanza los 256 bytes). Por encontrarse en el interior del chip es la memoria
de lectura y escritura que proporciona mayor rapidez y flexibilidad en los accesos
a los datos. La RAM interna es una memoria volátil, cuyo contenido desaparece
cuando se quita la alimentación al µC.
figura:MAPA DE MEMORIA INTERNA
La RAM interna se encuentra dividida en 2 secciones: los 128 bytes inferiores y
el área de los registros de funciones especiales o SFRs. Los 128 bytes inferiores
permiten el acceso directo e indirecto, los 128 bytes superiores sólo permiten el
acceso indirecto, y los SFRs solo pueden ser accedidos directamente.
Los 128 bytes inferiores de la RAM interna están subdivididos como se muestra
en el mapa de memoria.
En los primeros 32 bytes de esta sección se encuentran 4 bancos de ocho
registros R0-R7. El 8051 puede seleccionar uno de los 4 bancos de registros de
los que dispone, mediante los bits RS0 y RS1 del registro de estado PSW.
Después de un reset el 8051 utiliza el banco 0.
La memoria direccionable como bit y como byte está formada por las 16
posiciones de RAM interna situadas entre las direcciones 20H y 2FH.
Las restantes posiciones de RAM interna, desde la dirección 30H hasta 7FH, se
utilizan para guardar las variables de usuario que requieren un acceso rápido y/o
muy frecuente.
La pila del microcontrolador puede ubicarse en cualquier lugar de RAM interna.
Después de un reset el registro apuntador de pila queda cargado con 07H, con lo
que la pila crece a partir la dirección siguiente respetando el contenido del banco
de registros 0. La pila puede crecer hasta la dirección 7FH en el µC 8051.
El 8051 solo puede direccionar 64K de RAM. Para superar esta
limitación es necesario utilizar técnicas especiales en el hardware y en el software.
Capítulo 2 - Registros de Funciones eSpeciales (SFRs)
Area de Registros de funciones especiales (SFRs)
Los SFRs son registros destinados, en su mayoría, al control de los periféricos
integrados en el 8051. Por medio de distintos SFRs se puede: acceder a los
puertos de entrada/salida del 8051; leer o escribir en el puerto serie del µC;
controlar los temporizadores y contadores; configurar el sistema de
interrupciones, etc. No obstante, dentro de los SFR's también se encuentran los
registros aritméticos (ACC, B, PSW), el apuntador de pila (SP), y los registros
apuntadores de datos (DPH y DPL).
Los SFRs se encuentran en la RAM interna del microcontrolador, entre la
dirección 80H y 0FFH, permitiendo el acceso directo exclusivamente.
Este tema se extiende en el capítulo 2 (Ver Descripción de los SFRs estándar)
Cada SFR tiene una utilidad y un formato específico. No todas las
direcciones por encima de la 80H están asignadas a los SFR. Sin embargo, las
direcciones de esta región, no asignadas a ningún SFR, son inexistentes y no
pueden ser utilizadas como posiciones adicionales de memoria RAM.
Memoria de bit
El 8051, siendo un microcontrolador orientado al control, tiene la posibilidad de
acceder a un número de variables de bit. Estas variables pueden tener por valores
0 ó 1.
Existen 128 variables de bit posibles, numeradas desde 00H hasta FFH. El
programador puede modificar estas variables con instrucciones tales como
SETB, CLR, y CPL.
Es importante tener en cuenta que la Memoria Bit es realmente parte de la RAM
Interna. De hecho, las 128 variables bit ocupan los 16 bytes de RAM Interna
desde la dirección 20H 2FH. Así, si se escribe el valor FFH en la dirección 20H
de RAM Interna, los bits 00H hasta 07H se activan (1). Esto quiere decir que:
MOV 20h,#0FFh
es equivalente a:
SETB 00h
SETB 01h
SETB 02h
SETB 03h
SETB 04h
SETB 05h
SETB 06h
SETB 07h
Lo más importante a recordar es que realmente la Memoria Bit no es un tipo de
memoria aparte, sino una zona perteneciente a la RAM Interna.
Si en el programa no se usan variables bit, las direcciones de RAM
interna desde 20H hasta 2FH se pueden utilizar como variables byte sin
problemas. Sin embargo, si la idea es usar variables bit, estas zonas de memoria
debe modificarse de forma cautelosa ya que se podría llegar a sobreescribir los
valores de los bits.
Las variables Bit desde 00H hasta 7FH se utilizan para funciones definidas por el
usuario en sus programas. Sin embargo, existen también variables bit desde 80H
en adelante que son utilizadas para acceder a ciertos SFRs bit a bit. Por ejemplo,
si las patillas de salida del puerto P0 (P0.0 hasta P0.7) están todas a 0, y se quiere
poner a 1 la patilla P0.0, podemos ejecutar:
MOV P0,#01h
o también:
SETB 80h (o SETB P0.0)
Ambas instrucciones realizan la misma función. Sin embargo, usando el
comando SETB se activará la patilla P0.0 sin afectar a ninguno de los demás
estados del P0. La instrucción MOV en este caso, efectivamente pone a 1 la
patilla P0.0, pero modifica el resto de las patillas poniéndolas a 0.
Después de un reset al 8051 el Stack Pointer (SP o apuntador de la pila)
queda cargado con 07H. Esto significa que la pila comienza desde la siguiente
dirección y se expande hacia las posiciones de memoria sucesivas. Si se
selecciona algún banco de registro distinto al banco 0, el SP debe ser inicializado
por encima del banco de registro más alto que se esté utilizando, de otro modo se
podría sobreescribir la pila. De forma similar, si usamos variables bit,
normalmente es una buena idea inicializar el SP por encima del valor 2FH para
garantizar que las variables bit quedan a salvo de la pila.
Bancos de Registro
El 8051 posee 8 registros (R0, R1, R2, R3, R4, R5, R6, y R7) que utiliza en
muchas de sus instrucciones. Estos registros se usan generalmente para ayudar en
la manipulación de valores y en el movimiento de datos de una zona de memoria
a otra. Por ejemplo, para sumar el valor de R4 al Acumulador, se puede ejecutar
la siguiente instrucción:
ADD A,R4
En este caso, si el Acumulador (A) tiene el valor 6 y R4 el valor 3, después de
ejecutar la instrucción el Acumulador contendrá el valor 9.
Sin embargo, como el registro R4 se encuentra en la dirección 04H de RAM
Interna, la siguiente instrucción debería realizar la misma operación:
ADD A,04h
La instrucción suma el valor contenido en la dirección 04H al Acumulador,
dejando el resultado en este último. Entonces si realmente R4 está en la dirección
04H de RAM Interna, las dos instrucciones realizan la misma operación.
Pero ¡Cuidado! El 8051 tiene cuatro bancos de registro distintos. Normalmente se
trabaja con el banco 0, sin embargo, por software se puede seleccionar otro banco
de registros (banco 1, 2 ó 3). En este caso, R4 no será equivalente a la dirección
04H. Por ejemplo, si las instrucciones del programa selecciona el banco 3, el
registro R4 será sinónimo a la dirección 1CH.
El concepto de bancos de registro proporciona flexibilidad al 8051,
especialmente en el manejo de interrupciones. Sin embargo, lo más importante es
recordar que los bancos de registro residen en los 32 primeros bytes de RAM
Interna.
En caso de que sólo se use el primer banco de registros (banco 0), se
pueden utilizar las posiciones de RAM interna desde la dirección 08H hasta 1FH
para otros menesteres. Pero cuando se desee seleccionar otro banco de registro (ya
sea el banco 1, 2 ó 3), se hace necesario un cuidado especial al usar direcciones de
memoria por debajo de 20H, ya que se podría sobreescribir el valor de algún
registro.
DESCRIPCIÓN DE LOS SFRs ESTÁNDAR




SFRs de propósito general
o Apuntador de pila (SP)
o Apuntador de datos (DPTR)
o Registro de estado de programa (PSW)
o Acumulador (ACC)
o Registro B
SFRs que controlan los puertos de E/S
SFRs que controlan las interrupciones y los Timers
o Registro TCON
o Registro TMOD
o TLX-THX
o IE
o IP
SFRs que controlan el puerto serie
o SCON
o SBUF
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.
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.
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
MOV
MOVC
A
DPTR,#1234H
A,@A+DPTR
MOVX
@DPTR,A
;Borrar Acumulador.
;Cargar el DPTR con el valor 1234H.
;El contenido de la dirección 1234H de
;memoria de código, se copia en el Acc.
;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
C
AC
F0
RS1
RS0
OV
F1
LSB
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
0
0
1
1
RS0
0
1
0
1
Selección de banco de registros
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.
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.
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
TF1 TR1 TF0 TR0
IE1
IT1
LSB
IT0
IE0
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
Timer 1
MODO
0
1
2
3
M1
0
0
1
1
M0
0
1
0
1
M0
Timer 0
OPERACIÓN
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
EA X
X
LSB
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
X X
X
LSB
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.
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
SM0 SM1 SM0 REN TB8
MODO SM0 SM1
Descripción
0
0
0 Registro de Desplazamiento
1
0
1 UART de 8 bits
2
1
0 UART de 9 bits
3
1
1 UART de 9 bits
RB8
TI
LSB
RI
Velocidad
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.
Para comprender el funcionamiento de los registros relacionados con el puerto
serie es recomendable consultar el capítulo 6 "El puerto serie" (Introducción).
VALOR DE LOS REGISTROS DESPUÉS DEL RESET
Se produce un RESET al mantener la patilla reset (pin 9) a nivel alto durante al
menos dos ciclos máquina (24 periodos de oscilador).
figura: CIRCUITO DE INICIALIZACIÓN
La entrada RST es muestreada en la fase S5P2 de cada ciclo máquina. Las
patillas de los puertos conservan su estado lógico durante el tiempo
correspondiente a 19 periodos del oscilador después de la fase S5P2 en la que se
ha detectado un estado lógico 1 en RST. Por consiguiente, una línea de un puerto
configurada como salida puede conservar su estado después de la aparición de
una orden de inicialización durante un intervalo de tiempo que varia entre 19 y
31 periodos del oscilador
Mientras la entrada RST está a 1, las señales ALE y PSEN' permanecen forzadas
a estado 1. Cuando RST vuelve a pasr al estado inactivo 0, habrá que esperar uno
o dos ciclos máquina antes que las señales recuperen su cadencia normal.
figura: CRONOGRAMA DE INICIALIZACIÓN
El contenido de los registros después de conectar la alimentación o después de
hacer un reset es el siguiente:
Registro
* ACC
*B
* PSW
SP
DPTR
DPH
DPL
* P0
* P1
* P2
* P3
* IP
* IE
* TMOD
TCON
TH0
TL0
Descripción
Acumulador
Registro B
Registro de estado
Puntero de pila
Puntero a la memoria
Puerto 0
Puerto 1
Puerto 2
Puerto 3
Control de prioridad de
interrupciones
Control de permiso de
interrupciones
Control de modo de los
timers
Control de los timers
Byte alto contador de timer
0
Byte bajo contador de timer
0
Valor al reset
00H
00H
00H
07H
00H
00H
0FFH
0FFH
0FFH
0FFH
0XX00000b
0XX00000b
00H
00H
00H
00H
TH1
TL1
* SCON
SBUF
PCON
Byte alto contador de timer
1
Byte bajo contador de timer
1
Control de la línea serie
Buffer de la línea serie
00H
00H
00H
indeterminado
HMOS
0XXXXXXXb (1)
Control de encendido
CHMOS
0XXX0000b
X=Indefinido
(1)
*=Registro direccionable bit a bit
HMOS y CHMOS son distintas tecnologías con las que pueden estar fabricados el µC 8051
OTROS SFRs
Todos los SFRs mencionados hasta el momento existen en el 8051 estándar, y
por lo tanto todos los µC derivados de éste deben conservarlos para mantener la
compatibilidad.
Cuando una compañía desarrolla un derivado del 8051 añade normalmente
nuevas funciones y como consecuencia nuevos SFRs.
Por ejemplo, el 80C552 compatible con el 8051, esto significa que todos los
SFRs definidos anteriormente existen en éste, y por lo tanto cualquier programa
que funcione en el 8051 también lo hará en el 80C552.
Sin embargo, el 80C552 posee nuevas características (6 puertos E/S, un
temporizador adicional de 16 bits, etc), las cuales requieren nuevos SFRs que son
asignados a direcciones que no eran usadas en el 8051 original. Por eso si un
programa que usa SFRs nuevos se pretende hacer funcionar en un 8051 estándar
no lo hará de forma correcta.
Capítulo 3 - Modos de direccionamiento

Introducción
INTRODUCCIÓN
En el microcontrolador 8051 basado en una arquitectura de 8 bits permite el
mando y el control de distintos procesos basándose en un juego de instrucciones.
Este conjunto de instrucciones hacen posible el acceso a los datos y programa
mantenidos en RAM interna, RAM externa y memoria de código. Para ello el µC
8051 dispone de una amplia gama de modos de direccionamiento. A todo esto se
le añade la incorporación de un procesador booleano que trata directamente
variables de tipo bit (variables booleanas).
En este capítulo se pretende describir los distintos modos de direccionamiento
soportados por el µC 8051 junto con su sintaxis.
DIRECCIONAMIENTO INMEDIATO
Hace referencia a un operando que se proporciona de forma inmediata, en la
instrucción. Debido a que este dato se encuentra en la memoria de programa
(código), memoria que generalmente sólo es accesible en lectura, se trata por
definición de una constante. En cuanto a la sintaxis en el código fuente, el
direccionamiento inmediato utiliza el carácter "#".
Ejemplo:
MOV A, #30H
MOV A, #VAL
;Poner en ACC (Acumulador) el valor 30H
;Poner en ACC el valor establecido para el
símbolo VAL
DIRECCIONAMIENTO DIRECTO
Uno de los operandos de la instrucción es una dirección de 8 bits sobre cuyo
contenido va actuar la operación. La sintaxis del código fuente no emplea ningún
signo particular.
Ejemplo:
MOV A, 30H
;Poner en ACC el dato situado en la dirección
30H
Este modo de direccionamiento es el único medio de acceder a los
registros de funciones especiales (SFRs). De forma general, el direccionamiento
directo sólo afecta a los 128 bytes inferiores de la RAM interna y a los SFRs (80H
a FFH)
DIRECCIONAMIENTO POR REGISTRO
El (o los) operando(s) de la operación están representados por nombres de
registros. En realidad la operación actúa sobre los valores contenidos en estos
registros.
Ejemplo:
MOV A, R1
ADD A, R0
;Transferir a ACC el valor contenido en R1
;Sumar a ese valor el contenido de R0
DIRECCIONAMIENTO INDIRECTO POR REGISTRO
El direccionamiento indirecto por registro utiliza los registros R0 o R1 como una
dirección de 8 bits. Estos punteros permiten trabajar con los datos situados en los
128 primeros bytes de la RAM interna (µC 8051) o con una página de 256 bytes
de la memoria externa. En este último caso, la página es definida por el contenido
del puerto P2. Este modo de direccionamiento no nos permite el acceso a los
registros de funciones especiales (SFRs). En el código fuente se utiliza el signo "
@ " para indicar la utilización de este modo de direccionamento.
Ejemplo:
MOV R0,#30H
;Poner el valor 30H mediante direccionamiento
inmediato
;El contenido de la dirección 30H se pone en A
MOV A, @R0
El mismo tipo de direccionamiento es posible con el registro de 16 bits
DPTR (DPH-DPL); en este caso, el direccionamiento es aplicable a los 64 Kbytes
de la memoria externa.
Las instrucciones de empilado y desenpilado en memoria de pila utilizan este
modo de direccionamiento por medio del puntero SP (Stack Pointer).
DIRECCIONAMIENTO INDIRECTO INDEXADO POR REGISTRO
Este modo de direccionamiento sólo permite acceder en modo lectura a la
memoria de programa. Permite recuperar datos estructurados en forma de tabla
colocada en el código de programa.
Este modo de direccionamiento, el contador de programa PC o el puntero de
datos DPTR hacen las veces de puntero. El desplazamiento añadido al valor de
este puntero es el contenido del acumulador y el valor recuperado es colocado en
el acumulador. Este modo de direccionamiento facilita el acceso a tablas de datos
pero el valor de desplazamiento se pierde.
Ejemplo:
.
INC A
MOVC A, @A+PC
;Se añade 1 al valor de A para compensar la
instrucción RET
;Después, A toma el valor 50H si A era 0 antes
de la llamada a esta subrutina
RET
DB 50H
DB 60H
etc
DIRECCIONAMIENTO DE BIT
Como se hace mención al principio de este capítulo, el microcontrolador 8051
integra un procesador booleano para el cual el papel de acumulador es realizado
por el indicador de acarreo CY, que para este uso se denomina C. Este µC posee
una serie de instrucciones que permiten la realización de operaciones lógicas
sobre bits, es decir, puede obtenerse una manipulación bit a bit. La dirección de
estos bits se encuentra, por una parte, en la tabla de registros de registros de
funciones especiales (SFRs cuya dirección es múltiplo de 8) y, por otra, en RAM
interna (Dirección 20H-2FH).
Ejemplo:
MOV C, P1.3
ANL C, 17H
ORL C, P2.0
MOV 7FH, C
;Poner el estado del bit 3 de puerto P1 en CY
;AND lógica con el bit 7 de la posición de RAM de
dirección 22H
;OR lógica con el bit 0 del puerto P2
;Guardar el resultado en el bit 7 de la posición de
RAM (2FH)
Las operaciones de bit son la puesta a 1, la puesta a 0, el complemento,
el salto condicional según el estado del bit, el salto condicional sin un bit está a
estado 1 y la puesta a 0 automática de el bit, el AND lógico, el OR lógico, etc.
Capítulo 4 - Los puertos de Entrada/Salida (E/S)
CARACTERÍSTICAS DE LOS PUERTOS
Como se ha indicado en capítulos anteriores los cuatro puertos P0, P1, P2, P3 del
8051 constituyen 32 líneas bidireccionables que pueden ser empleadas tanto para
entradas como para salidas, independientes unas de otras. Cada una de estas
líneas corresponde con una patilla del circuito integrado lo que ha llevado al
fabricante a dotar a ciertas líneas de estos puertos de una función auxiliar. La
diversidad de funciones ha obligado a un diseño diferente para cada uno de los
puertos.
El registro asociado a cada puerto está constituido por ocho básculas de tipo D.
Durante la inicialización del microcontrolador, las salidas de estas ocho básculas
se ponen a 1. Esta situación ha de tenerse en cuenta siempre y cuando se utilice
uno de los puertos como salida ya que la salida estará en estado alto al menos
todo el tiempo de la fase "RESET" del microcontrolador y no pasará al estado
deseado por el usuario hasta que se ejecute una instrucción de escritura en el
registro correspondiente al puerto del que forma parte esa salida.
Por el contrario, cuando la línea deba ser utilizada como entrada, este estado
inicial es indispensable para una buena recepción de información exterior. La
estructura general del "buffer" de salida conectado a la patilla del circuito
integrado es tal que si este "buffer" se encuentra en estado bajo, impedirá los
cambios de estado de la señal externa. Por tanto, antes de utilizar una línea de un
puerto de entrada, es imprescindible asegurarse de que el bit que le corresponde
en el registro del puerto esté en estado 1, tal como habrá sido puesto por la
inicialización de controlador.
Esta observación no se puede ignorar, ya que permite entender, por
ejemplo, un mal funcionamiento en recepción del interfaz serie: el bit 0 de registro
P3 (P3.0 <RxD>) debe estar a 1 para que la recepción sea posible.
ESTRUCTURA DE UN PUERTO E/S


Los puertos P1, P2 y P3
o Etapa de salida en tecnología HMOS
o Etapa de salida en tecnología CMOS
El puerto P0
La comunicación entre la unidad central propiamente dicha y las patillas del
circuito integrado se establece mediante los tres bloques siguientes:
a.
b.
c.
Un registro de funciones especiales (SFR) que tiene el
mismo nombre que el puerto
Una etapa amplificadora de salida cuya estructura es
diferente según la función auxiliar asociada a cada uno
de ellos
Un "buffer" de adaptación del nivel de entrada
Aunque la estructura de las etapas amplificadoras de salidas son diferentes para
cada uno de los puertos, las estructuras que a continuación se detallan muestran
una similitud de estructura en lo refente a los bloques de registro y "buffer" de
lectura. La parte común de esta estructura se muestra a continuación.
figura: ESTRUCTURA GENERAL DE UNA DE LAS OCHO LINEAS DE E/S DE UNO DE LO
PUERTOS
La báscula de tipo D memoriza el dato proveniente del bus interno bajo control
de la señal de escritura procedente de la unidad central. La salida Q de esta
báscula se conecta al bus interno al ejecutarse una orden de lectura. De este modo
es posible leer el contenido del registro. Pero también es posible una conexión
entre la patilla del circuito integrado y el bus de datos interno. Esta conexión es
gobernada mediante una señal de lectura de la patilla. Según el tipo de
instrucción utilizada, la unida central puede leer el estado del registro o el estado
lógico presente en la patilla del circuito.
Los puertos P1, P2, P3
En esto tres puertos ,la etapa de salida está equipada con un transistor (ver figura)
y con otros tres transistores cuyo montaje equivalente se representa por una
resistencia de "pull-up" conectada a +Vcc. La representación utilizada muestra la
lógica intermedia situada entre la salida del registro y la etapa de salida. Esta
lógica puede variar dependiendo de la función auxiliar atribuida a cada uno de
estos tres puertos.
figura: ESTRUCTURA GENERAL DE UNA ETAPA DE LOS PUERTOS P1, P2, P3
Cada línea puede ser utilizada como una entrada o como una salida digital
independientemente de las otras. En caso de ser utilizada como entrada, el bit del
registro correspondiente debe estar en estado lógico 1. Esto se traduce en la
salida Q a 1 mientras su complemento (Q negada) esta a 0. El transistor esta
bloqueado. La patilla de entrada es llevada a un potencial proximo a +Vcc por
medio de la pseudo-resistencia de "pull-up". Hay que tener en cuenta que si el
elemento externo conectado a esta entrada presenta un estado lógico 0, habrá una
circulación de corriente saliendo de esta entrada. Para que el puerto fuera
verdaderamente bidireccional, la entrada debería estar en un estado de alta
impedancia. Por esta razón, los puertos P1, P2, P3 son considerados sólo como
<<casi bidireccionables>>.
La realización de la resistencia de "pull-up" difiere según la tecnología empleada.
Etapa de salida en tecnología HMOS
A continuación se muestra la constitución detallada de una etapa de salida en
tecnología HMOS. El transistor Q3 constituye el <<camino de bajada>> y los
transistores Q1 y Q2 constituyen el <<camino de subida>> o pseudoresistencia
de "pull-up" a +Vcc.
El transistor Q1, capaz de suministrar una corriente grande, es activado
únicamente durante dos periodos del oscilador. Esta activación tiene lugar
durante una transición de 0 a 1. Cada fabricante indica la cantidad de corriente
que se puede suministrar durante la conducción del transistor Q1. El transistor
Q2 entrega una corriente más pequeña representada por IIL en las características
eléctricas del puerto. El transistor Q3, capaz de absorber una corriente grande,
esta en saturación cuando se programa el registro con un estado lógico 0. Su
capacidad para absorber corriente viene especificada por el valor IOL.
figura: DETALLE DE LA ETAPA DE SALIDA EN TECNOLOGÍA HMOS
Etapa de salida en tecnología CMOS
En tecnología CMOS, la resistencia de "pull-up" esta realizada mediante el
acoplamiento de tres transistores Q1, Q2 y Q3. Estos tres transistores de efecto
de campo son de tipo <<canal P>>.
Durante la transición de 0 a 1 de la salida, el transistor Q1, se activa durante los
dos periodos del oscilador S1P1 y S2P2. Mientras está activado suministra una
corriente grande a la salida. El valor de esta corriente es similar al de la corriente
que puede absorber el transistor Q1 de la etapa en tecnología HMOS para un
estado de salida 0. La conducción de Q1 mejora la velocidad de cambio de estado
de salida.
El transistor Q2 permanece saturado mientras el bit del registro establezca un
estado lógico 1 para la patilla de salida. Este transistor puede suministrar una
corriente menor que Q1.
El transistor Q3 esta saturado si el potencial de la patilla es superior a una tensión
comprendida entre 1 y 1,5V. En caso que la línea sea empleada como entrada,
este transistor permanecerá bloqueado si la patilla es forzada a un estado lógico 0
por un circuito externo. La etapa de salida entregará hacia la entrada una
corriente limitada a la corriente que puede suministrar el transistor Q2. Por el
contrario, cuando la línea es utilizada como salida puesta a un estado lógico 1,
esta salida podrá entregar una corriente ITL que representa la suma de la
corrientes suministradas por Q" y Q3. Así pues, el transistor Q3 permite limitar la
potencia disipada cuando la linea es utilizada como entrada y aumentar el valor
de la corriente entregada cuando la línea es utilizada como salida.
figura: DETALLE DE LA ETAPA DE SALIDA EN TECNOLOGIA CMOS
La tecnología CHMOS (CMOS) proporciona más velocidad, menos
consumo y mayor densidad de integración que la tecnoligía HMOS (NMOS)
El puerto P0
La estructura del puerto P0 se muestra detalladamente en la figura siguiente. La
función auxiliar atribuida a este puerto requiere una lógica de conmutación y un
diseño particular del "buffer" de salida. Comparando con los otros tres puertos,
el puerto P0 es realmente bidireccional: puede presentar un estado lógico
<<flotante>> (alta impedancia) cuando se configura como entrada. Esta
característica se debe a la ausencia de resistencia interna de "pull-up" a +Vcc. En
realidad el papel de resistencia de "pull-up" lo juega el transistor de efecto de
campo de subida, pero éste no entra en acción salvo para accesos a memoria
externa (empleo de la función auxiliar del puerto). Para garantizar un estado de
alta impedancia a la entrada, es necesario bloquear también el transistor de
bajada. Esto se consigue por la presencia de un estado lógico 1 a la salida del
registro. Cuando P0 se utiliza como simple puerto de salida, se la debe de
considerar de tipo drenador abierto y, por tanto, prever la colocación de
resistencias externas de "pull-up" a +Vcc.
figura: ESTRUCTURA PARTICULAR DEL PUERTO P0
PUERTOS P0 Y P2 EN EL ACCESO A MEMORIA EXTERNA
Como se puede comprobar en la figura, sobre la etapa de salida se pueden aplicar
dos fuentes de información:
1. Las salidas del registro P0 o el bus de direcciones, multiplexado a su vez
con el bus de datos, para el puerto P0.
2. Las salidas del registro P2 o la parte alta (A8/A15) del bus de direcciones,
para el puerto P2
La conmutación se determina internamente. Se efectúa mediante una señal de
control que depende, por una parte, del estado de la patilla EA'(1) del
microcontrolador y, por otra, del tipo de instrucción que se está ejecutando.
El bus de direcciones es un conjunto de líneas que permiten al µC
acceder a las distintas posiciones o localizaciones de un dispositivo dado. De este
modo, en caso de que el dispositivo sea una memoria externa, este bus le permitirá
al µC acceder a la posición de memoria indicada en su bus de direcciones, y que
estará conectado al bus de direcciones de la memoria. Por otra parte el bus de
datos es un conjunto de líneas que permite la entrada y salida de datos al
microprocesador, siendo por tanto un bus bidirecional.
figura: CONEXIÓN DE UNA RAM EXTERNA CON EL µC 8051
FUNCIÓN ALTERNATIVA DEL PUERTO P3
Según la función auxiliar atribuida a cada línea, se puede considerar una
utilización alternativa tanto en la entrada como en la salida. Para garantizar un
funcionamiento correcto de la línea cuando se emplea su función auxiliar es
necesario mantener a nivel alto (1) la salida Q del biestable. En caso contrario, el
transistor estará en saturación, forzando así la patilla del circuito integrado a un
potencial próximo a 0V.
figura: ESTRUCTURA DEL PUERTO P3
Funciones auxiliares al puerto P3
P3.0
RxD
P3.1
TxD
P3.2
P3.3
P3.4
P3.5
P3.6
P3.7
INT0'
INT1'
T0
T1
WR'
RD'
Puerto Serie: recepción en modo asíncrono; entrada y
salida de datos en modo síncrono
Puerto Serie: transmisión de datos en modo asíncrono;
salida de reloj en modo síncrono
Interrupción externa 0, entrada de control Timer 0
Interrupción externa 1, entrada de control Timer 1
Entrada de conteo para Timer 0
Entrada de conteo para Timer 1
Señal de escritura para memoria externa
Señal de lectura para memoria externa
DIAGRAMA DE TIEMPOS


Escritura en un puerto (salida)
Lectura de un puerto (entrada)
Podemos realizar operaciones de lectura/escritura sobre cualquiera de
los puertos del microcontrolador, sin embargo, el puerto P0 es el que posee una
mayor cargabilidad, pudiendo gobernar ocho cargas TTL-LS, mientras que los
otros tres solo permiten cuatro cargas TTL-LS.
Escritura en un puerto (salida)
Cuando una operación provoca la modificación del contenido del registro
asignado al puerto, el nuevo valor se presenta en las salidas de las básculas de
tipo D durante el periodo S6P2 del último ciclo máquina necesario para la
ejecución de la instrucción.
Sin embargo, la etapa de salida sólo muestra la salida del registro en la fase P1 de
cada periodo. En consecuencia, el nuevo dato no llega realmente a la salida
(patilla del circuito integrado) antes del periodo S1P1 del siguiente ciclo
máquina.
figura: ESCRITURA DE UN PUERTO
Lectura de un puerto (entrada)
Cuando una instrucción provoca la lectura de las patillas de entrada de un puerto,
los estados presentes en estas entradas son muestreados durante el periodo S5. De
esta manera precisa, el muestreo tiene lugar en la fase S5P1 o en la fase S5P2
según se utilice el puerto como tal o en su función auxiliar (figura siguiente). Por
lo tanto, cualquier variación de la entrada que se produzca a un ritmo superior a
un ciclo máquina no se podrá tener en cuenta.
figura: LECTURA DE UN PUERTO
Capítulo 5 – Timers
CARACTERISTICAS GENERALES


Funcionamiento como Temporizador
Funcionamiento como Contador
El µC 8051 dispone de 2 Timers de 16 bits, el Timer 0 y Timer 1 que ser
utilizados como contadores o como temporizadores.
Funcionamiento como Temporizador
Cuando funciona como temporizador (Timer), el registro contador se incrementa
cada ciclo máquina. Se activa un indicador cuando el contador debido a un
desbordamiento (<<overfloat>>), alcanza el valor 0. Estos indicadores aparecen
en el registro TCON con los nombres TF0 Y TF1. Por lo tanto, lo podemos
considerar como un contador de ciclos máquina, de tal manera que, como a cada
ciclo máquina le corresponden 12 periodos de reloj, la razón de contaje es 1/12 la
frecuencia del oscilador.
Funcionamiento como Contador
Cuando funciona como contador (Counter), el registro se incrementa en el flanco
descendente de la señal externa aplicada a la patilla T0 o T1. La señal externa se
muestrea durante el estado 5 de la fase 2 (S5P2) de cada ciclo maquina, Como el
contador se incrementa cuando la entrada señala un nivel alto en un ciclo y un
nivel bajo en el ciclo siguiente, el nuevo valor de contaje aparece en el registro
durante el estado 3 de la fase 1 (S3P1) del siguiente ciclo máquina en el que la
transición ha sido detectada, por lo tanto la razón de contaje es 1/24 de la
frecuencia del oscilador, ya que se necesitan dos ciclos máquina para reconocer
la transición del flanco descendente.
Además de la posibilidad de elección entre estas dos funciones, los Timers 0 y 1
disponen de cuatro modos de funcionamiento diferentes, que permiten modificar
el formato del registro de conteo o habilitar la recarga automática de un valor de
consigna.
El Timer 1 puede hacer las veces de generador de frecuencias del
interface de comunicación serie. Este fenómeno se desarrolla en el capítulo 6 "El
puerto serie" (Modos de funcionamiento de la línea serie).
REGISTRO DE CONTROL
El control del el Timer 0 y Timer 1 se realiza a través de los cuatro bits
superiores del registro TCON.
Este registro es direccionable bit a bit y está situado en la posición 38H de
memoria interna dentro de los registros de funciones especiales (SFRs).
La descripción de los cuatro bits utilizados por los timers son los siguientes:
TCON
MSB
TF1
TCON.7 (TF1)
TCON.6 (TR1)
TCON.5 (TF0)
TCON.4 (TR0)
TR1
TF0
TR0
Flag de overflow del Timer 1
Flag de puesta en marcha del Timer 1
Flag de overflow del Timer 0
Flag de puesta en marcha del Timer 0
Este registro de control se muestra mas detalladamente en el capítulo 2
"Registros de Funciones eSpeciales (SFRs)" (SFRs que controlan las interrupciones y los
timers\Registro TCON)
REGISTRO DE MODO
La configuración de un Timer (elección de su función y su modo) se efectúa
mediante programación del registro de control TMOD.
Este registro no es direccionable bit a bit y está situado en la posición 89H de la
memoria interna dentro del área de registros de funciones especiales (SRFs)
La descripción de los bits de este registro es la siguiente:
TMOD
MSB
GATE C/T M1 M0 GATE C/T M1
LSB
M0
Timer 1
Timer 0
Cada elemento se ha descrito en el capítulo 2 "Registros de Funciones
eSpeciales" (SFRs que controlan las interrupciones y los timers/TMOD)
MODO DE FUNCIONAMIENTO DE LO TIMERS




Modo 0 - 13 bits
Modo 1 - 16 bits
Modo 2 - 8 bits auto-recarga
Modo 3
El modo de funcionamiento de los timers se selecciona fijando los bits M0 Y M1
del registro TMOD.
Modo 0 - 13 bits
La frecuencia de entrada es 1/12 de la frecuencia del oscilador trabajando en
modo Temporizador, o la frecuencia de la señal de entrada al pin Tx (1) si trabaja
en modo contador (counter).
El Timer funciona en este caso como un contador de 8 bits precedido por un
predivisor de 32 . El registro del contador se configura, pues, como un registro de
13 bits: 5 bits en la parte baja para el predivisor (TLx) y 8 bits en la parte alta
para la cuenta (THx). Cuando el contador pase de estar los 13 bits a 1, a estar
todos a 0, el indicador de interrupción TRx se pone a 1. La entrada de conteo esta
habilitada cuando TRx (bit de control del registro TCON) está a 1 y cuando
GATE (Bit de modo de TMOD) está a 0, o bien cuando la entrada INTx se
encuentra en estado 1.
figura: TIMER 1 EN MODO 0
Para el Timer 0 sería lo mismo pero utilizando los registros correspondientes a
este Timer.
En este modo se produce el rebosamiento al contar 2^13=8.192 ciclos máquina o
flancos de bajada, hecho que activa el fag de interrupción del timer utilizado.
Los 5 bits de TLx son de menor peso, y los 3 de mayor peso son
indeterminados, por lo que han de ser ignorados por el programador.
Modo 1 - 16 bits
El modo 1 es idéntico al modo 0 excepto porque el registro del contador emplea
su capacidad completa (16 bits) sin predivisor, 8 en TLx y otros 8 en THx. El
rebasamiento se produce al contar 2^16=65.536 ciclos máquina o flancos de
bajada, con lo que se activa el flag de interrupción.
Modo 2 - 8 bits auto-recarga
El modo 2 de funcionamiento configura el Timer como un contador de 8 bits con
recarga automática. La parte baja TLx sirve de contador. Cuando este contador
llega a 0 por desbordamiento, el indicador TFx se pone a 1 y el contenido de THx
se carga en el contador TLx. El valor de autorrecarga lo elige el programador
según sus cálculos, y el caso de que fuera 00 hexadecimal, entonces se
produciría el rebosamiento al contar 2^8=256 ciclos máquina o flancos de bajada.
figura: TIMER/COUNTER (T1) EN MODO 2
Modo 3
Es un modo que proporciona dos contadores de 8 bits independientes, siendo los
registros de contaje, el TL0 y el THO. El primero mantiene la estructura del
Timer T0, y el segundo (ver figura) permite solamente la cuenta de ciclos
máquina, realizándose su control directamente mediante la señal TR1 y activando
el flag de interrupción del Timer T1 cuando se produce el rebosamiento.
El modo 3 esta dirigido a las aplicaciones que necesitan un contador adicional de
8 bits. Con el Timer T0 configurado en modo 3, el 8051 posee un timer de 16
bits (T1) y dos timers de 8 bits. Esta característica sólo es utilizable en
aplicaciones en las que el Timer T1 no requiera su recurso de interrupción,
puesto que en este caso su indicador (TF1) está unido a la salida del contador de
8 bits en que se convierte TH0.
figura: TIMER/COUNTER (T0) EN MODO 3
En modo 3, el Timer 1 está bloqueado como si su bit de control TR1
estuviera a 0.
Se utiliza el termino "x" haciendo referencia a la utilización tanto del Timer 0 (T0) como del Timer 1 (T1)
indistintamente.
(1)
Capítulo 6 - El puerto serie
INTRODUCCIÓN
El µC 8051 está equipado con 1 puerto serie: el puerto serie UART (Transmisor
Receptor Asíncrono Universal). La interfaz de comunicación serie es accesible
físicamente gracias a la función secundaria de dos líneas del puerto P3. Se trata
del terminal RxD (P3.0) para recepción y del terminal TxD (P3.1) para
transmisión.
El puerto serie funciona en "full-duplex", es decir, es capaz de recibir y transmitir
simultáneamente. Posee un buffer de recepción que permite la recepción de un
byte antes de la lectura anterior, siempre y cuando la lectura del primer byte se
efectúe antes de la recepción del último bit del segundo byte. Los registros de
recepción y transmisión son ambos accesibles en la misma dirección de la RAM
interna, designada por el símbolo SBUF cuyo valor es 99H.
FORMATO DE COMUNICACIÓN


Comunicación serie asíncrona
Comunicación serie síncrona
En la comunicación serie se puede tener la comunicación serie síncrona o la
comunicación serie asíncrona.
En el primer caso se necesitan los siguientes hilos: 1 para la alimentación (Vcc),
1 para la tierra (GND), 1 para datos (los cuales viajan a través de un hilo) y 1
para el clock o señal de síncronismo (cuyos pulsos también viajan). En cambio,
en el segundo caso son necesarios: 1 hilo para VCC, 1 para GND y 1 para datos.
Comunicación serie asíncrona
A continuación se muestra el Protocolo Asíncrono Universal:
Para que tanto el transmisor como el receptor puedan comunicarse sin ningún
tipo de problema es necesario que ambos dispositivos estén de acuerdo en el
formato de la comunicación, es decir, coincidan en:
1. La velocidad de comunicación tiene que ser la misma para ambos
dispositivos , expresada en Baudios (bits/seg)
2. Cuantos bits de datos se van a enviar/recibir: 5, 6, 7, 8, 9.
3. Qué bit de dato se envía/recibe en primer lugar: LSB, es decir el de menor
peso.
4. Qué paridad se utiliza en la comunicación: PAR, IMPAR, NO, etc.
5. Cuántos bits de STOP se van a enviar/recibir: 1, 1'5, 2.
Comunicación serie síncrona
Como se ha comentado anteriormente, normalmente se tienen 2 hilos (sin contar
el de la alimentación y tierra): por uno viajan los datos y por el otro los pulsos de
reloj o clock. Al disponer de los pulsos de clock, la velocidad de comunicación
de transistor no tiene por qué ser igual a la del receptor.
Los datos se leen en los flancos de bajada o en los de subida del clock
(depende de los dispositivos, el bus, etc.)
A pesar de todo, es posible establecer una comunicación serie síncrona utilizando
un único hilo por el cual viajan tanto los datos como los pulsos de clock de forma
codificada. Por ejemplo; para un periodo T, 1º 1/3T "a" 1 significa "0", y 1º 2/3T
a "1" significa "1".
El rendimiento de la comunicación serie síncrona suele ser casi del
100%, porque los datos no van precedidos ni seguidos de otras señales auxiliares
como son el bit de START, de PARIDAD, de STOP, etc. En cambio,el
rendimiento de una comunicación serie asíncrona en el modo 1 UART, 8 bits
datos + 1 bit de start + 1 bit de stop, es del 80%.
EL REGISTRO DE CONTROL
El control del puerto serie se realiza gracias al registro de funciones especiales
SCON que es direccionable bit a bit y está situado en la dirección 98H. Este
registro sirve para programar la línea serie del 8051 en sus diferentes modos de
funcionamiento.
La descripción de los bits de este registro es el siguiente:
SCON
MSB
SM0 SM1 SM2 REN TB8
RB8
TI
LSB
RI
Cada elemento se ha descrito en el capítulo 2 "Registros de Funciones
eSpeciales" (SFRs que controlan el puerto serie/SCON)
MODOS DE FUNCIONAMIENTO DE LA LINEA SERIE



Modo 0
o Funcionamiento como registro de desplazamiento
Modo 1
o Funcionamiento en modo 1
Modos 2 y 3
o Funcionamiento en los modos 2 y 3
El µC 8051 dispone de 4 modos de comunicación serie distintos. Estos modos se
describen más detalladamente a continuación.
Modo 0
En el modo 0 el puerto serie funciona como un registro de desplazamiento de 8
bits. La entrada de datos se realiza a través de la patilla RxD (P3.0). Cada dato
está compuesto por una palabra de 8 bits, siendo el primero en salir o en llegar el
bit menos significativo, el LSB.
Tanto en transmisión como en recepción, la salida de los pulsos de clock se
produce por la patilla TxD (P3.1). La lectura de datos en recepción se realiza en
los flancos de subida de la señal de reloj.
El formato de la palabra es el siguiente:
La velocidad de comunicación es fija y vale fosc/12. Para fosc=11'0592MHz la
velocidad de comunicación es:
Vcom=11.059.200/12=921.600 Baudios (bits/seg)
Este modo de comunicación es serie síncrono. Puede ser utilizado para
ampliar en número de entradas y salidas del µC mediante el empleo de registros
de desplazamiento externos conectados a la línea serie.
Funcionamiento como registro de desplazamiento (modo 0)
La transmisión (figura siguiente) es iniciada por una instrucción que emplea la
dirección SBUF como destino (por ejemplo, MOV SBUF, A). La señal de
<escritura en SBUF> que aparece en la última fase del ciclo de ejecución de la
instrucción (S6P2) hace que se cargue un <<1>> en la novena posición del
registro de desplazamiento de transmisión y arranca el ciclo de transmisión. Un
ciclo máquina después de la aparición de esta señal, se activa la orden interna
SEND. SEND habilita la salida del registro de desplazamiento por la patilla P3.0
(RxD) y habilita también la salida de reloj de desplazamiento por la patilla P3.1
(TxD).
El reloj de desplazamiento permanece a nivel bajo durante S3, S4 y S5 de cada
ciclo de máquina y a nivel alto durante S6, S1 y S2. Mientras SEND está activa,
el registro de transmisión es desplazado una posición a la derecha en cada
instante S6P2 de cada ciclo máquina. Mientras los bits de datos salen por la
derecha, se introducen ceros por la izquierda. Cuando el bit más significativo del
byte de datos se encuentra en la posición de salida, el uno que se cargó
inicialmente en novena posición se encuentra justo a su izquierda y todas las
otras posiciones están ocupadas a ceros. Esta condición indica al bloque de
control TX que debe de efectuar un último desplazamiento seguido de la
desactivación de SEND y la puesta a 1 de TI (flag de transmisión). El conjunto
de estas operaciones dura diez ciclos máquina desde la señal de escritura en
SBUF.
La recepción (figura siguiente) es iniciada por la condición REN=1 y RI=0 (flag
de recepción). En el periodo S6P2 del siguiente ciclo máquina, la unidad d
control RX introduce los bits 11111110 en registro de recepción y la siguiente
fase de reloj activa la señal RECEIVE, que a su vez activa la salida del reloj de
desplazamiento por el terminal P3.1. El reloj cambia de estado en las fases S3P1
de cada ciclo máquina.
Mientras que RECEIVE está activado, el contenido del registro de
desplazamiento se desplaza una posición hacia la izquierda en la fase S6P2 de
cada ciclo máquina. El valor que entra por la derecha se obtiene al muestrear el
terminal P3.0 durante la fase S5P2 del mismo ciclo máquina.
Los bits de datos desplazan hacia la izquierda los 1 que se cargaron inicialmente
en el registro de recepción. Cuando el cero se encuentra en la última posición de
la izquierda, el bloque de control RX realiza un último desplazamiento seguido
de la carga de SBUF.
Considerando como origen de tiempos el instante en que el indicador RI se ha
puesto a 0, la báscula RECEIVE se pone a 0 y el indicador RI a 1 en la fase
S1P1 del décimo ciclo máquina.
El esquema de funcionamiento del puerto serie en modo 0 se representa en la
figura siguiente.
figura: PUERTO SERIE EN MODO 0
Modo 1
El puerto serie funciona como un UART de 8bits con velocidad de comunicación
variable. La entrada de datos se produce a través de la patilla RxD y la salida de
datos a través de la patilla TxD.
Se transmiten 10 bits:
1 bit de START
8 bits de DATOS (primero LSB)
1 bit de STOP (1), RB8 en recepción
El formato de la palabra es el siguiente:
La velocidad de comunicación es variable y la determina el Timer 1 al
desbordarse. El Timer 1 puede ser configurado como temporizador o como
contador en sus 4 modos de funcionamiento. Normalmente, para la generación
de baudios se utiliza como temporizador en el modo 2 (temporizador de 8 bits
con autorrecarga).
También hay que tener en cuenta el estado del bit SMOD del SFR PCON, el
cual si está activado duplica la velocidad de comunicación del puerto serie en los
modos UART (1, 2, 3). A este bit se le conoce con el nombre de " bit duplicador
de velocidad".
El valor de la velocidad de comunicación nos vendrá dado por la formula:
Funcionamiento en modo 1
La transmisión (figura siguiente) es iniciada por la instrucción que utiliza SBUF
como registro destino (por ejemplo. MOV SBUF, A). La señal de escritura en
SBUF provoca que se cargue un 1 en la novena posición del registro de
transmisión e indica a la unidad de control TX que se ha pedido una transmisión.
Esta comienza en la fase S1P1 del siguiente ciclo máquina (el envío del bit con el
contador divido por 16 con la señal de escritura en SBUF). La transmisión
comienza con la activación de SEND que hace que el bit de START comience a
salir por TxD. Un poco después se activa DATA, que habilita la salida del
registro TxD.
A medida que los bits salen por la derecha, por la izquierda se introducen ceros.
Cuando el bit de datos más significativo se encuentra en la posición de salida en
el registro de desplazamiento, el uno que se había cargado inicialmente en la
novena posición se encuentra en la segunda, seguido por una serie de ceros. Esta
condición indica al bloque de control TX que se debe efectuar un último
desplazamiento, desactivar SEND y poner a TI a 1.
La recepción (figura siguiente) se inicia al detectarse una transición de 1 a 0 en la
patilla RxD. Éste es el motivo por el que RxD se muestrea a una frecuencia 16
veces mayor que la frecuencia de recepción. Al detectarse esta transición, se
inicializa un contador de 16 y en el registro de desplazamiento se escribe el valor
1FFH.
Los dieciséis períodos del contador de 16 permiten dividir en dieciseisavos el
período de recepción de un bit. En el séptimo, octavo y noveno períodos de este
contador, el detector de bit muestrea el valor de RxD. El valor almacenado es el
valor leído al menos dos veces de las tres. Este método aumenta el rechazo del
ruido. Si el primer bit detectado no era un <<0>> (bit de START), el circuito de
recepción se reinicializa y queda a la espera de una nueva transición de 1 a 0.
Si el bit de START es válido, se lleva a la entrada del registro de desplazamiento
y se puede recibir el resto de los bits. A medida que los bits llegan por la derecha,
la salida de los unos se produce por la izquierda. Cuando el bit de START se
encuentra en la posición de salida (en el registro de 9 bits), la unidad de control
RX ejecuta un último desplazamiento, carga el dato en SBUF y RB8 y pone a 1
el indicador RI. La señal de carga de SBUF y de RB8, y la puesta a 1 de RI se
produce si y sólo si se da la siguiente condición en el último desplazamiento:
RI=0 y (SM2=0 o bit STOP=1)
Si esta condición no es verdadera, la trama de recepción se pierde y RI no se
pone a 1.
Si la condición es verdadera, el bit de STOP se coloca en RB8 y los 8 bits de
datos se cargan en SBUF. En este instante, tanto si la condición ha sido satisfecha
como si no, la unidad queda de nuevo a la espera de una transición de 1 a 0 en
RxD.
El esquema de funcionamiento del puerto serie en modo 1 se representa en la
figura siguiente.
figura: PUERTO SERIE EN MODO 1
Modos 2 y 3
El puerto serie se comporta como un UART de 9 bits con velocidad de
comunicación fija para el modo 2 y variable para el modo 3.
La entrada de datos se produce a través de la patilla RxD y la salida de datos a
través de la TxD.
Se transmiten/reciben 11 bits:
1 bit de START (0)
8 bits de DATOS (primero LSB)
1 bit de DATO, el 9º bit, programable por
el usuario y que normalmente se utiliza
como bit de paridad. En recepción es el
bit RB8 y en transmisión el TR8, ambos
del SFR SCON
1 bit de STOP (1), RB8 en recepción
El formato de la palabra es el siguiente:
Los modos 2 y 3 se diferencian únicamente en la velocidad de comunicación. La
velocidad de comunicación del modo 3 se obtiene de la misma forma que para el
modo 1, es decir, a través del timer T1.
La velocidad de comunicación en modo 2 ofrece 2 posibilidades, en función del
estado binario del bit SMOD del registro PCON.
Funcionamiento en los modos 2 y 3
La transmisión (figuras siguientes) se inicia mediante una instrucción que emplee
SBUF como registro destino. La señal de escritura de SBUF carga e noveno bit
del dato , situado en TB8, en la novena posición de registro de desplazamiento, e
indica a la unidad de control TX que se requiere una transmisión. La transmisión
comienza el el periodo S1P1 del ciclo máquina que sigue al paso a 0 del contador
divisor por 16.
La transmisión comienza con la activación de SEND, que pone el bit de START
en TxD. Un periodo de bit después se activa DATA, señal que habilita la salida
por TxD del bit saliente del registro de desplazamiento. El primer impulso de
desplazamiento aparece un período de bit más tarde.
Este primer impulso introduce el 1 del bit de STOP en la novena posición del
registro de desplazamiento. Después de esto, hay una serie de ceros que se
introducen por la izquierda durante los desplazamientos. Cuando el bit de TB8
está en la posición de salida y el bit de STOP justo a su izquierda, el resto de los
bits del registro de desplazamiento son ceros. Esta condición indica a la unidad
de control TX que debe de realizar un último desplazamiento, desactivar SEND
y poner a 1 el indicador TI. Esta situación se produce en la duodécima vuelta del
contador divisor por 16 desde la escritura en SBUF.
La recepción (figura siguiente) se inicia cuando se detecta una transición de 1 a 0
en la patilla RxD. Para ello, la patilla RxD se muestrea a una frecuencia 16 veces
mayor que la frecuencia de recepción que se ha establecido. Cuando se detecta la
transición, se reinicializa el contador divisor por 16 y se escribe el valor 1FFH en
el registro de desplazamiento de entrada.
Los dieciséis periodos del contador de 16 permiten la división en dieciseisavos
del periodo de recepción de un bit. El detector de bit muestrea el valor de RxD en
los periodos séptimo, octavo y noveno del citado contador. El valor que se
almacena es el valor leído al menos dos veces de la tres.Este método aumenta el
rechazo del ruido. Si el primer bit detectado no fuera un <0> (bit de START), el
circuito de recepción se reinicializaría y esperaría una transición de 1 a 0. En el
caso de ser válido el bit de START, éste se lleva a la entrada del registro de
desplazamiento y se pueden recibir el resto de los bits.
A medida que los bits llegan por la derecha, la salida de los unos se produce por
la izquierda. Cuando el bit de START se encuentra en la posición más a la
izquierda (en el registro de 9 bits), la unidad de control RX ejecuta el último
desplazamiento. La carga del dato en SBUF y en RB8, y la puesta a 1 del
indicador RI se producen si y sólo si se da la siguiente condición en el último
desplazamiento:
RI=0 y (SM2=0 o noveno bit=1)
Si esta condición no es verdadera, la trama de recepción se pierde y RI no se
pone a 1.
Si la condición es verdadera, el noveno bit se coloca en RB8 y los 8 primeros bits
se cargan en SBUF. Pasado un período de bit, tanto si la condición ha sido
satisfecha como si no, la unidad queda de nuevo a la espera de una transición de
1 a 0 en RxD.
El esquema de funcionamiento del puerto serie en modos 2 y 3 se representan en
los diagramas de bloques y en el cronograma que es equivalente para ambos
modos.
figura: PUERTO SERIE EN MODO 2
figura: PUERTO SERIE EN MODO 3
COMUNICACIÓN ENTRE µCs
Un entorno multiprocesador no es otra cosa que una red de µC conectados entre
sí. Una de las formas de realizar un entorno multiprocesador con
microcontroladores 8051(familia 51), es a través de sus respectivos puertos serie
UART.
En el caso del puerto serie UART, esto es posible en los modos 2 y 3 que tienen
una configuración especial que sirve para la comunicación entre procesadores.
En estos modos se transmiten 11 bits (1 start, 8 dato, 1 dato programable, 1 stop).
Aunque ambos modos son posibles para la comunicación, se elige el
modo 3 porque ofrece mayor flexibilidad a la hora de determinar la velocidad de
comunicación del sistema.
figura: DIAGRAMA COMUNICACIÓN ENTRE µCs MAESTRO-ESCLAVO
El noveno bit corresponde al bit programable y es el que indica al µC que se ha
recibido una dirección de esclavo.
La forma de proceder es la siguiente:
Cuando el procesador maestro quiere transmitir un bloque de datos, primero
envía un byte de dirección que identifica al esclavo. Una dirección se diferencia
de un dato en el que el 9º bit es 1 mientras que un dato 9º bit es un 0. Siempre
que este SM2 (bit que pertenece al registro SCON) a 1, un esclavo no podrá ser
interrumpido por un byte de dato (9º bit=0). Un byte de dirección provocará una
interrupción en cada esclavo. Cada uno de estos esclavos examinará el byte
recibido y lo comparará con su dirección particular. El esclavo direccionado
pondrá a 0 en bit SM2 (En SCON) y se preparará para recibir el bloque de datos.
Los esclavos que no han sido direccionados seguirán con el bit SM2 a 1 y por lo
tanto no serán interrumpidos por los datos enviados. Par finalizar la transmisión,
el maestro enviará un byte de dirección. De este modo será detectado por el
esclavo receptor y servirá para que finalice la recepción activando de nuevo el bit
SM2. Este byte de dirección será un byte específico para finalizar transmisiones.
Link Bar 1
Contenido>Indice>Intro Tutor
Capítulo 7 - Interrupciones
INTRODUCCIÓN
Una interrupción es una señal de llamada que detiene temporalmente la ejecución
del programa principal para realizar una nueva tarea.
Cuando se habla de "realizar una nueva tarea", se trata de la ejecución de una
serie de instrucciones que realizan una acción determinada, pero limitada en el
tiempo, y que al finalizar hará que se siga ejecutando el programa principal justo
en el punto donde y como de dejó antes de producirse la interrupción.
Este conjunto de instrucciones o sentencias, forman lo que se conoce como
subrutina de servicio de interrupción. Cada fuente de interrupción del µC, tiene
reservada un área de memoria de código para albergar este conjunto de
instrucciones, 8 bytes contiguos para la familia 51. La primera dirección de estas
8, recibe el nombre de vector de interrupción. Si la extensión de la subrutina de
interrupción supera el área reservada para ella, entonces mediante instrucción se
salta a otra zona libre donde no haya problemas de espacio.
Cuando se produce una interrupción, la CPU guarda en memoria de pila el valor
del contador de programa PC (que contiene la dirección de código que contiene
la siguiente instrucción que se tiene que ejecutar, pero después de finalizarse la
interrupción) y seguidamente lo carga con el vector de interrupción.
Así, se comenzará con la ejecución de la subrutina de servicio de interrupción y
lo primero que tendrá que hacer es, guardar en la memoria de pila (empilar) los
valores de los registros utilizados por el programa principal para que no sean
solapados por los de la subrutina, después realizará la acción correspondiente a la
interrupción ejecutando las instrucciones necesaria para ello, seguidamente,
recuperará de la pila (desempilar) los valores de los registros utilizados por el
programa principal, pero en orden inverso, y finalmente dará fin a la subrutina la
instrucción de retorno de subrutina de interrupción, RET I, pero antes desactivará
el flag que solicito es interrupción si es que no lo desactiva el sistema de
interrupciones
A la vuelta de la interrupción, el programa seguirá ejecutándose en las mismas
condiciones en las que se dejó antes de la misma y habrá sufrido una demora de
tiempo que es la suma de los tiempos: de salto de ida, de ejecución de todas las
instrucciones de la subrutina, de salto de vuelta.
La memoria de pila es de tipo LIFO (Last In Frist Out), la instrucción
para el empilado es PUSH, y para el desempilado, POP. El contador de programa,
PC, es el único registro que empila y desenpila la CPU de la familia 51 de forma
automática, es decir, por hardware. El resto de los registros compartidos por el
programa principal y la subrutina, tienen que ser empilados y desempilados por
software, de forma manual, utilizando las instrucciones arriba mencionadas, tarea
que corresponde al programador.
El 8051 básico tiene cinco fuentes de interrupción con 2 niveles de prioridad.
Todas estas fuentes de interrupción son << enmascarables>>, es decir, se pueden
habilitar por software. Después de la inicialización todas las interrupciones están
inhibidas.
El registro IE sirve para habilitar o inhibir individualmente las fuentes de
interrupción.
TABLA DE INTERRUPCIONES
Los vectores de interrupción se disponen de la siguiente manera:
La primera instrucción que se ejecuta después de una inicialización (RESET=1)
es la que se encuentra en la dirección 0000H de la memoria de programa. El
fabricante ha reservado 3 bytes para esta primera instrucción, lugar que
corresponde a una instrucción de salto que inicializa al µC en el programa
principal.
Por ello, el primer emplazamiento reservado a las subrutinas que deben atender
las diferentes interrupciones del programa principal se haya situado en la
dirección 0003H. Las direcciones correspondientes a los vectores de interrupción
están separadas entre sí 8 bytes. En la mayoría de los casos, este espacio no es
suficiente para contener la subrutina de servicio de interrupción, por lo que se
utilizan desplazamientos (llamadas) a zonas de memoria donde puede residir el
código en su totalidad.
Tabla: Direcciones de los vectores de interrupción
Indicador
Dirección del vector
Int, Externa 0 (INT0)
IE0
0003H
TIMER 0
TF0
000BH
Int. Externa 1 (INT1)
IE1
0013H
TIMER 1
TF1
001BH
RI+TI
0023H
Fuente de interrupción
Puerto Serie
HABILITACIÓN DE INTERRUPCIONES
Después de la inicialización del microcontrolador, todas las fuentes de
interrupción están inhibidas debido a que se han puesto a cero los bits de registro
IE (interrupt enable register). Para poder utilizar el mecanismo de interrupciones,
es necesario, por lo tanto comenzar por habilitar la o las fuentes de interrupción
empleadas por la aplicación.
En este sentido, cada fuente de interrupción puede ser habilitada o desahabilitada
individualmente, activando o desactivando el bit (poniendo a 1 ó a 0,
respectivamente) que tiene asignado el registro de habilitación de interrupciones
(IE).
Este registro es direccionable bit a bit y está situado en la posición 0A8H de
memoria interna dentro de los SFRs.
La descripción de los bits de este registro es la siguiente:
IE (0A8H)
MSB
EA X
X
LSB
ES ET1 EX1 ET0 EX0
Cada elemento de este registro se ha descrito en el capítulo 2 "Registro
de Funciones eSpeciales"(SFRs que controlan las interrupciones y los timers/IE
NIVELES DE PRIORIDAD
Cada fuente de interrupción dispone de 2 niveles de prioridad. Dicho nivel se
establece poniendo a 1 ó a 0 el bit asignado a la fuente de interrupción en al
registro de prioridad de interrupciones IP (Interrupt priority register) donde 0
establece la prioridad baja y el 1 prioridad alta.
Este registro es direccionable bit a bit y esta situado en la posición 0B8H de
memoria interna dentro del área de SFRs.
La descripción de este registro es la siguiente:
IP (0B8H)
MSB
X X
X
LSB
PS PT1 PX1 PT0 PX0
Cada elemento de este registro se ha descrito en el capítulo 2 "Registros de
Funciones especiales" (SFRs que controlan las interrupciones y los timers/IP).
SOLICITUD DE DOS O MAS INTERRUPCIONES
En la práctica, es posible que se soliciten dos o más interrupciones, de forma no
simultanea, o también de forma simultanea. Este apartado dará a conocer cada
caso por separado.
Solicitud de dos interrupciones no simultaneas
1. Cuando se procesa una interrupción de nivel de prioridad bajo, esta puede
se interrumpida por otra de nivel alto.
2. Cuando se procesa una interrupción de nivel de prioridad bajo, no puede
ser interrumpida por otra de nivel bajo. Tras finalizar la primera, se
procesará la segunda si es que el flag correspondiente permanece todavía
activado.
3. Cuando se procesa una interrupción de nivel de prioridad alto, no puede
ser interrumpida por otra de nivel alto. Tras finalizar la primera, se
procesará la segunda si es que el flag correspondiente permanece todavía
activado.
4. Cualquier interrupción, independientemente del nivel de prioridad que
posea, puede ser interrumpida por la interrupción RESET.
figura: Estructura general de sistema de interrupciones (8051)
Solicitud de dos o más interrupciones simultaneas
1. Si tienen distinto nivel de prioridad, se atenderá la de mayor nivel de
prioridad, y cuando finalice la primera, se procesará la segunda si es que el
flag correspondiente permanece todavía activado.
2. Si tienen el mismo nivel de prioridad, se atenderá la de mayor prioridad,
dentro del mismo nivel de prioridad en el sistema de interrupciones.
PROCESO DE INTERRUPCIÓN



Interrupciones externas
Interrupciones de los timers
Interrupciones del puerto serie
Como se ha indicado en capítulo 8 el ciclo máquina del µC 8051 está compuesta
por 12 pulsos de reloj. Dos ciclos completos de reloj forman un estado, habiendo
un total de 6 por cada ciclo máquina, y cada estado esta compuesto por dos fases
(P1 y P2).
Los flags de interrupción son muestreados por el sistema de interrupciones en la
fase 2 del estado 5 (S5P2) de cada ciclo máquina y se procede con su
procesamiento a no ser que exista una situación de bloqueo.
Si no existe ninguna situación de bloqueo:
1. En el primer ciclo máquina el sistema de interrupciones detecta los flags
activados.
2. En el segundo ciclo máquina se realiza el escrutinio de las interrupciones,
analizando si están habilitadas y si es así, cuál es su nivel de prioridad, al
mismo tiempo que puede ejecutarse un instrucción de 1 ciclo máquina o
terminar la que estaba ejecutando
3. Durante los ciclos máquina 3 y 4, el sistema de interrupciones genera un
LCALL (llamada) al vector de la interrupción que seguidamente se va a
ejecutar.
Por lo tanto, el tiempo mínimo de respuesta de una interrupción, sin que haya
ninguna situación de bloqueo, que tiene el µC desde que solicita ésta hasta que
comienza su ejecución, es algo mayor que la duración de 3 ciclos máquina.
Por otro lado, estas son la situaciones de bloqueo con las que se puede encontrar
el sistema de interrupciones:
Se está ejecutando una instrucción en el ciclo máquina 3, y hasta que no finalice
no se puede generar el LCALL (llamada) por hardware al vector de interrupción
Se está atendiendo otra interrupción con nivel de prioridad igual o mayor,
entonces al menos una instrucción más del programa principal tendrá que ser
ejecutada antes de que la interrupción sea vectorizada (el PC se carga con el
vector correspondiente)
Se está ejecutando la instrucción RET I o alguna de acceso a IE o a IP, entonces
al menos una instrucción más del programa principal tendrá que ser ejecutada
antes que la interrupción sea vectorizada.
En caso de bloqueo y dado que el muestreo de los indicadores de interrupción se
repite en cada ciclo máquina, la nueva muestra reemplaza a la antigua y, si la
petición de interrupción todavía está presente, será tenida en cuenta en el
siguiente ciclo máquina. En caso de que la petición de interrupción provenga de
una fuente interna (Puerto serie, Timer, ..), el indicador aún estará activo, bien
porque debe estar desactivado por programa, o bien porque se vuelve a poner a
cero en el momento del salto a la subrutina de servicio de la interrupción. Por
tanto, la petición de interrupción se tendrá en cuenta de nuevo inmediatamente
después del bloqueo.
Por el contrario, en caso de una interrupción proveniente de una fuente externa
programada para interrumpir por nivel, es posible que la petición de interrupción
nunca sea atendida. Al bloquearse la petición es preciso que el cambio de estado
dure hasta el próximo muestreo, un ciclo de máquina más tarde, para que un
nuevo análisis conduzca a la ejecución de la petición.
Interrupciones externas
Utilizando dos líneas del puerto P3 cuyas funciones secundarias son,
respectivamente INT0' (1) e INT1' se puede definir que ocurra una interrupción
externa. Las interrupciones externas INT0' e INT1' se pueden programar por
nivel (cambio de estado lógico) o por flanco (cambio de estado de 1 a 0). El
control se realiza con el registro TCON (cuatro bits de menor peso LSB).
TCON
IE1
IT1
IE0
LSB
IT0
Si IT0 e IT1 están a 1, la petición de interrupción en INT0' e INT1'
respectivamente se hace por flanco de bajada, mientras que si están a 0 se hace
por nivel bajo.
Los bits IE0 e IE1 se ponen a 1 cuando ha habido una petición de interrupción
INT0' o INT1' respectivamente. Estos bits también pueden servir para provocar
cualquiera de las dos interrupciones por software. Para hacer esto, primero hay
que habilitar la interrupción en el registro IE y luego poner el bit IT0 o IT1 a 1
para habilitar la interrupción por flanco de bajada, seguidamente activar el bit
IE0 o el IE1 para hacer la petición de INT0' o INT1' respectivamente. Esto
provocará la interrupción exactamente igual que si se hubiera producido por
hardware.
Cuando el programa salta a la subrutina de interrupción automáticamente se
borra el bit de petición de interrupción correspondiente (IE0 o IE1) mientras que
el bit de modo de petición (IT0 o IT1) se mantiene invariable siempre y cuando
se haya producido por flanco de bajada. En cambio, si se ha producido por un
cambio de estado lógico el indicador IE0 o IE1 permanecerán a 1, por lo que han
de ser puestos a cero por programa.
Interrupciones de los timers
Los indicadores o flags TF0 y TF1, correspondientes a el timer 0 y timer 1
respectivamente, reflejan las peticiones de interrupción de estas dos fuentes.
Cuando se produce un desbordamiento (overflow) en los timers se produce un
pulso en TFx (automáticamente se pone a 0) que a su vez provoca una
interrupción (si está permitida). Esta interrupción hace que el programa principal
salte al lugar indicado por el vector de interrupción correspondiente.
Interrupción del puerto serie
En el puerto serie existen dos indicadores que reflejan las peticiones de
interrupción. Se trata de los indicadores o flags RI y TI. El falg RI indica la
petición de interrupción debida a la recepción de un byte a traves de la línea serie
y el flag TI indica que el buffer de transmisión está libre, siendo posible el envío
de un nuevo byte. Estos indicadores no se ponen automáticamente a 0 por lo que
el propio programador ha de hacerse con el cargo de ponerlos a 0.
La petición de interrupción se reconoce sobre la operación lógica
<<OR>> entre los dos indicadores RI yTI.
(1) El carácter < ' > utilizado en todo el tutorial indica que el elemento a que se refiere es activo a nivel bajo, esto es, es activo cuando su nivel
lógico es un cero.
Capítulo 8 - Características del µC 8051
ESTRUCTURA BÁSICA DEL µC 8051
Desde mediados de la década de los 80 gran parte de los diseños basados en la
automatización (electrodomésticos, sencillas aplicaciones Industriales,
instrumentación medica, control numérico, etc..) utilizaban componentes de la
familia 51.
Esta familia 51 es una familia de microcontroladores basados todos ellos en un
chip que es es el 8051. Este chip fue creado por INTEL en el año 1981 y las
características de este son:
o
o
o
o
o
o
o
o
o
o
o
CPU de 8 bits
Procesador Booleano con el cual puede realizar operaciones bit a bit
128 bytes de RAM interna
4 Kbytes de memoria de programa internos (ROM)
5 fuentes de interrupción con 2 niveles de prioridad
32 bits de entrada/salida direccionables bit a bit
1 línea serie Full dúplex (UART)
2 Contadores-Temporizadores de 16 bits programables
1 oscilador para las señales de reloj
Posibilidad de direccionar 64Kbytes de memoria de programa
externa
Posibilidad de direccionar 64Kbytes de memoria de datos externa
Posteriormente han sido desarrollados otras versiones del 8051 con
distintas características de RAM, ROM, etc..
La arquitectura básica del 8051 es mostrada en la siguiente figura.
figura b: CONFIGURACIÓN INTERNA DEL µC 8051 BÁSICO
Link Bar 2
Contenido>Indice>Intro Tutor
DESCRIPCIÓN DE LAS PATILLAS DEL µC 8051
Todos los fabricantes disponen de los microcontroladores 8051y sus versiones
CMOS en encapsulado DIP de 40 patillas y en encapsulado PLCC de 44 patillas.
En la siguiente figura se puede ver la distribución de patillas del µC 8051 según
los formatos PLCC y DIP.
figura: DISTRIBUCION DEL PATILLAJE DEL 8051
Con solo 40 patillas, el mC 8051 debe de soportar numerosas funciones, lo que
obliga a controlar cada patilla dos funciones diferentes, multiplexadas en el
tiempo.A continuación se describen las funciones generales y las señales.
Patillas
P0.0-P0.7
Descripción
Es un puerto de 8 bits en modo drenador abierto. Cada pin puede atacar a 8
entradas TTL-LS.
Es también la parte baja del bus de direcciones (A0-A7) cuando se accede a
memoria externa de datos o programa.
P1.0-P1.7
Puerto de 8 bits bidireccional con resistencias de pull-up internas. Puede
atacar directamente a 4 entradas TTL-LS.
P2.0-P2.7
Puerto de 8 bits con resistencias de pull-up internas. Puede atacar a 4 entradas
TTL-LS.
La función secundaria de este puerto es la de suministrar la parte alta de la
dirección (A8 a A15) durante un acceso a la memoria externa.
P3.0-P3.7
El puerto P3 posee características de salida y de entrada similares a las de los
puertos P1 y P2. Las funciones secundarias atribuidas a las líneas de este
puerto son:
P3.0 RxD entrada de datos serie
P3.1 TxD salida de datos serie
P3.2 INT0' entrada para la interrupción externa
P3.3 INT1' entrada para interrupción externa
P3.4 T0 entrada de conteo del timer 0
P3.5 T1 entrada de conteo para el timer 1
P3.6 WR 'salida de escritura de la memoria externa
P3.7 RD' salida de lectura de la memoria externa
RST
Entrada de inicialización. Un nivel lógico 1 en esta entrada con una duración
de dos ciclos máquina, provoca la inicialización del microcontrolador.
XTAL1
XTAL1 es la entrada del amplificador inversor destinado al oscilador de reloj,
mientras que XTAL2 es su salida. Los elementos externos que se necesitan
añadir para completar el circuito de reloj son un cuarzo que se coloca entre
XTAL1 y XTAL2 y dos condensadores que conectan estas patillas a Vss.
Aunque existe la posibilidad de hacer funcionar al microcontrolador mediante
un circuito de reloj externo.
XTAL 2
PSEN'
El hecho que la familia 8051 pueda direccionar 64KB de memoria de
programa y 64KB de memoria de datos implica un bus de direcciones de 17
bits. La patilla PSEN juega en cierto modo, el papel de decimoséptimo bit.
PSEN pasa al estado lógico 0 cuando el microcontrolador comienza la
recuperación de una instrucción desde la memoria de programa externa. Esta
salida sólo es activa, pues, si EA=0 y debe ser utilizada como señal de
selección de circuitos de memoria ROM y EPROM. Durante un acceso a la
memoria externa de datos, esta salida permanece en estado 1. Pasa dos veces a
estado 0 durante un ciclo máquina correspondiente a un acceso a la memoria
de programa externa.
ALE
La patilla ALE es la salida prevista para gobernar el multiplexado del puerto
P0 cuando este desempeña su función secundaria: parte baja del bus de
direcciones y bus de datos. Cuando ALE esta en estado 1, el puerto P0
presenta la parte A0/A7 de la dirección. Durante la transición de 1 a 0 de
ALE, la dirección todavía presente debe ser memorizada en un circuito
externo. Durante el periodo en que ALE=0 el puerto P0 funciona como bus de
datos.
EA'
Esta entrada, activa por nivel lógico 0, permite configurar el microcontrolador
para sistemas con buses externos. Si después de la inicialización se detecta
que el terminal EA esta conectado a masa o se encuentra a nivel lógico 0, los
puertos P0 y P2 pasan a desempeñar las funciones del bus de direcciones y de
datos, y las instrucciones del programa se buscan en la memoria externa a
partir de la dirección 0000H. Si EA esta conectado a Vcc o se encuentra en
estado lógico 1, el código del programa se busca en la memoria interna. Por el
consiguiente, las versiones del microcontrolador desprovistas de memoria de
programa interna deben utilizarse obligatoriamente con EA conectado al
potencial Vss. Para las versiones del microcontrolador cuya memoria de
programa interna es EPROM, esta entrada recibirá la tensión de programación
(VPP).
VCC
Alimentación de +5V
VSS
Masa 0V
OSCILADOR PARA EL µC 8051
Como se ha mencionado en el apartado anterior las patillas XTAL1 XTAL2
representan, respectivamente , la entrada y la salida de una etapa en la que puede
ir montado un oscilador con un reloj de cuarzo y dos condensadores. En el
interior del µC la frecuencia es la mitad de la frecuencia suministrada por el
oscilador externo (frecuencia del cristal de cuarzo). Este reloj interno se encarga
de definir las fases internas P y estados internos S correspondientes al ciclo
máquina del dispositivo
El montaje del oscilador se representa de la siguiente manera:
figura: CIRCUITO OSCILADOR
Se utiliza un circuito interno (dentro del chip) diferente según la tecnología
empleada para la fabricación del microcontrolador.
Como se muestra en la figura a, para los microntroladores realizados en
tecnología HMOS la conexión hacia el secuenciador interno se efectúa desde la
patilla XTAL2 mientras que en las versiones CMOS (figura b) esta conexión se
efectúa desde XTAL1. Desde el punto de vista del programador , esta
modificaciones de estructura interna no cambian en absoluto el empleo del
circuito oscilador y el montaje incial del circuito oscilador sigue siendo valido.
figura a: ESTRUCTURA INTERNA DEL OSCILADOR EN VERSIÓN HMOS
figura b: ESTRUCTURA INTERNA DEL OSCILADOR EN VERSIÓN CMOS
En cambio si el diseñador quisiera hacer funcionar el microntrolador mediante un
circuito externo, se han de tener en cuenta ciertas consideraciones:
Para los modelos realizados en tecnología HMOS, la señal externa debe ser
introducida por XTAL2 mientras que XTAL1 debe ser conectada a Vss.
Para los modelos realizados con tecnología CMOS, la señal externa es conectada
a XTAL1 y la patilla XTAL2 queda sin conectar. Las siguientes figuras
concretan esta descripción.
figura: CABLEADO DE UN RELOJ PARA VERSIONES HMOS (NMOS)
figura: CABLEADO DE UN RELOJ PARA VERSIONES CMOS (CHMOS)
DIAGRAMA DE TIEMPOS



Tiempos de la CPU
Tiempos de lectura de la memoria de programa
Tiempos de lectura/escritura de la memoria de datos
En en mC 8051 básico un ciclo máquina consiste en una secuencia de 6 estados
numerados desde S1 hasta S6. Cada estado contiene 2 periodos de oscilación. Si
el oscilador es de 12MHz, cada periodo dura 1m s. Cada ciclo máquina contiene
pues 12 periodos de oscilador, tal y como indica la siguiente figura.
Un ciclo de máquina comienza en el periodo S1P1 y termina en el periodo S6P2.
Tiempos de la CPU
La ejecución del ciclo máquina comienza en el estado 1 del ciclo máquina,
cuando el código de operación es almacenado en el registro de instrucción.
Como norma general una instrucción necesita uno o más ciclos máquina,
dependiendo de:
a. Código de operación
Por ejemplo, la instrucción INC A (figura a) tiene 1 byte de instrucción y
necesita 1 ciclo máquina, la instrucción INC DPTR, también, 1 byte de
instrucción necesita 2 ciclos máquina (figura b) y la instrucción MUL AB,
necesita 4 ciclos máquina y ocupa 1 byte de memoria.
b. El número de bytes
Por ejemplo, la instrucción MOV A, #data (figura a) tiene 2 bytes de instrucción
y necesita 1 ciclo máquina.En cambio la instrucción MOV direct,#data, consta
de 3 bytes y necesita 2 ciclos máquina.
figura a
En la figura a se representa las instrucciones que llegan a ejecutarse en un ciclo
máquina. El código de operación se lee en el periodo estado S1 y, mientras este
código es memorizado por el registro de instrucción, se efectúa un segundo ciclo
de recuperación de código durante el estado S4. Esta recuperación no se tiene en
cuenta en función del tipo de instrucción. Aun así la ejecución no se completa
hasta que termina el estado S6.
Figura b
Esto no ocurre siempre a más bytes más ciclos máquina, como puede verse en la
(figura b). La instrucción es codificada en un solo byte, pero se ejecuta en dos
ciclos máquina. La recuperación de código máquina se ignora en el periodo S4
del primer ciclo máquina y en los períodos S1 y S4 del segundo ciclo.
Ante la imposibilidad de establecer una norma general que facilite el algoritmo
para asignar él numero de bytes de la instrucción y los ciclos máquina utilizados,
es conveniente tener presente una tabla con el repertorio de instrucciones del
microcontrolador.
También podemos ver en las figuras anteriores que en cada ciclo máquina se
producen dos accesos a memoria, el primero, si es comienzo de ciclo de
instrucción, que lee el código de operación, y el segundo, que normalmente se
descarta, se utiliza para leer el segundo byte, él operando de la instrucción como
ocurre el segundo caso de la figura a.
Tiempos de Lectura de la memoria de Programa
El ciclo de lectura de la memoria de programa comienza en el estado S1 en el
flanco de subida de la señal ALE. El flanco de bajada de la señal ALE se usa
para latchear (almacenar) la parte baja de la dirección (PCL). Cuando la señal de
lectura (PSEN'(1)) baja, el 8051 deja libre la parte baja del bus de direcciones
para permitir el acceso del periférico y dar paso a la instrucción. Cuando la señal
PSEN' sube el periférico deja libre el bus de datos para un nuevo acceso del
8051 e este. Representando esto en un diagrama de tiempos.
figura : CICLO DE LECTURA EN MEMORIA DE PROGRAMA
Tiempos de lectura/escritura de la memoria de datos
Para realizar una lectura de memoria de datos se necesitan 12 periodos de reloj.
El ciclo comienza en estado S4 con la subida de la señal de ALE. El flanco de
bajada de esta señal se usa para almacenar la parte baja del bus de direcciones.
En el estado S6 el bus de datos se queda en alta impedancia luego se activa la
señal RD' dando permiso al periférico para tomar el bus de datos. En estado S3
es leído el dato del periférico y cuando se desactiva la señal RD', el bus se queda
de nuevo en alta impedancia para ser utilizado por el 8051. Véase la siguiente
figura.
figura :CICLO DE LECTURA EN LA MEMORIA DE DATOS EXTERNA
Para realizar una escritura en la memoria de datos externa se necesitan 12
periodos de reloj. El ciclo comienza en S4 con la subida de ALE. El flanco de
bajada de esta señal se utiliza para almacenar la parte baja del bus de direcciones.
En el estado S6 el 8051 saca el dato al bus, luego se activa WR dando permiso al
periférico para que pueda ser escrito el dato. En el estado S4 el 8051 desactiva la
señal WR prohibiendo de esta manera que se escriba y dando comienzo a un
nuevo ciclo. Ver siguiente diagrama de tiempos.
figura : CICLO DE ESCRITURA EN LA MEMORIA DE DATOS EXTERNA
MODOS DE OPERACIÓN EN REDUCCIÓN DE CONSUMO



Registro PCON
Modo IDLE
Modo POWER DOWN
En ocasiones nos encontramos con aplicaciones en las cuales el consumo del µC
es critico, por ello se han diseñado versiones CMOS que poseen modos de
funcionamiento de bajo consumo de potencia.
Los modos de reducción en el CMOS son dos, modo IDLE (Ralentizado) y el
modo POWER DOWN (Baja potencia).
El registro que se encarga de controlar estas funciones es el PCON (Power
Control Register), que se encuentra en los SFRs dirección 87H.
PCON (Power Control, Dirección 87H)
El 8051 tiene dos modos de operación con bajo consumo de corriente: el modo
Idle y el modo Power Down. Se entra en estos modos activando ciertos bits de
este SFR. En la siguiente tabla se detalla mejor:
PCON (87H)
MSB
SMOD
x
x
x
GF1 GF0
PD
LSB
IDL
SMOD
Duplica la velocidad de comunicación de la línea serie en los modos 1, 2 y 3.
GF1
Flag de propósito general.
GF0
Flag de propósito general.
PD
Activando este bit se entra en modo Power Down.
IDL
Activando este bit se entra en modo Idle.
El modo Power Down es prioritario sobre el Idle, en caso de activación
simultanea
Modo IDLE
En este modo de funcionamiento entramos cuando el µC ejecuta una instrucción
que setea el bit IDL del registro PCON (PCON.0). En este momento el
microcontrolador queda ralentizado, ya que la CPU no recibe la señal de reloj
como tal y como se pude comprobar en la figura debido al bloqueo que realiza la
puerta a la que está conectada esta señal proveniente del registro PCON.
figura:DIAGRAMA DE BLOQUES DE POWER DOWN E IDLE
El estado de la CPU se preserva en su totalidad. El puntero de la pila (SP), el
contador de programa (PC), la palabra de estado (PSW), el acumulador (ACC) y
el resto de registros mantienen sus valores durante el modo IDLE. Las patillas de
los puertos tienen estados lógicos que tenían en el instante en que fue activado el
modo IDLE, ALE y PSEN' mantienen un nivel lógico alto.
Existen dos maneras de salir del modo IDLE.
1. Mediante la activación de cualquier interrupción autorizada, de manera
que el bit IDL del registro PCON sea desactivado por harware. La
interrupción se atenderá y la próxima instrucción que se ejecute será la
siguiente a la instrucción RET I, que será secuencialmente, la siguiente a
la instrucción que puso el microcontrolador en el estado IDLE.
2. Mediante el RESET harware, que borra el bit IDL, reanudándose el
programa desde donde fue parado, es decir, en la instrucción siguiente a la
que llevo al µC a estado IDLE.
Modo POWER DOWN
Igual que anteriormente, al instrucción que activa PD en el registro PCON
(Véase figura anterior) es la última que se ejecuta. En este modo, se para la
generación de reloj del microcontrolador, con lo que se detienen todas las
funciones, pero la información sobre la RAM y los SFRs se mantienen. Las
patillas de los puertos de salida mantienen sus respectivos valores imagen de los
que presentan en sus respectivos registros del SFR. Las patillas ALE y PSEN'
permanecen a nivel bajo.
La única posibilidad de salir del modo POWER DOWN es con un RESET por
hardware.
Cuando estamos en POWER DOWN, la tensión de alimentación, puede
reducirse hasta 2V, ahora bien, se ha de tener cuidado y asegurar que esta tensión
no se reduzca antes de que entremos en el modo POWER DOWN y que debe
volver a su valor nominal antes que el modo POWER DOWN finalice.
Documentos relacionados
Descargar