Sie sind auf Seite 1von 33

1- ARQUITECTURA DE LA FAMILIA INTEL MCS-51

1.1- INTRODUCCION

La continua evolución tecnológica en el área Digital de la Electronica, ha permitido que las


funciones incluidas en los circuitos integrados sean cada vez mas potentes, rápidas y
confiables. Tal es el caso de los microprocesadores, que a medida que se lograban mayores
escalas de integración, se pudieron incluir en la misma pastilla generadores de reloj, memorias
de lectura/escritura, memorias de solo lectura, interfaces de entrada/salida, timers, P.L.L., etc.
Analizando el listado anterior de elementos, concluimos que en la actualidad logramos
computadores integrados en la misma pastilla a los que llamamos microcomputadores o
microcontroladores.

La familia de microcontroladores de 8 bits MCS-51 esta constituida, entre otros, por los
siguientes dispositivos:

Dispositivo Tecnología Memoria de Códigos sobre el Memoria de Datos sobre el


chip chip
8051 H-MOS 4 kbytes de ROM 128 bytes de RAM
8031 H-MOS ----- 128 bytes de RAM
8751H H-MOS 4 kbytes de ROM 128 bytes de RAM
80C51 CH-MOS 4 kbytes de EPROM 128 bytes de RAM
80C31 CH-MOS ----- 128 bytes de RAM
8052 H-MOS 8 kbytes de ROM 256 bytes de RAM
8032 H-MOS ----- 256 bytes de RAM

Toda esta familia esta basada en la arquitectura mostrada en la figura 2.1.


Los miembros mas nuevos de la familia, como el 8032 y el 8052, tienen mas memoria en el
chip que sus predecesores y disponen de un Timer/contador adicional. Este nuevo Timer
puede utilizarse como un timer, como un contador o para generar el baud rate necesario en la
transmisión o la recepción de datos a través de la puerta serie. Como Timer/contador puede
operar en dos modos, el modo auto recarga de 16 bits o en el modo captura de 16 bits como se
vera en la sección 2.5.3.
Las principales características de la familia MCS-51 son:

* Unidad Central de Procesamiento (CPU) de 8 bits.


* Circuiteria de reloj incorporado en el chip.
* 32 lineas de Entrada/Salida.
*64 kbytes de espacio de direccionamiento para memoria externa de datos.
* 64 kbytes de espacio de direccionamiento para memoria
externa de programa.
* 2 Timers/contadores de 16 bits (3 en el 8052 y el 8032).
* Estructura con 5fuentes de interrupción (6 en el 8032/52) y 2 niveles de prioridad
programables.
* Una puerta serie Full-duplex.

MICROPROCESADORES II Ing. Carlos G. Gil, Ing. Gustavo Ensinck 1


Fig. 1.1 Diagrama en bloque de la Arquitectura del MCS-51

MICROPROCESADORES II Ing. Carlos G. Gil, Ing. Gustavo Ensinck 2


1.2- ORGANIZACION DE MEMORIA

La familia MCS-51 reconoce en forma independiente la memoria de programa y la de datos.


Debido a que estos poseen la capacidad de tener memoria incorporada al chip es que tanto
programas como datos pueden ubicarse en forma externa o interna como se observa en las
figuras 1.2 y 1.3.
La capacidad máxima de direccionamiento para memoria externa de programa es de 60 o 64
kbytes para el 8051/31 según se utilicen o no los 4kbytes internos del chip, para el 8052 este
espacio sera de 56 o 64 kbytes por las mismas razones expuestas anteriormente. La capacidad
máxima de direccionamiento de memoria externa de datos es siempre 64 kbytes,
independientemente de los 128 o 256 bytes internos, que se manejan de forma diferente.
Además cada chip posee un gran numero de Registros de Funciones Especiales (SFR) que se
ubican en la memoria interna desde la dirección 80h hasta la FFh y que se describen a
continuación:

Símbolo Nombre Dirección


* A Acumulador E0h
* B Registro B F0h
* PSW Registro de Estado D0h
SP Puntero de Pila 81h
DPTR Puntero de Datos ( DPH, DPL ) 83h/82h
* P0 Puerta 0 80h
* P1 Puerta 1 90h
* P2 Puerta 2 A0h
* P3 Puerta 3 B0h
* IP Registro de Control de Prioridad de Interrupciones B8h
* IE Registro de Control de Habilitación de Interrupciones A8h
TMOD Registro de Control de Modo de Operación del Timer/Contador 89h
* TCON Registro de Control de los Timers/Contadores 88h
*+T2CON Registro de Control del Timer/Contador 2 C8h
TH0 Byte alto del Timer/Contador 0 8Ch
TL0 Byte bajo del Timer/Contador 0 8Ah
TH1 Byte alto del Timer/Contador 1 8Dh
TL1 Byte bajo del Timer/Contador 1 8Bh
+TH2 Byte alto del Timer/Contador 2 CDh
+TL2 Byte bajo del Timer/Contador 2 CCh
+RCAP2H Registro de Captura del Timer/Contador 2 (Byte alto) CBh
+RCAP2L Registro de Captura del Timer/Contador 2 (Byte bajo) CAh
* SCON Registro de Control de la Puerta Serie 98h
SBUF Buffer de datos de la Puerta Serie 99h
PCON Registro de Control de Potencia 87h

MICROPROCESADORES II Ing. Carlos G. Gil, Ing. Gustavo Ensinck 3


Todos los SFR indicados con un asterisco (*) son direccionables por bit o bytes; y todos los
que poseen el signo mas (+) pertenecen únicamente al 8052/32.

Fig. 1.1 Memoria de Programa

MICROPROCESADORES II Ing. Carlos G. Gil, Ing. Gustavo Ensinck 4


Fig. 1.3 Memoria de datos

Las funciones de los SFR se describen a continuación:

Acumulador A

El registro A es el mas utilizado por el repertorio básico de instrucciones (RBI). El 80% de las
operaciones lo utilizan como uno de sus operandos.

Registro B

El registro B es utilizado durante las operaciones de multiplicación y división. Para otras


operaciones puede utilizarse como un registro de propósitos generales.

Registro de Estado PSW

Este es el registro o la palabra de estado del procesador y la función de cada uno de sus bits es
la siguiente:

C AC F0 RS1 RS0 OV - P

Símbolo Posición Nombre y Significado

C PSW.7 Flag de Transporte (carry).


AC PSW.6 Flag de Transporte Auxiliar (para
Aritmética BCD - Es el transporte del
nibble menos significativo al mas
significativo).
F0 PSW.5 Flag cero. Disponible al usuario.
RS1 PSW.4
RS0 PSW.3 Bits de control para seleccionar el banco
de registros de trabajo. Los contenidos
de RS1 y RS0 habilitan al banco de
registros como sigue:
0,0 Banco de registros 0 (00h-07h)
0,1 Banco de registros 1 (08h-0Fh)
1,0 Banco de registros 2 (10h-17h)
1,1 Banco de registros 3 (18h-1Fh)
OV PSW.2 Flag de desborde (overflow).
- PSW.1 (reservado).

MICROPROCESADORES II Ing. Carlos G. Gil, Ing. Gustavo Ensinck 5


P PSW.0 Flag de Paridad par. Es "0" cuando el
numero de unos en el acumulador es par
o "1" en caso contrario.

Puntero de Pila SP

El puntero de pila es de 8 bits de longitud. Este es incrementado antes que el dato sea
almacenado en la ejecución de las instrucciones PUSH y CALL. El SP es inicializado en el
lugar 07h después del reset, pero puede ubicarse en cualquier lugar del área de memoria
RAM interna que posee el chip.

Puntero de datos DPTR

Este esta formado por un byte alto DPH y un byte bajo DPL. Su función especifica es la de
mantener una dirección de 16 bits. Este también puede considerarse como un registro de 16
bits o 2 registros independientes de 8 bits.

Registros de las puertas 0 a 3

P0, P1, P2, y P3, son los latches de los SFR de las puertas 0, 1, 2 y 3 respectivamente.

Buffer de datos de la puerta serie SBUF

El buffer de datos de la puerta serie, esta compuesto por dos registros separados, un registro
buffer de transmisión y un registro buffer de recepción. Cuando un dato es llevado a SBUF,
este es almacenado en el registro de transmisión desde donde será transmitido en forma serie;
cuando el dato es leído desde SBUF, este proviene desde el registro de recepción.

Registro timers

Los pares registros (TH0,TL0), (TH1,TL1) y (TH2,TL2) son los contadores de 16 bits para los
timers 0, 1 y 2 respectivamente.

Registros de captura (solo 8032/52)

El par registro (RCAP2H,RCAP2L) es el registro de captura para el timer 2 en el "modo


captura". En este modo, en respuesta a una transición de "1" a "0" en el pin T2EX, los
registros TH2 y TL2 son copiados en RCAP2H y RCAP2L. El timer 2 también posee un
modo de autorecarga de 16 bits y RCAP2H y RCAP2L mantiene el valor a recargar en el
timer en este modo. Ver modo captura sección 2.5.3.

Registros de Control

MICROPROCESADORES II Ing. Carlos G. Gil, Ing. Gustavo Ensinck 6


Los registros de funciones especiales IP, IE, TMOD, TCON, T2CON, SCON y PCON
contienen información de control y de estado para el sistema de interrupción, los timers y la
puerta serie.

1.3- PUERTAS DE ENTRADA/SALIDA

Las 4 puertas en el 8051 son bidireccionales. Cada una consta de un latch (Registro de
funciones especiales P0 hasta P3), un driver de salida y un buffer de entrada.
Los driver de salida de las puertas 0 y 2, y el buffer de entrada de la puerta 0, son utilizados en
el acceso a la memoria externa. En esta aplicación, la puerta 0 funciona como el byte bajo del
bus de direcciones multiplexado en el tiempo con el bus de datos. Por la puerta 2 se
exterioriza el byte alto de la dirección de memoria externa cuando esta es de 16 bits. Cuando
la dirección es de 8 bits la puerta 2 funciona en forma normal.
Los terminales de la puerta 3 y dos terminales de la puerta 1 del son multifuncionales. Estos
no solo son pines de entrada salida sino que también realizan funciones especiales que se
describen a continuación:

*P1.0 T2 (entrada externa al timer/contador2)


*P1.1 T2EX (disparo de captura/recarga del timer/contador2)
P3.0 RXD (entrada de la puerta serie)
P3.1 TXD (salida de la puerta serie)
P3.2 /INT0 (interrupción externa)
P3.3 /INT1 (interrupción externa)
P3.4 T0 (entrada externa del timer/contador0)
P3.5 T1 (entrada del timer/contador 1)
P3.6 /WR (habilitación de escritura en la memoria externa de datos)
P3.7 /RD (habilitación de lectura en la memoria externa de datos)

* P1.0 y P1.1 sirven a estas funciones solo en el 8052.


Estas funciones alternativas pueden ser activadas solo si el correspondiente bit en el SFR
contiene un 1.

1.3.1- Configuraciones de Entrada/Salida

La figura 1.4 muestra el diagrama básico funcional de un bit para cada una de las 4 puertas. El
latch (un bit en el SFR de la puerta) esta representado como un FF tipo D, el cual cargara un
valor desde el bus interno en respuesta a una señal de "escritura al latch" desde la CPU. La
salida Q del FF se conectará al bus interno a través de un buffer habilitado por la sen~al de
"lectura del latch" desde la CPU. El pin de la puerta se conectará al bus interno mediante el
buffer activado por la señal de "lectura del pin" desde la CPU. Algunas instrucciones que leen
una puerta activan la señal de "lectura del latch" y otras activan la señal de "lectura del pin"
(ver 1.3.4).

MICROPROCESADORES II Ing. Carlos G. Gil, Ing. Gustavo Ensinck 7


Como se muestra en la figura 1.4, los drivers de salida de las puertas 0 y 2, pueden volcar al
exterior 2 tipos de información dependiendo del valor de la señal "Control" emitida por la
CPU. Para los bits de la puerta 2 la información puede ser un bit de dirección (señal ADDR) o
la salida del latch. Para los bits de la puerta 0 la información puede ser un bit del bus de
direcciones multiplexado con un bit del bus de datos (señal ADDR/DATA) o la salida del
latch.
También como se muestra en la figura 1.4 para la puerta 3, si el bit del latch está en 1, luego el
nivel de salida en el pin P3.x estará fijado por la señal llamada "función de salida alternativa".
Las puertas 1, 2 y 3 tienen pull-ups internos. La puerta 0 tiene salida con drenaje abierto
(similar a colector abierto en tecnología bipolar). Cada línea E/S puede ser
independientemente utilizada como una entrada o como una salida. Las puertas 0 y 2 no
pueden ser utilizadas como de E/S para propósitos generales cuando está siendo utilizada
como bus de direcciones y datos. Para ser utilizada como una entrada, el bit del latch de la
puerta debe contener un 1, lo cual pone al corte los FETS de salida; luego, para las puertas 1,
2 y 3, el pin es fijado a 1 por el pull-up interno, pero puede ser llevado a 0 por una fuente
externa. La puerta 0 difiere en no tener pull-up interno. El FET de pull-up en la salida de la
puerta 0 es utilizado solo cuando la puerta esta emitiendo "unos" durante accesos a la
memoria externa. En otro caso el FET de pull-up está cortado. Consecuentemente las líneas de
P0 que están siendo utilizadas como salida son drenaje abierto. Escribiendo un 1 en el latch
deja ambos FETS cortados, de esta manera el pin queda flotante. De esta manera la puerta 0
puede ser utilizada como entrada de alta impedancia.
Debido a que las puertas 1, 2 y 3 tienen pull-ups internos fijos, son llamadas "puertas cuasi-
bidireccionales". Cuando están configuradas como entrada son fijadas en alto y la corriente
circulará cuando sea llevado externamente a "0". La puerta 0 por otra parte es considerada
"bidireccional" debido a que cuando se configura como entrada, está flotante.

MICROPROCESADORES II Ing. Carlos G. Gil, Ing. Gustavo Ensinck 8


Fig 1.4 Buffers E/S y Latches de las puertas del 8051

1.3.2- Como exteriorizar información a través de una puerta.

En la ejecución de una instrucción que modifica el valor del latch de una puerta el nuevo valor
no es capturado por el latch inmediatamente sino que lo hace en el último ciclo de maquina de
la instrucción, debido a un retardo provocado por sincronismos internos.
Cuando la salida de información genera un cambio de 0 a 1 en las puertas P1, P2 o P3, la
circuitería interna esta diseñada de manera tal que transistores de efecto de campo,
funcionando como pullup transitorios, proveen una mayor velocidad de transición aportando
corrientes del orden de los 30mA en tecnología HMOS.

1.3.3- Conectando y cargando una puerta.

Los buffers de salida de las puertas 1, 2 y 3 pueden manejar, cada uno, 4 entradas TTL (LS).
Estas puertas en versiones HMOS pueden ser manejadas por cualquier circuito TTL o NMOS.
Para el caso de HMOS y CHMOS se pueden conectar a salidas "colector abierto" o "drenaje
abierto", pero hay que notar que las transiciones de 0 a 1 no serán rápidas.
Los buffers de salida de la puerta 0 pueden manejar, cada uno, 8 entradas TTL (LS), ellas
requieren pullups externos para manejar entradas NMOS, excepto cuando están siendo usadas
como el bus de datos y direcciones.

1.3.4- Comportamiento de las puertas con algunas instrucciones.

Dentro del RBI hay instrucciones que permiten leer el pin o el latch correspondiente de las
puertas de salida. Las instrucciones que leen el latch son aquellas que están listadas a
continuación, cuando el operando destino es una puerta o un bit de una puerta, caso contrario
leerán el pin.

ANL (AND lógica ANL P1,A)


ORL (ORL lógico ORL P2,A)
XRL (OR-EX lógico XRL P3,A)
JBC (salte si el bit es igual a uno y lo borra JBC P1.1, label)
CPL (complemente un bit CPL P3.0)
INC (incrementa INC P2)
DEC ( decrementa DEC P1)
DJNZ (decremente y salte si no es cero DJNZ P3, label)
MOV Px.y,c (mover el bit de carry al bit y de la puerta x )
CLR Px.y (poner en cero el bit y de la puerta x)
SET Px.y (poner en uno al bit y de la puerta x)

MICROPROCESADORES II Ing. Carlos G. Gil, Ing. Gustavo Ensinck 9


El motivo de que lean el latch en lugar del pin, es para evitar posibles malinterpretaciones de
nivel de tensión en el pin. Por ejemplo, un bit de la puerta podría utilizarse para manejar la
base de un transistor. Cuando un 1 es escrito al bit, el transistor se satura. Si la CPU luego lee
el bit de la puerta en el pin, leerá la Vb (tensión en la base) del transistor e interpretará un
cero. Leyendo el latch en lugar del pin ingresará el valor correcto.

1.4- ACCESO A LA MEMORIA EXTERNA

El acceso a memoria externa se puede dividir en 2: 1- Acceso a memoria externa de programa


y 2- Acceso a memoria externa de datos.
Los accesos a memoria externa de programa utilizan la señal /PSEN (program store enable)
como la habilitación de lectura. Los accesos a memoria externa de datos utlizan /RD y /WR
(funciones alternativas de P3.7 y P3.6) para habilitar la memoria.
Las búsquedas desde memoria externa de programa siempre utilizan una dirección de 16 bits.
Los accesos a memoria externa de datos pueden usar direcciones de 16 bits (MOVX @DPTR)
o una dirección de 8 bits (MOVX @Ri).
Cuando se utiliza una dirección de 16 bits, el byte alto de la dirección sale por la puerta 2,
donde se mantiene durante todo el ciclo de lectura o escritura.
Durante este tiempo el latch de la puerta 2 (el SFR) no tiene que contener unos, y los
contenidos del SFR de la puerta 2, no son modificados. Si el ciclo de memoria externa no es
seguido inmediatamente por otro ciclo de memoria externa, los contenidos no perturbados del
SFR de la puerta 2 reaparecerán en el próximo ciclo.
Cuando se utiliza una dirección de 8 bits (MOVX @Ri), los contenidos del SFR de la puerta 2
permanecerán en los pines de la puerta 2 durante todo ciclo de memoria externa. Esto facilita
el paginado de la memoria.
En cualquier caso, el byte bajo de la dirección es multiplexado en el tiempo con el byte de
datos en la puerta 0. La señal ADDR/DATA maneja ambos FETs en los buffers de salida de la
puerta 0. Así, en esta aplicación los pines de la puerta 0 no son salidas con drenaje abierto y
no requieren pull-ups externos. La señal ALE (address latch enable) debería utilizarse para
capturar el byte de dirección en un latch externo. El byte de dirección es válido en la
transición negativa de ALE. Luego en un ciclo de escritura el byte de datos a escribir aparece
en la puerta 0 exactamente antes de que /WR sea activada y permanecerá allí hasta despues de
que /WR sea desactivada. En un ciclo de lectura, el byte entrante es aceptado en la puerta 0
exactamente antes que la habilitación de lectura sea desactivada.
Durante cualquier acceso en la memoria externa, la CPU escribe FFh al latch de la puerta 0 (el
SFR), borrando de esta manera cualquier información que pudiera haberse mantenido en el
SFR de la puerta 0.
Se accede a la memoria externa de programa de dos maneras:

1) Si la señal /EA (external access) está activada ó


2) Si el PC (program counter) contiene un número mayor que 0FFFh (ó 1FFFh en el 8052)

Esto requiere que versiones sin ROM tengan /EA cableada en bajo para habilitar los 4K mas
bajos (8K en el 8032) a ser buscados desde la memoria externa de programa.

MICROPROCESADORES II Ing. Carlos G. Gil, Ing. Gustavo Ensinck 10


1.4.1- PSEN

La señal de habilitación de lectura para busquedas externas es /PSEN. Cuando la CPU esta
accediendo a la memoria externa de programa, /PSEN se activa dos veces cada ciclo (excepto
durante una instrucción MOVX), aunque el byte buscado no se necesite en ambas
oportunidades en la instrucción actual. No confundir este señal con /RD, que cumple la misma
función pero para lectura de memoria externa de datos.

1.4.2-Superposicion de los espacios de direccionamiento de memoria externa de


programa y datos

En algunas aplicaciones es deseable ejecutar un programa desde la misma memoria que esta
siendo utilizada para almacenar datos. En el 8051, los espacios de memoria externa de datos y
programa pueden combinarse haciendo el producto lógico de /PSEN y /RD. Una AND de
estas dos señales produce una habilitación de lectura activa en bajo que puede utilizarse para
la memoria combinada. Ya que el ciclo de /PSEN es mas rapido que el ciclo de /RD, la
memoria externa necesita ser tan rápida como el ciclo de /PSEN.

1.5- TIMERS/CONTADORES

El 8051 tiene dos registros timers/contadores de 16 bits: Timer 0 y Timer 1. El 8052 tiene tres,
Timers 0, 1 y 2; y los tres pueden trabajar como timers o como contadores de eventos.
En la función "Timer", el registro es incrementado cada ciclo de maquina. De esta manera,
puede pensarse como contador de ciclos de maquina. Debido a que un ciclo de maquina tiene
12 periodos de reloj, la velocidad de la cuenta será 1/12 de la frecuencia del oscilador.
En la función "Contador", el registro es incrementado con el flanco negativo del pin de
entrada externa correspondiente, T0, T1 o T2 (en el 8052). En este caso toma dos ciclos de
maquina reconocer la transición de 1 a 0, por lo tanto la máxima velocidad de cuenta es 1/24
de la frecuencia del oscilador. No existe restricción sobre el ciclo de actividad de la señal de
entrada externa, pero para asegurar que un nivel dado sea muestreado al menos una vez antes
de que cambie, debería mantenerse por al menos un ciclo de maquina completo.
Además de la selección del timer o contador, el Timer 0 y el Timer 1 tienen cuatro modos de
operación. El timer 2 del 8052, tiene tres modos de operación: "captura", "auto-recarga" y
"generador de baud rate".

1.5.1- Timer 0 y Timer 1

Estos timers/contadores están presentes en el 8051 y en el 8052. La función del timer o


contador es seleccionada por los bits de control C/T del SFR TMOD. Estos dos timers, tienen
cuatro modos de operación los que se seleccionan por el par de bits M0 y M1 del registro
TMOD. Los modos 0, 1 y 2 son iguales para los dos timers. El modo 3 es diferente. A
continuación se describen los bits del TMOD.

MICROPROCESADORES II Ing. Carlos G. Gil, Ing. Gustavo Ensinck 11


REGISTRO TMOD

(MSB) (LSB)
GATE C/T M1 M0 GATE C/T M1 M0
TIMER 1 TIMER 0

GATE:
Control de compuerta cuando este en 1. El timer/contador "x" esta habilitado solo
mientras el pin INTx es alto y TRx (pin de control) es 1. Cuando este es 0 el Timer x
esta habilitado si el bit de control TRx es 1.
C/T:
Selector de timer o contador. En cero opera como timer (entrada desde el reloj
interno). En 1 la operacion es como contador (entrada desde el pin "Tx").
M1,M0:
0 0 Funciona como el timer de MCS 48 (modo 0), aqui TLx trabaja como divisor de
5 bits.
0 1 Contador/Timer de 16 bits (modo1). THx y TLx estan en cascada, no hay
divisor.
1 0 Contador timer de 8 bits con auto recarga (modo 2). THx mantiene un valor, el
cual sera recargado en TLx cada vez que exista overflow.
1 1 Timer 0:
TL0 es un timer contador de 8 bits controlado por los bits de control del timer 0.
TH0 es un timer de 8 bits controlado solo por los bits de control del timer 1
1 1 Timer 1:
Timer/contador 1 detenido.

REGISTRO TCON

(MSB) (LSB)
TF1 |TR1 TF0 TR0 IE1 IT1 IE0 IT0

TF1:
Flag de desborde del timer 1. Puesto en 1 por hardware cuando el timer/contador 1
desborda. Puesto en cero por hardware cuando el procesador pasa a ejecutar la rutina
de interrupción.
TR1:
Bit de puesta en marcha del timer 1. Puesto en 1/0 por programa para poner en
funcionamiento o detener el timer/contador.
TF0:

MICROPROCESADORES II Ing. Carlos G. Gil, Ing. Gustavo Ensinck 12


Flag de desborde del timer 0. Idem TF 1.

TR0:
Idem TR1.
IE1:
Flag de interrupción 1. Puesta en uno por hardwarwe cuando se detecta un flanco de
pedido de interrupcion ingresado por INT 1. Puesto en cero cuando la interrupción es
procesada.
IT1:
Bit de control de la interrupción 1. Puesta a 1/0 por programa para especificar si el
disparo de la interrupción externa, será por flanco de bajada o nivel bajo.
IE0:
Idem IE1.
IT0:
Idem IT1.

1.5.2- MODOS DE FUNCIONAMIENTO DE LOS TIMERS.

MODO 0

Poniendo el Timer 1 o el 0 en modo cero hace que se comporte como el Timer del 8048, el
cual es un contador de 8 bits, con un divisor de frecuencia de hasta modulo 32. Ver fig. 1.5.
En este modo, el registro del Timer es configurado como un registro de 13 bits. Debido a que
el contador recicla, cuando pasa por cero, coloca en uno el flag de interrupción TFx del
TCON. La entrada es habilitada cuando TRx = 1 y el GATE = 0 ó INTx = 1 (colocando
GATE = 1, permite al Timer ser controlado por la entrada externa INTx, para facilitar
mediciones de ancho de pulso). TRx es un bit de control en el SFR TCON, y GATE esta en el
SFR TMOD.
El registro de 13 bits esta compuesto por los 8 bits de THx y los 5 bits mas bajos de TLx. Los
3 bits superiores de TLx son ignorados. Colocando el flag de puesta en marcha TRx en 1, no
borra los registros.
El modo de operación 0 es igual para el Timer 0 y el Timer 1.

MICROPROCESADORES II Ing. Carlos G. Gil, Ing. Gustavo Ensinck 13


Fig. 1.5 Modo 0 del Timer/Contador 0 o 1

MODO 1

El Modo 1 es igual al Modo 0, excepto que el registro del Timer, funcionara con 16 bits.

MODO 2

El Modo 2 configura el registro del Timer como un contador de 8 bits (TLx), con recarga
automática, como se muestra en la figura 2.6. El desborde desde TLx no solo coloca en 1 a
TFx, sino que también recarga TLx con el contenido de THx, el cual es precargado por
programa. La operación de recarga deja a THx sin modificación.
El modo de operación 2 es valida para el Timer 0 y el Timer 1.

Fig. 16 Modo 2 Timer/Contador 0 o 1

MODO 3

El Timer 1 en modo 3 simplemente detiene la cuenta. El efecto es el mismo como el de poner


TR1 = 0.
El Timer 0 en modo 3, establece TL0 y TH0 como dos contadores separados. La lógica para el
modo 3 para el Timer 0 se muestra en la figura 1.7. TL0 utiliza los bit de control del Timer 0:
C/T, GATE, TR0, INT0 y TF0. TH0 es colocado en la función de Timer (contando ciclos de
maquina) y hace uso de los bits TR1 y TF1 del Timer 1.
El modo 3 se utiliza para aplicaciones que requieran un Timer o contador extra de ocho bits.
Con el Timer 0 en el modo 3, en el 8051 puede asemejarse a un chip que posee 3
Timers/contadores (4 para el 8052). Cuando el Timer 0 esta en modo 3, el Timer 1 puede ser
colocado en funcionamiento o detenido, ingresándolo o no en el modo 3; o bien puede ser

MICROPROCESADORES II Ing. Carlos G. Gil, Ing. Gustavo Ensinck 14


utilizado por la puerta serie como un generador de Baud Rate, o en cualquier aplicación que
no requiera interrupción.

Fig. 1.7 Modo 2 Timer/Contador 0 o 1

1.5.3- TIMER 2

El Timer 2 es un timer/contador de 16 bits, el cual pertenece solo al 8052. Como el timer 0 y


1, este también puede operar como un contador de eventos. Este es seleccionado por el bit
C/T2 en el SFR T2CON. Este timer tiene 3 modos de operación: "captura", "autocarga", y
"generador de Baud Rate", los cuales son seleccionados por los bits RCLK, TCLK y CP/RL2
del SFR T2CON.

REGISTRO T2CON.

TF2 EXF2 RCLK TCLK EXEN2 TR2 C/T2 CP/RL2

TF2:
Flag de desborde del timer 2, es puesto en uno cuando se produce desborde, debiendo
ponerse a cero por soft. TF2 no será puesto en 1 cuando RCLK = 1 o TCLK = 1.

EXF2:

MICROPROCESADORES II Ing. Carlos G. Gil, Ing. Gustavo Ensinck 15


Flag externo del timer 2. Se pone en uno cuando se produce una transición negativa en
T2EX y EXEN2 = 1. Cuando la interrupción del timer 2 esta habilitada, EXF2 = 1
permite que la CPU acceda a la rutina de servicio de la interrupcion. EXF2 debe ser
puesta a cero por soft.

RCLK:
Flag del reloj de recepción. Cuando es puesto en uno, causa que la puerta serie utilice
los pulsos de desborde del timer 2, como el reloj de recepción en los modos 1 y 3.
RCLK = 0 causa que el desborde del timer 1 sea utilizado como el reloj de recepción.

TCLK:
Flag del reloj de transmisión. Cuando es puesto en uno, hace que la puerta serie utilice
los pulsos de desborde del timer 2, como el reloj de transmisión en los modos 1 y 3.
RCLK = 0 causa que el desborde del timer 1 sea utilizado como el reloj de transmisión.

EXEN2:
Flag de habilitación externo del timer 2. En uno permite que una captura o recarga
ocurra como resultado de una transición negativa en T2EX, si el timer 2 no esta siendo
utilizado como reloj de la puerta serie. EXEN2 = 0 causa que el timer ignore los eventos
en T2EX.

TR2:
Control de puesta en marcha/detención del timer 2. TR2 = 1 pone el timer 2 en
funcionamiento.

C/T2:
Selección de contador o timer.
0 = timer interno (f osc. / 12)
1 =contador de eventos externos (disparado en el flanco negativo de T2EX)

CP/RL2:
Flag de captura/recarga. En uno, las capturas ocurrirán con las transiciones negativas de
T2EX si EXEN2 = 1. Cuando es cero, las autorecargas ocurrirán con el desborde del
timer 2 o con las transiciones negativas en T2EX cuando EXEN2 = 1. Si RCLK = 1 o
TCLK = 1, este bit se ignora y el timer es forzado a autorecarga por su desborde.

SELECCION DE LOS MODOS DE OPERACION.

RCLK + TCLK CP/RL2 TR2 MODO

0 0 1 auto recarga de 16 bits


modo 0.
0 1 1 captura de 16 bits
modo 1

MICROPROCESADORES II Ing. Carlos G. Gil, Ing. Gustavo Ensinck 16


1 X 1 generador de Baud Rate
modo 2
X X 0 detenido

En el modo captura hay dos opciones que se pueden seleccionar con el bit EXEN2 del
T2CON. Si EXEN2 = 0 el timer 2 es un timer o contador de 16 bits, el cual cuando se produce
un desborde coloca el bit TF2 en uno, de esta forma se puede utilizar para generar una
interrupción. Si EXEN2 = 1, el timer 2 trabaja en forma similar a la opción anterior, pero con
la característica adicional, que una transición de 1 a 0 en la entrada externa T2EX hace que el
valor actual en los registros del timer 2, TL2 y TH2, sean capturadas en los registros RCAP2L
y RCAP2H, respectivamente. Además la transición en T2EX produce que el bit EXF2 en
T2CON, sea puesto en uno y este al igual que TF2 pueda generar una interrupción. Ver fig
1.8.
En el modo de autorecarga, existen también dos opciones, las que se seleccionan mediante el
bit EXEN2 del T2CON. Si EXEN2 = 0, cuando el timer 2 desborda, no solo pone TF2 en uno
sino que también hace que los registros del timer 2 sean recargados con el valor de los
registros RCAP2H y RCAP2L y siga la cuenta. Los registros RCAP2H y RCAP2L son
precargados por programa.
Si EXEN2 = 1 el timer 2 hace lo anteriormente descripto, pero con la característica adicional
que una transición de 1 a 0 en la entrada externa T2EX, también disparara la recarga de los 16
bits y colocara en 1 a EXF2. Remitirse a figura 1.9.
El modo generador de Baud Rates se selecciona con RCLK = 1 y/o TCLK = 1 y será visto en
la descripción de la puerta serie.

MICROPROCESADORES II Ing. Carlos G. Gil, Ing. Gustavo Ensinck 17


Fig. 1.8 Timer 2 en Modo Captura

Fig. 1.9 Timer 2 en Modo Autorecarga

1.6- INTERFAZ SERIE

La puerta serie prevista en el microcomputador es Full Duplex, lo que significa que puede
transmitir y recibir simultáneamente. Posee un buffer receptor que le permite comenzar la
recepción de un segundo byte, sin que el byte recibido previamente haya sido leido desde el
registro de recepción (sin embargo si el primer byte no ha sido leido en el momento en que la
recepción del segundo byte termina, el primer byte se perdera).
A los registros de transmisión y recepción de la puerta serie se accede a través del registro de
funciones especiales SBUF. Escribiendo en SBUF se carga el registro de transmisión y
leyendo SBUF se accede al registro de recepción, físicamente separados. La puerta serie puede
operar en cuatro modos:

Modo 0: Los datos entran y salen a través de la salida RXD. Por


TXD saca el reloj de transmisión. Ocho bits son transmitidos y recibidos: ocho bits de datos
(el LSB primero). El Baud Rate es fijo y su valor es 1/12 de la frecuencia del oscilador.

Modo 1: Diez bits son transmitidos (a través del TXD) o recibidos (a través del RXD). Un bit
de comienzo (0), ocho bits de datos (el LSB primero) y un bit de parada. En la recepción el bit
de stop se carga en RB8 del SCON. El Baud Rate es variable.

MICROPROCESADORES II Ing. Carlos G. Gil, Ing. Gustavo Ensinck 18


Modo 2: Once bits son transmitidos (a través del TXD) o recibidos (a través del RXD). Un bit
de comienzo (0), ocho bits de datos (primero el LSB), un noveno bit de datos programable y
un bit de stop. En la transmisión al noveno bit del dato (TB8 del SCON) se le puede asignar
por ej. el valor cero o uno, o , el bit de paridad (P del PSW), el cual debería transferirse a TB8
para la transmisión. En recepción el noveno bit del dato se carga en RB8 del SCON, mientras
que el bit de stop es ignorado. El Baud Rate es programable a 1/32 o 1/64 de la frecuencia del
reloj.
Modo 3: Once bits son transmitidos (a través del TXD) o recibidos (a través del RXD). Un bit
de comienzo (0), ocho bits de datos (primero el LSB), un noveno bit de datos programable y
un bit de stop (1). En resumen el modo 3 es igual al modo 2, excepto en el Baud Rate, el cual
es variable.

En los cuatro modos, la transmisión es iniciada por alguna instrucción que use SBUF como
registro destino. La recepción es iniciada en modo cero por la condición RI = 0 y REN = 1 del
SCON. La recepcion se inicia en los otros modos por la llegada del bit de comienzo si REN =
1.
En los modos 2 y 3 se debe cargar TB8 antes de escribir SBUF.

REGISTRO SCON

SM0 SM1 SM2 REN TB8 RB8 TI RI

SM0,SM1:

Especifican el modo de operación.

00 : modo 0 registro de desplazamiento frec. del osc./12.


.
01 : modo 1 ocho bits UART variable (timer 1 ó 2)
10 : modo 2 nueve bits UART frec. del osc./32
o frec. del osc./64.
11 : modo 3 nueve bits UART variable (timer 1 ó 2)

SM2:
Habilita la característica para la comunicación entre procesadores en los modos 2 y 3.
En el modo 2 o 3, si SM2 es puesto en uno, luego RI no será activado si el noveno bit
de datos recibido (RB8) es = 0. En el modo uno, si SM2 = 1 luego RI no será activado
si no fue recibido un bit de stop valido. En el modo 0, SM2 deberá ser cero.

REN:
Habilita la recepción serie. Puesto en uno por programa para habilitar la recepción.
Cuando por soft es puesto en cero inhibe la recepción.

MICROPROCESADORES II Ing. Carlos G. Gil, Ing. Gustavo Ensinck 19


TB8:
Es el noveno bit del dato que será transmitido en los modos 2 y 3. Es colocado en uno o
cero por programa.
RB8:
En los modos dos y tres es el noveno bit del dato que fue recibido. En el modo uno, si
SM2 = 0, RB8 es el bit de stop que fue recibido. En modo 0 este bit no se utiliza.

TI:
Es el flag de interrupciones de transmisión. Puesto en uno por hardware al final del
tiempo del octavo bit en modo 0, o en el comienzo del bit de stop en los otros modos.
Este bit debe ser puesto a cero por programa.

RI:
Es el flag de interrupciones de recepción. Colocado en uno por hardware al final del
octavo bit en el modo 0, o en la mitad del bit de stop en los otros modos, este bit debe
ponerse a cero por programa.

1.6.1- Generación de Baud Rates

El baude rate en Modo 0 esta fijado por:

Modo 0 baud rate = (Frecuencia del oscilador)/12

El baud rate en Modo 2 depende del valor del bit SMOD del SFR PCON. Si SMOD = 0 (el
cual es su valor despues de un reset), el baud rate es la frecuencia del oscilador/64. Si SMOD
= 1, el baud rate es la frecuencia del oscilador/32.

Modo 2

baud rate = [ 2SMOD x (Frecuencia del oscilador)]/64

En el 8051, el baud rate en los modos 1 y 3 estan determinado por por la velocidad de
desborde del timer 1. En el 8052, estos baud rates pueden determinarse por el timer 1, o por el
timer 2 o ambos (por ejemplo uno para transmisión y otro para recepción)

Utilizando el timer 1 para generar baud rate

El baud rate, en los modos 1 y 3 esta determinado por la velocidad de desborde del timer 1 y
el valor de SMOD de la siguiente forma.

Modos 1,3

Baud rate =[ 2 SMOD x (Velocidad de desborde del timer 1)]/32

MICROPROCESADORES II Ing. Carlos G. Gil, Ing. Gustavo Ensinck 20


El pedido de interrupción de timer 1 deberia inhibirse en este caso. El timer puede
configurarse para operación como timer o contador y en cualquiera de sus tres modos de
funcionamiento. En la aplicación mas tipica es configurado como timer, en modo auto-recarga
(nibble alto de TMOD = 0010B). En este caso, el baud rates esta dado por la formula:

Modos 1 y 3
2 SMOD Frecuencia del oscilador
Baud Rate = ------------ X ------------------------
32 12 x [256-(TH1)]

Se pueden asegurar baud rates muy bajos con el timer 1 dejando las interrupciones de timer 1
habilitadas y configurando el timer para funcionar como un timer de 16 bits (nibble alto del
TMOD = 0001B), y utilizando la interrupción del timer 1 para hacer una recarga de los 16 bits
por programa, la tabla siguiente da los baud rates obtenidos con el timer 1

TIMER 1
BAUD RATE FOSC SMOD C/F MODO VALOR DE RECARGA

MODO 0 MAX:1MHZ 12MHZ X X X X


MODO 2 MAX:375K 12MHZ 1 X X X
MODOS 1,3 62,5K 12MHZ 1 0 2 FFH
19,2K 11,O59 1 0 2 FDH
9,6K 11,059 0 0 2 FDH
4,8K 11,059 0 0 2 FAH
2,4K 11,059 0 0 2 F4H
1,2K 11,059 0 0 2 E8H
137,5 11,986 0 0 2 1DH
110 6MHZ 0 0 2 72H
110 12MHZ 0 0 1 FEEBH

Utilizando el timer 2 para generar baud rates

En el 8052, el timer 2 es seleccionado como generador de baud rates colocando en 1 TCLK


y/o RCLK del SFR T2CON. Notar que el baud rate de transmisión y el de recepción puede ser
simultáneamente diferentes. Colocando en 1 RCLK y/o TCLK pone automáticamente al timer
2 en su modo de generador de baud rates, como se muestra la figura 2.10. Este modo es
similar al modo auto recarga, es decir, que cuando TH2 desborda, causa que los registros del
timer 2 sean recargados con el valor de 16 bits de los registros RCAP2H y RCAP2L, los
cuales son precargados por programa.

MICROPROCESADORES II Ing. Carlos G. Gil, Ing. Gustavo Ensinck 21


Ahora, el baud rate en los modos 1 y 3 esta determinado por la velocidad de desborde del
timer 2 como sigue:

Modos 1,3

Baud Rate = ( Velocidad de desborde del Timer 2)/16

El timer puede configurarse como timer o como contador. En las aplicaciones mas tipicas es
configurado para operar como timer (C/T2 = 0). La operación "TIMER" para el timer 2 es un
poco diferente cuando esta siendo utilizado como generador de baud rate. Normalmente,
debería incrementarse con cada ciclo de maquina ( a la frecuencia de oscilación / 12 ). Como
un generador de baud rate, sin embargo, se incrementa en cada estado, es decir a la frecuencia
de oscilador / 2. En este caso el baud rate viene dado por la formula:

Modos 1,3
( Frecuencia del Oscilador )
Baud Rate = -----------------------------------
32 x [65536 - (RCAP2H,RCAP2L)]

El timer 2 como generador de baud rate se muestra en la fig. 2.10. Esto es solo valido si
RCLK + TCLK = 1. Notar que un ciclo completo en TH2 no coloca TF2 en 1 y no generara
una interrupción. Por lo tanto, la interrupción del timer 2 no tiene que inhibirse cuando el
timer 2 esta trabajando en este modo. Notar tambien, que si EXEN2 es = 1, una transición de
1 a 0 en T2EX colocara en 1 EXF2 pero no causara una recarga desde (RCAP2H,RCAP2L0 a
(TH2,TL2). De esta forma cuando el timer 2 se utiliza como un generador de baud rate, T2EX
puede emplearse como un línea extra de pedidos de interrupciones externas si se desea.
Debería notarse que cuando el timer 2 esta funcionando (TR2 = 1) en función "TIMER" como
generador de baud rate, no debería leerse o escribirse en TH2 o TL2. Bajo estas condiciones el
timer esta siendo incrementado en cada estado, y los resultados de una lectura o escritura
puede no ser exactos. Los registros RCAP2 pueden leerse, pero no escribirse, debido a que
una escritura podría solapar una recarga y causar errores de escritura y/o recarga. En este caso
se debe proceder a detener el timer 2 (TR2=0) antes de acceder al timer o a los registros
RCAP2.

MICROPROCESADORES II Ing. Carlos G. Gil, Ing. Gustavo Ensinck 22


Fig. 1.10 Timer 2 en Modo Generador de Baud Rate

1.7- INTERRUPCIONES

El 8051 posee 5 fuentes de interrupciones y el 8052 tiene 6. Estas son mostradas en la figura
1.11.
Las interrupciones externas INT0 e INT1 pueden ser activadas por nivel o por flanco
dependiendo del estado de los bits IT0 e IT1 del registro TCON. Los flags que realmente
generan estas interrupciones son IE0 e IE1 del TCON. Cuando se produce una interrupción
externa, el flag correspondiente es limpiado por hardware cuando se accede a la rutina de
servicio, solo si la interrupción fue activada por flanco. Si la interrupción fue activada por
nivel, la fuente de pedido externa controlara el flag de pedido en lugar del hardware del chip.
Las interrupciones de timer 0 y el 1 son generadas por TF0 y TF1, las cuales son puestas en 1
por un desborde en sus respectivos registros timer/contadores. Cuando se genera una
interrupción del timer, el flag que la genero es desactivado por el hardware del chip cuando se
accede a la rutina de servicio.
Las interrupciones de la puerta serie son generadas por la OR lógica de RI y TI. Ninguno de
estos flags son puestos a cero por hardware. En efecto, la rutina de servicio normalmente
tendrá que determinar si fue RI o TI quien genero la interrupción y el bit que corresponda
deberá ser desactivado por programa.
En el 8052, la interrupción del timer 2 es generada por la OR lógica de TF2 y EXF2. Ninguno
de estos flags es borrado por el hardware, por lo que la rutina de servicio tendrá que
determinar si TF2 o EXF2 fue quien genero la interrupción y el correspondiente bit tendrá que
ser borrado por programa.

MICROPROCESADORES II Ing. Carlos G. Gil, Ing. Gustavo Ensinck 23


Todos los bits que generan interrupciones pueden ser colocados en 1 o en 0 por programa, con
el mismo resultado que si hubieran sido puestas por hardware. Esto permite que las
interrupciones puedan ser generadas o canceladas (interrupciones pendientes) por programa.
Cada una de las fuentes de interrupción pueden individualmente habilitarse o inhibirse
colocando en 1 o en 0 el bit correspondiente del SFR IE (interrupt enable). Note que IE
contiene un bit de inhibición global, EA, el cual inhibe todas las interrupciones.

Registro IE

MSB LSB
EA * ET2 ES ET1 EX1 ET0 EX0

EA:
Inhibe todas las interrupciones. Si EA=0, ninguna interrupción será reconocida. Si
EA=1 cada fuente de interrupción es individualmente habilitada o inhibida poniendo en
1 o 0 su bit de habilitación.

ET2:
Habilita o inhibe la interrupción de captura/desborde deltimer 2. Si ET2=0 la
interrupción esta deshabilitada.

ES:
Habilita o inhibe la interrupción de la puerta serie. Si ES=0 inhibe la interrupción.

ET1:
Habilita o inhibe la interrupción por desborde del timer 1. Si ET1=0 inhibe la
interrupción.

EX1:
Habilita o inhibe la interrupción externa 1. Si EX1=0 inhibe la interrupción

ET0:
Habilita o inhibe la interrupción por desborde del timer 0. Si ET0=0 inhibe la
interrupción.
EX0:
Habilita o inhibe la interrupción externa 0. Si EX0=0 inhibe la interrupción.

MICROPROCESADORES II Ing. Carlos G. Gil, Ing. Gustavo Ensinck 24


Fig. 2.11 Fuentes de Interrupción del MCS-51

1.7.1 - Estructura de Prioridades

Cada fuente de interrupción también puede programarse en uno de los dos niveles de
prioridades posibles, colocando en 1 o en 0 un bit del SFR IP. Una interrupción de baja
prioridad puede ser interrumpida por una interrupción de mayor prioridad, pero no por otra
fuente de interrupción de la misma prioridad. Una interrupción de alta prioridad no puede ser
interrumpida por otra fuente de interrupción.

REGISTRO IP

- - PT2 PS PT1 PX1 PT0 PX0

PT2:
Define el nivel de prioridad de las interrupciones del timer 2. PT2=1 nivel de prioridad
alto
PS:
Define el nivel de prioridad de las interrupciones de la puerta serie. PS=1 nivel de
prioridad alto.
PT1:
Define el nivel de prioridad de las interrupciones del timer1. PT=1 nivel de prioridad
alto.

MICROPROCESADORES II Ing. Carlos G. Gil, Ing. Gustavo Ensinck 25


PX1:
Define el nivel de prioridad de las interrupciones externas 1. PX=1 nivel de prioridad
alto.
PT0:
Define el nivel de prioridad de las interrupciones del timer 0 PT0=1 nivel de prioridad
alto.
PX0:
Define el nivel de prioridad de las interrupciones externas 0 PX0=1 nivel de prioridad
alto.

Si dos pedidos con niveles de prioridad diferentes se reciben simultáneamente, el pedido


correspondiente al nivel de mayor prioridad es al que se le da el servicio.
Si pedidos con el mismo nivel de prioridad se reciben simultáneamente, una secuencia de
elección (polling) interna determina a que pedido se le dará servicio. Así dentro de cada nivel
de prioridad hay una segunda estructura de prioridades prefijadas listadas, a continuación.

FUENTE NIVEL DENTRO DE LA PRIORIDAD


IE0 MAS ALTO
TF0
IE1
TF1
RI+TI
TF2+EXF2 MAS BAJA

Tener presente que la estructura de "Nivel dentro de la prioridad" es utilizada solo para
resolver "pedidos simultáneos del mismo nivel de prioridad".

1.7.2 - Procesamiento de las interrupciones

Los flags de interrupciones son muestreados en cada ciclo de maquina. Las muestras son
evaluadas durante el siguiente ciclo de maquina. Si uno de los flags estuvo en la condición 1
en el ciclo anterior, en el ciclo presente se detecta y el sistema de interrupciones generara
un LCALL a la cabeza de la rutina de servicio correspondiente, siempre y cuando este LCALL
generado por hardware no este bloqueado por algunas de las siguientes condiciones:

1- Una interrupción de igual o mayor prioridad que este aun en proceso.


2- El ciclo actual no es el ultimo ciclo en la ejecución de la instrucción.
3- La instrucción en ejecución es RETI o cualquier acceso a los registros IP o IE.

Cualquiera de estas tres condiciones bloquean la generación del LCALL a la rutina de servicio
de la interrupción. La condición 2 asegura que la instrucción en ejecución será completada
antes de saltar a cualquier rutina de servicio. La condición 3 asegura que si la instrucción en
proceso es RETI o cualquier acceso a IE o IP, al menos una instrucción mas será ejecutada
antes que cualquier interrupción sea aceptada.

MICROPROCESADORES II Ing. Carlos G. Gil, Ing. Gustavo Ensinck 26


El ciclo de evaluación es repetido en cada ciclo de maquina, y los valores elegidos son los que
estuvieron presentes en el ciclo de maquina anterior.
El hecho de que el flag de interrupciones estuvo una vez activo pero no se le dio servicio por
algunas de las condiciones de bloqueo no es recordado.
El procesador reconoce un pedido de interrupción ejecutando un LCALL generado por
hardware a la rutina de servicio correspondiente. En algunos casos, esto también limpia el flag
que genero la interrupción y en otros casos no. Por ejemplo no limpia los flags de la puerta
serie o del Timer 2. Esto tiene que hacerse en el programa del usuario. Limpia un flag de
interrupción externa (IE0 o IE1) solo si esta fue activada por flanco. El LCALL generado por
hardware almacena el contenido del contador de programa en la pila de datos (pero no
salvaguarda el PSW) y recarga el PC con una dirección que depende de la fuente de
interrupción que debe ser atendida como se muestra a continuación.

Fuente Dirección del vector

IE0 0003H
TF0 000BH
IE1 0013H
TF1 001BH
RI+TI 0023H
TF2+EXF2 002BH

La ejecución de la rutina de servicio toma lugar desde esas locaciones hasta que la instrucción
RETI es encontrada. La instrucción RETI le informa al procesador que esa rutina de
interrupción no esta mas en proceso, luego extrae los 2 bytes superiores de la pila y los carga
en el PC. La ejecución del programa interrumpido continua desde donde fue abandonado.
Una simple instrucción RET podría también haber regresado la ejecución al programa
interrumpido, pero dejaría al sistema de control de interrupciones pensando que una
interrupción esta aun en proceso.

Interrupciones Externas

Las fuentes de interrupción externas pueden programarse para activarse por flanco o por nivel,
poniendo en 1 o en 0 el bit IT0 e IT1 del registro TCON. Si ITx es igual a 0, la interrupción
externa "x" es disparada por un nivel bajo detectado en el pin INTx. Si ITx es igual a 1, la
interrupción externa "x" es disparada por el flanco negativo. En este modo, si muestras
sucesivas del pin INTx muestran un valor alto en un ciclo y un valor bajo en el próximo el
flag de pedido de interrupción IEX del TCON se pondrá en 1 y pedirá la interrupción.
Debido a que los pines de interrupción externos son muestreados una vez en cada ciclo de
maquina, una entrada en alto o en bajo debería mantenerse al menos 12 periodos de reloj para
asegurar su detección. Si la interrupción externa es disparada por flanco, la fuente externa
tiene que mantener el pin de pedido de interrupción en alto por lo menos un ciclo, y luego
mantenerlo en bajo un ciclo mas para asegurar que la transición sea detectada y así el flag de

MICROPROCESADORES II Ing. Carlos G. Gil, Ing. Gustavo Ensinck 27


pedido de interrupción IEx sea colocado en 1. En este caso IEx será automáticamente
limpiado por la CPU cuando se acceda a la rutina de servicio.
Si la interrupción externa es activada por nivel, la fuente externa tiene que mantener el pedido
activo hasta que la interrupción pedida sea detectada. Luego tiene que desactivar el pedido
antes que la rutina de servicio de la interrupción finalice, sino otra interrupción se generara.

Tiempo de Respuesta

Los niveles en INT0 e INT1 son invertidos y capturados en IE0 e IE1 en cada ciclo de
maquina. Los valores no son tenidos en cuenta por la circuiteria hasta el próximo ciclo de
maquina.
Si un pedido esta activo y las condiciones son correctas para que sea reconocido, se genera por
hardware un llamado a subrutina a la dirección de la rutina de servicio.
Este llamado ocupa 2 ciclos de maquina, de esta manera un mínimo de 3 ciclos de maquina
completos pasan entre la activación de un pedido de interrupción externa y la ejecución de la
primera instrucción de la rutina de servicio.
Un tiempo de respuesta mas largo resultaría si el pedido esta bloqueado por alguna de las 3
condiciones listadas anteriormente. Si una interrupción con un nivel de prioridad mayor o
igual esta en proceso, el tiempo de espera adicional obviamente dependerá de la naturaleza de
la rutina de servicio en ejecución. Si la instrucción que se esta ejecutando no esta en su ciclo
final, el tiempo de espera adicional no puede ser mayor a 3 ciclos, ya que las instrucciones
mas largas (MUL y DIV) tardan solo 4 ciclos, y si la instrucción es RETI o un acceso a IP o
IE, el tiempo de espera adicional no puede ser mayor a 5 ciclos (un máximo de un ciclo mas
para completar la instrucción en proceso, mas 4 ciclos para completar la próxima instrucción
si es MUL o DIV).
De esta forma en un sistema con una solo interrupción el tiempo de respuesta es siempre
mayor a 3 ciclos y menor que 9 ciclos.

1.7.3- Operación Paso a Paso (single step)

La estructura de interrupciones del 8051 permite la ejecución paso a paso por medio de un
programa elemental. Como se dijo previamente un pedido de interrupción no se atenderá
mientras una interrupción de igual nivel de prioridad este aun en proceso, ni se atenderá
después de RETI hasta que al menos una instrucción del programa sea ejecutada. Así, una vez
que se ha ingresado a una rutina de interrupción, no se puede volver a ingresar hasta que al
menos una instrucción del programa interrumpido sea ejecutada. Una aplicación de esta
característica es la operación paso a paso. Para esto se debe programar una de las
interrupciones externas (por ejemplo INT0) activada por nivel. La rutina de servicio para la
interrupción terminara con el siguiente código:

jnb p3.2,$ ;espere aquí hasta que el pedido vaya a alto.

jb p3.2,$ ;ahora espere aquí hasta que vaya a bajo.

MICROPROCESADORES II Ing. Carlos G. Gil, Ing. Gustavo Ensinck 28


reti ;vuelva y ejecute una instrucción.

Ahora si el pin INT0, el cual corresponde a P3.2, es normalmente mantenido en bajo, la CPU
ira directamente a la rutina de interrupción externa 0 y permanecerá allí hasta que INT0 sea
pulsada (desde bajo a alto y luego a bajo otra vez).
Luego ejecutara RETI, volverá al programa del usuario, ejecutara una instrucción e
inmediatamente ingresara otra vez a la rutina de interrupción externa 0 para esperar el
próximo pulso en P3.2. Una instrucción del programa de usuario es ejecutada cada vez que se
pulsa P3.2.

1.8- RESET

La entrada de reset es el pin RST, el cual es la entrada a un dispositivo disparador de Schmitt.


Un reset es ejecutado manteniendo en alto el pin RST por al menos 2 ciclos de maquina (24
periodos del oscilador), mientras el oscilador este funcionando. La CPU responde ejecutando
un reset (puesta en condiciones iniciales) interno. También configura como entrada los pines
ALE y PSEN (ellos son cuasi-bidireccionales). El reset interno es ejecutado durante el
segundo ciclo en el cual RST es alto y es repetido cada ciclo hasta que RST vaya a un valor
bajo.
El reset deja los registros internos con los siguientes valores:

Registros Contenidos

PC 0000H
A 00H
B 00H
PSW 00H
SP 07H
DPTR 0000H
P0-P3 FFH
IP(8051) XXX00000B
IP(8052) XX000000B
IE(8051) 0XX00000B
IE(8052) 0X000000B
TMOD 00H
TCON 00H
T2CON (SOLO 8052) 00H
TH0 00H
TL0 00H
TH1 00H
TL1 00H
TH2 (sólo en 8052) 00H
TL2 (sólo en 8052) 00H
RCAP2H (sólo en 8052) 00H
RCAP2L (sólo en 8052) 00H

MICROPROCESADORES II Ing. Carlos G. Gil, Ing. Gustavo Ensinck 29


SCON 00H
SBUF INDETERMINADO
PCON (VERSIONES HMOS) 0XXXXXXXB
PCON (VERSIONES CHMOS) 0XXX0000B

La RAM interna no es afectada por el reset. Cuando el chip es alimentado, el contenido de la


RAM es indeterminado a menos que este regresando de un modo de consumo reducido.

1.8.1- POWER ON RESET

Se puede obtener un reset automático cuando Vcc se conecta al pin RST a través de un
capacitor de 10uF y una resistencia de 8.2k a Vss como se muestra en la figura 1.12

Fig. 1.12 Circuito de Reset

1.9- MODOS DE OPERACION A POTENCIA REDUCIDA

En aplicaciones donde el consumo de potencia es critico, la versión CHMOS provee modos de


operación con potencia reducida como una característica standard.

1.9.1- Modos de potencia reducida en CHMOS

Las versiones CHMOS tienen 2 modos de potencia reducida, el modo IDLE y POWER
DOWN. La entrada a través de la cual la alimentación auxiliar (Back up) es administrada
durante estas operaciones es Vcc. La figura 1.13 muestra la circuiteria interna la cual
implementa estas características. En el modo IDLE (IDL=1), el oscilador continua
funcionando y los bloques de interrupción, la puerta serie, y los timers continúan funcionando,

MICROPROCESADORES II Ing. Carlos G. Gil, Ing. Gustavo Ensinck 30


pero la señal de reloj es bloqueada para la CPU. En el modo POWER DOWN (PD=1) el
oscilador es detenido. Los 2 modos son activados colocando en 1 los bits correspondientes del
SFR PCON. La dirección de este registro es 87H.

Registro PCON

SMOD - - - GF1 GF0 PD IDL

SMOD:
Bit de baud rate doble cuando este bit es 1, el timer 1 es utilizado para generar el
baud rate y la puerta serie puede ser utilizada en los modos 1, 2 y 3.

GF1:
Flag de propósitos generales.

GF0:
Flag de propósitos generales.

PD:
Bit de modo POWER DOWN. PD=1 activa la operacion Power Down.

IDL:
Bit de modo IDLE. IDL=1 activa la operacion Idle.

Si PD=1 y simultáneamente IDL=1, la operación ejecutada será Power Down.

MICROPROCESADORES II Ing. Carlos G. Gil, Ing. Gustavo Ensinck 31


Fig. 2.13 Hardware del modo Power Down e Idle

1.9.2- Modo IDLE

Una instrucción que ponga en 1 PCON.0 causa que sea la ultima instrucción ejecutada antes
de ir al modo IDLE. En este modo la señal de reloj interna es bloqueada a la CPU, pero no a
las interrupciones, timers, y puertas series. El estado de la CPU es preservado completamente,
el SP, PC, PSW, A y todos los otros registros mantienen sus datos. Los pines de las puertas
mantienen el estado lógico que tenían antes de ingresar al modo IDLE. ALE y PSEN se
mantienen en el nivel lógico alto.
Hay dos caminos para finalizar el modo IDLE. La activación de cualquier interrupción
habilitada causara que PCON.0 sea limpiado por hardware, terminando el modo IDLE. A la
interrupción se le dara servicio y siguiendo a RETI la próxima instrucción a ejecutarse será la
siguiente a la instrucción que puso al dispositivo en modo IDLE.
Los bits flags GF1 y GF0 pueden utilizarse para dar una indicación si una interrupción ocurrió
durante operación normal o durante un IDLE. Por ejemplo, una instrucción que activa IDLE
puede colocar en uno GF1 y/o GF0. Cuando IDLE sea terminado por una interrupción, la
rutina de servicio de la interrupción puede examinar estos flags.
El otro camino para terminar el modo IDLE es por un reset por hardware. Debido a que el
oscilador esta aun funcionando, el reset por hardware necesita mantenerse activo por solo dos
ciclos de maquina (24 periodos del oscilador) para completar el reset.

1.9.3- Modo POWER DOWN

Una instrucción que pone en 1 a PCON.1 causa que sea la ultima instrucción ejecutada antes
de ir al modo Power Down. En este modo el oscilador del chip es detenido. Con el reloj

MICROPROCESADORES II Ing. Carlos G. Gil, Ing. Gustavo Ensinck 32


congelado, todas las funciones son detenidas, pero la RAM interna y los SFR son preservados.
Los pines de las puertas presentan los valores mantenidos por sus respectivos SFRs. ALE y
/PSEN son puestos en bajo.
La única forma de salir del modo POWER DOWN, es por medio de un reset por hardware.
Reset redefine todos los SFRs pero no cambia la RAM interna.
En el modo de operación Power Down, Vcc puede reducirse para minimizarse el consumo de
potencia. Debe tenerse cuidado para asegurar que Vcc no sea reducido antes de que se ingrese
al modo Power Down, y que el Vcc original sea restablecido a su nivel de operación normal,
antes de que el modo POWER DOWN sea terminado. El reset que finaliza Power Down,
también libera el oscilador. El reset no debería activarse antes de que Vcc sea restablecido a
su nivel de operación normal, y debe mantenerse activo suficiente tiempo para permitir que el
oscilador funcione nuevamente y se estabilice (normalmente < 10 mseg).-

MICROPROCESADORES II Ing. Carlos G. Gil, Ing. Gustavo Ensinck 33

Das könnte Ihnen auch gefallen