Anda di halaman 1dari 33

1- ARQUITECTURA DE LA FAMILIA INTEL MCS-51

1.1- INTRODUCCION
La continua evolucin tecnolgica en el rea Digital de la Electronica, ha permitido que las
funciones incluidas en los circuitos integrados sean cada vez mas potentes, rpidas y
confiables. Tal es el caso de los microprocesadores, que a medida que se lograban mayores
escalas de integracin, 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 Tecnologa
8051
8031
8751H
80C51
80C31
8052
8032

H-MOS
H-MOS
H-MOS
CH-MOS
CH-MOS
H-MOS
H-MOS

Memoria de Cdigos sobre el


chip
4 kbytes de ROM
----4 kbytes de ROM
4 kbytes de EPROM
----8 kbytes de ROM
-----

Memoria de Datos sobre el


chip
128 bytes de RAM
128 bytes de RAM
128 bytes de RAM
128 bytes de RAM
128 bytes de RAM
256 bytes de RAM
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
transmisin o la recepcin de datos a travs 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 seccin 2.5.3.
Las principales caractersticas 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 interrupcin (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

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

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

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 mxima de direccionamiento para memoria externa de programa es de 60 o 64
kbytes para el 8051/31 segn 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
mxima 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.
Adems cada chip posee un gran numero de Registros de Funciones Especiales (SFR) que se
ubican en la memoria interna desde la direccin 80h hasta la FFh y que se describen a
continuacin:
Smbolo
* A
* B
* PSW
SP
DPTR
* P0
* P1
* P2
* P3
* IP
* IE
TMOD
* TCON
*+T2CON
TH0
TL0
TH1
TL1
+TH2
+TL2
+RCAP2H
+RCAP2L
* SCON
SBUF
PCON

Nombre
Acumulador
Registro B
Registro de Estado
Puntero de Pila
Puntero de Datos ( DPH, DPL )
Puerta 0
Puerta 1
Puerta 2
Puerta 3
Registro de Control de Prioridad de Interrupciones
Registro de Control de Habilitacin de Interrupciones
Registro de Control de Modo de Operacin del Timer/Contador
Registro de Control de los Timers/Contadores
Registro de Control del Timer/Contador 2
Byte alto del Timer/Contador 0
Byte bajo del Timer/Contador 0
Byte alto del Timer/Contador 1
Byte bajo del Timer/Contador 1
Byte alto del Timer/Contador 2
Byte bajo del Timer/Contador 2
Registro de Captura del Timer/Contador 2 (Byte alto)
Registro de Captura del Timer/Contador 2 (Byte bajo)
Registro de Control de la Puerta Serie
Buffer de datos de la Puerta Serie
Registro de Control de Potencia

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

Direccin
E0h
F0h
D0h
81h
83h/82h
80h
90h
A0h
B0h
B8h
A8h
89h
88h
C8h
8Ch
8Ah
8Dh
8Bh
CDh
CCh
CBh
CAh
98h
99h
87h

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

Fig. 1.3 Memoria de datos


Las funciones de los SFR se describen a continuacin:
Acumulador A
El registro A es el mas utilizado por el repertorio bsico 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 multiplicacin y divisin. Para otras
operaciones puede utilizarse como un registro de propsitos generales.
Registro de Estado PSW
Este es el registro o la palabra de estado del procesador y la funcin de cada uno de sus bits es
la siguiente:

AC F0 RS1 RS0 OV

Smbolo

Posicin

Nombre y Significado

C
AC

PSW.7
PSW.6

F0
RS1
RS0

PSW.5
PSW.4
PSW.3

Flag de Transporte (carry).


Flag de Transporte Auxiliar (para
Aritmtica BCD - Es el transporte del
nibble menos significativo al mas
significativo).
Flag cero. Disponible al usuario.

OV
-

PSW.2
PSW.1

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

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)
Flag de desborde (overflow).
(reservado).

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 ejecucin de las instrucciones PUSH y CALL. El SP es inicializado en el
lugar 07h despus 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 funcin especifica es la de
mantener una direccin de 16 bits. Este tambin 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 transmisin y un registro buffer de recepcin. Cuando un dato es llevado a SBUF,
este es almacenado en el registro de transmisin desde donde ser transmitido en forma serie;
cuando el dato es ledo desde SBUF, este proviene desde el registro de recepcin.
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 transicin de "1" a "0" en el pin T2EX, los
registros TH2 y TL2 son copiados en RCAP2H y RCAP2L. El timer 2 tambin 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 seccin 2.5.3.
Registros de Control

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

Los registros de funciones especiales IP, IE, TMOD, TCON, T2CON, SCON y PCON
contienen informacin de control y de estado para el sistema de interrupcin, 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 aplicacin, 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 direccin de memoria externa cuando esta es de 16 bits. Cuando
la direccin 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 tambin realizan funciones especiales que se
describen a continuacin:
*P1.0
*P1.1
P3.0
P3.1
P3.2
P3.3
P3.4
P3.5
P3.6
P3.7

T2 (entrada externa al timer/contador2)


T2EX (disparo de captura/recarga del timer/contador2)
RXD (entrada de la puerta serie)
TXD (salida de la puerta serie)
/INT0 (interrupcin externa)
/INT1 (interrupcin externa)
T0 (entrada externa del timer/contador0)
T1 (entrada del timer/contador 1)
/WR (habilitacin de escritura en la memoria externa de datos)
/RD (habilitacin 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 bsico 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 seal de "escritura al latch" desde la CPU. La
salida Q del FF se conectar al bus interno a travs 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 seal de "lectura del pin" desde la CPU. Algunas instrucciones que leen
una puerta activan la seal de "lectura del latch" y otras activan la seal de "lectura del pin"
(ver 1.3.4).

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

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 informacin dependiendo del valor de la seal "Control" emitida por la
CPU. Para los bits de la puerta 2 la informacin puede ser un bit de direccin (seal ADDR) o
la salida del latch. Para los bits de la puerta 0 la informacin puede ser un bit del bus de
direcciones multiplexado con un bit del bus de datos (seal ADDR/DATA) o la salida del
latch.
Tambin 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 seal llamada "funcin 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 tecnologa bipolar). Cada lnea 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 propsitos 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 lneas de
P0 que estn 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 cuasibidireccionales". Cuando estn 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

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


1.3.2- Como exteriorizar informacin a travs de una puerta.
En la ejecucin de una instruccin 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 instruccin, debido a un retardo provocado por sincronismos internos.
Cuando la salida de informacin genera un cambio de 0 a 1 en las puertas P1, P2 o P3, la
circuitera interna esta diseada de manera tal que transistores de efecto de campo,
funcionando como pullup transitorios, proveen una mayor velocidad de transicin aportando
corrientes del orden de los 30mA en tecnologa 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 sern rpidas.
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 estn 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 estn listadas a
continuacin, cuando el operando destino es una puerta o un bit de una puerta, caso contrario
leern el pin.
ANL (AND lgica ANL P1,A)
ORL (ORL lgico ORL P2,A)
XRL (OR-EX lgico 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

El motivo de que lean el latch en lugar del pin, es para evitar posibles malinterpretaciones de
nivel de tensin en el pin. Por ejemplo, un bit de la puerta podra 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 (tensin 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 seal /PSEN (program store enable)
como la habilitacin 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 bsquedas desde memoria externa de programa siempre utilizan una direccin de 16 bits.
Los accesos a memoria externa de datos pueden usar direcciones de 16 bits (MOVX @DPTR)
o una direccin de 8 bits (MOVX @Ri).
Cuando se utiliza una direccin de 16 bits, el byte alto de la direccin 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 reaparecern en el prximo ciclo.
Cuando se utiliza una direccin de 8 bits (MOVX @Ri), los contenidos del SFR de la puerta 2
permanecern 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 direccin es multiplexado en el tiempo con el byte de
datos en la puerta 0. La seal ADDR/DATA maneja ambos FETs en los buffers de salida de la
puerta 0. As, en esta aplicacin los pines de la puerta 0 no son salidas con drenaje abierto y
no requieren pull-ups externos. La seal ALE (address latch enable) debera utilizarse para
capturar el byte de direccin en un latch externo. El byte de direccin es vlido en la
transicin 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 habilitacin 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 informacin 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 seal /EA (external access) est activada
2) Si el PC (program counter) contiene un nmero 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 seal de habilitacin 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 instruccin MOVX), aunque el byte buscado no se necesite en ambas
oportunidades en la instruccin actual. No confundir este seal con /RD, que cumple la misma
funcin 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 lgico de /PSEN y /RD. Una AND de
estas dos seales produce una habilitacin 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 rpida 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 funcin "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 funcin "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 transicin de 1 a 0, por lo tanto la mxima velocidad de cuenta es 1/24
de la frecuencia del oscilador. No existe restriccin sobre el ciclo de actividad de la seal de
entrada externa, pero para asegurar que un nivel dado sea muestreado al menos una vez antes
de que cambie, debera mantenerse por al menos un ciclo de maquina completo.
Adems de la seleccin del timer o contador, el Timer 0 y el Timer 1 tienen cuatro modos de
operacin. El timer 2 del 8052, tiene tres modos de operacin: "captura", "auto-recarga" y
"generador de baud rate".
1.5.1- Timer 0 y Timer 1
Estos timers/contadores estn presentes en el 8051 y en el 8052. La funcin del timer o
contador es seleccionada por los bits de control C/T del SFR TMOD. Estos dos timers, tienen
cuatro modos de operacin 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
continuacin se describen los bits del TMOD.

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

11

REGISTRO TMOD
(MSB)
GATE C/T

GATE:

C/T:
M1,M0:

M1
M0
TIMER 1

GATE C/T

(LSB)
M1
M0
TIMER 0

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.
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").
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:

TR1:
TF0:

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 interrupcin.
Bit de puesta en marcha del timer 1. Puesto en 1/0 por programa para poner en
funcionamiento o detener el timer/contador.

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

12

Flag de desborde del timer 0. Idem TF 1.


TR0:
IE1:

IT1:
IE0:
IT0:

Idem TR1.
Flag de interrupcin 1. Puesta en uno por hardwarwe cuando se detecta un flanco de
pedido de interrupcion ingresado por INT 1. Puesto en cero cuando la interrupcin es
procesada.
Bit de control de la interrupcin 1. Puesta a 1/0 por programa para especificar si el
disparo de la interrupcin externa, ser por flanco de bajada o nivel bajo.
Idem IE1.
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 interrupcin 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 operacin 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
automtica, como se muestra en la figura 2.6. El desborde desde TLx no solo coloca en 1 a
TFx, sino que tambin recarga TLx con el contenido de THx, el cual es precargado por
programa. La operacin de recarga deja a THx sin modificacin.
El modo de operacin 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 lgica 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 funcin 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, ingresndolo 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 aplicacin que
no requiera interrupcin.

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 tambin 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 operacin: "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
TF2:

EXF2

RCLK TCLK

EXEN2 TR2

C/T2 CP/RL2

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 transicin negativa en
T2EX y EXEN2 = 1. Cuando la interrupcin 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 recepcin. Cuando es puesto en uno, causa que la puerta serie utilice
los pulsos de desborde del timer 2, como el reloj de recepcin en los modos 1 y 3.
RCLK = 0 causa que el desborde del timer 1 sea utilizado como el reloj de recepcin.
TCLK:
Flag del reloj de transmisin. Cuando es puesto en uno, hace que la puerta serie utilice
los pulsos de desborde del timer 2, como el reloj de transmisin en los modos 1 y 3.
RCLK = 0 causa que el desborde del timer 1 sea utilizado como el reloj de transmisin.
EXEN2:
Flag de habilitacin externo del timer 2. En uno permite que una captura o recarga
ocurra como resultado de una transicin 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/detencin del timer 2. TR2 = 1 pone el timer 2 en


funcionamiento.

C/T2:

Seleccin 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 ocurrirn con las transiciones negativas de
T2EX si EXEN2 = 1. Cuando es cero, las autorecargas ocurrirn 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

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

MODO
auto recarga de 16 bits
modo 0.
captura de 16 bits
modo 1

16

generador de Baud Rate


modo 2
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
interrupcin. Si EXEN2 = 1, el timer 2 trabaja en forma similar a la opcin anterior, pero con
la caracterstica adicional, que una transicin 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. Adems la transicin en T2EX produce que el bit EXF2 en
T2CON, sea puesto en uno y este al igual que TF2 pueda generar una interrupcin. Ver fig
1.8.
En el modo de autorecarga, existen tambin 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 tambin 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 caracterstica adicional
que una transicin de 1 a 0 en la entrada externa T2EX, tambin 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 descripcin 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 simultneamente. Posee un buffer receptor que le permite comenzar la
recepcin de un segundo byte, sin que el byte recibido previamente haya sido leido desde el
registro de recepcin (sin embargo si el primer byte no ha sido leido en el momento en que la
recepcin del segundo byte termina, el primer byte se perdera).
A los registros de transmisin y recepcin de la puerta serie se accede a travs del registro de
funciones especiales SBUF. Escribiendo en SBUF se carga el registro de transmisin y
leyendo SBUF se accede al registro de recepcin, fsicamente separados. La puerta serie puede
operar en cuatro modos:
Modo 0: Los datos entran y salen a travs de la salida RXD. Por
TXD saca el reloj de transmisin. 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 travs del TXD) o recibidos (a travs del RXD). Un bit
de comienzo (0), ocho bits de datos (el LSB primero) y un bit de parada. En la recepcin 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 travs del TXD) o recibidos (a travs 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 transmisin 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 debera transferirse a TB8
para la transmisin. En recepcin 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 travs del TXD) o recibidos (a travs 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 transmisin es iniciada por alguna instruccin que use SBUF como
registro destino. La recepcin es iniciada en modo cero por la condicin 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 operacin.
.

00 : modo 0

registro de desplazamiento

frec. del osc./12.

01 : modo 1
10 : modo 2

ocho bits UART


nueve bits UART

11 : modo 3

nueve bits UART

variable (timer 1 2)
frec. del osc./32
o frec. del osc./64.
variable (timer 1 2)

SM2:

REN:

Habilita la caracterstica para la comunicacin 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.
Habilita la recepcin serie. Puesto en uno por programa para habilitar la recepcin.
Cuando por soft es puesto en cero inhibe la recepcin.

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

19

TB8:
RB8:

TI:

RI:

Es el noveno bit del dato que ser transmitido en los modos 2 y 3. Es colocado en uno o
cero por programa.
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.
Es el flag de interrupciones de transmisin. 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.
Es el flag de interrupciones de recepcin. 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- Generacin 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 transmisin y otro para recepcin)
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 interrupcin de timer 1 deberia inhibirse en este caso. El timer puede


configurarse para operacin como timer o contador y en cualquiera de sus tres modos de
funcionamiento. En la aplicacin 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 interrupcin 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

BAUD RATE

TIMER 1
FOSC
SMOD

MODO 0 MAX:1MHZ
MODO 2 MAX:375K
MODOS 1,3 62,5K
19,2K
9,6K
4,8K
2,4K
1,2K
137,5
110
110

12MHZ
12MHZ
12MHZ
11,O59
11,059
11,059
11,059
11,059
11,986
6MHZ
12MHZ

X
1
1
1
0
0
0
0
0
0
0

C/F

MODO

X
X
0
0
0
0
0
0
0
0
0

X
X
2
2
2
2
2
2
2
2
1

VALOR DE RECARGA
X
X
FFH
FDH
FDH
FAH
F4H
E8H
1DH
72H
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 transmisin y el de recepcin puede ser
simultneamente diferentes. Colocando en 1 RCLK y/o TCLK pone automticamente 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 operacin "TIMER" para el timer 2 es un
poco diferente cuando esta siendo utilizado como generador de baud rate. Normalmente,
debera incrementarse con cada ciclo de maquina ( a la frecuencia de oscilacin / 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 interrupcin. Por lo tanto, la interrupcin del timer 2 no tiene que inhibirse cuando el
timer 2 esta trabajando en este modo. Notar tambien, que si EXEN2 es = 1, una transicin 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 lnea extra de pedidos de interrupciones externas si se desea.
Debera notarse que cuando el timer 2 esta funcionando (TR2 = 1) en funcin "TIMER" como
generador de baud rate, no debera 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 podra 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 interrupcin
externa, el flag correspondiente es limpiado por hardware cuando se accede a la rutina de
servicio, solo si la interrupcin fue activada por flanco. Si la interrupcin 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
interrupcin 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 lgica 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 interrupcin y el bit que corresponda
deber ser desactivado por programa.
En el 8052, la interrupcin del timer 2 es generada por la OR lgica 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 interrupcin 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 interrupcin 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 inhibicin global, EA, el cual inhibe todas las interrupciones.
Registro IE
MSB
EA *
EA:

ET2:

ES:
ET1:

EX1:
ET0:
EX0:

ET2 ES ET1 EX1

LSB
ET0 EX0

Inhibe todas las interrupciones. Si EA=0, ninguna interrupcin ser reconocida. Si


EA=1 cada fuente de interrupcin es individualmente habilitada o inhibida poniendo en
1 o 0 su bit de habilitacin.
Habilita o inhibe la interrupcin de captura/desborde deltimer 2. Si ET2=0 la
interrupcin esta deshabilitada.
Habilita o inhibe la interrupcin de la puerta serie. Si ES=0 inhibe la interrupcin.
Habilita o inhibe la interrupcin por desborde del timer 1. Si ET1=0 inhibe la
interrupcin.
Habilita o inhibe la interrupcin externa 1. Si EX1=0 inhibe la interrupcin
Habilita o inhibe la interrupcin por desborde del timer 0. Si ET0=0 inhibe la
interrupcin.
Habilita o inhibe la interrupcin externa 0. Si EX0=0 inhibe la interrupcin.

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

24

Fig. 2.11 Fuentes de Interrupcin del MCS-51


1.7.1 - Estructura de Prioridades
Cada fuente de interrupcin tambin puede programarse en uno de los dos niveles de
prioridades posibles, colocando en 1 o en 0 un bit del SFR IP. Una interrupcin de baja
prioridad puede ser interrumpida por una interrupcin de mayor prioridad, pero no por otra
fuente de interrupcin de la misma prioridad. Una interrupcin de alta prioridad no puede ser
interrumpida por otra fuente de interrupcin.
REGISTRO IP
PT2:
PS:
PT1:

PT2

PS PT1 PX1 PT0 PX0

Define el nivel de prioridad de las interrupciones del timer 2. PT2=1 nivel de prioridad
alto
Define el nivel de prioridad de las interrupciones de la puerta serie. PS=1 nivel de
prioridad alto.
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:
PT0:
PX0:

Define el nivel de prioridad de las interrupciones externas 1. PX=1 nivel de prioridad


alto.
Define el nivel de prioridad de las interrupciones del timer 0 PT0=1 nivel de prioridad
alto.
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 simultneamente, 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 simultneamente, una secuencia de
eleccin (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 continuacin.
FUENTE
IE0
TF0
IE1
TF1
RI+TI
TF2+EXF2

NIVEL DENTRO DE LA PRIORIDAD


MAS ALTO

MAS BAJA

Tener presente que la estructura de "Nivel dentro de la prioridad" es utilizada solo para
resolver "pedidos simultneos 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 condicin 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 interrupcin de igual o mayor prioridad que este aun en
proceso.
2- El ciclo actual no es el ultimo ciclo en la ejecucin de la instruccin.
3- La instruccin en ejecucin es RETI o cualquier acceso a los registros IP o IE.
Cualquiera de estas tres condiciones bloquean la generacin del LCALL a la rutina de servicio
de la interrupcin. La condicin 2 asegura que la instruccin en ejecucin ser completada
antes de saltar a cualquier rutina de servicio. La condicin 3 asegura que si la instruccin en
proceso es RETI o cualquier acceso a IE o IP, al menos una instruccin mas ser ejecutada
antes que cualquier interrupcin sea aceptada.

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

26

El ciclo de evaluacin 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 interrupcin ejecutando un LCALL generado por
hardware a la rutina de servicio correspondiente. En algunos casos, esto tambin limpia el flag
que genero la interrupcin 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
interrupcin 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 direccin que depende de la fuente de
interrupcin que debe ser atendida como se muestra a continuacin.
Fuente
IE0
TF0
IE1
TF1
RI+TI
TF2+EXF2

Direccin del vector


0003H
000BH
0013H
001BH
0023H
002BH

La ejecucin de la rutina de servicio toma lugar desde esas locaciones hasta que la instruccin
RETI es encontrada. La instruccin RETI le informa al procesador que esa rutina de
interrupcin no esta mas en proceso, luego extrae los 2 bytes superiores de la pila y los carga
en el PC. La ejecucin del programa interrumpido continua desde donde fue abandonado.
Una simple instruccin RET podra tambin haber regresado la ejecucin al programa
interrumpido, pero dejara al sistema de control de interrupciones pensando que una
interrupcin esta aun en proceso.

Interrupciones Externas
Las fuentes de interrupcin 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 interrupcin
externa "x" es disparada por un nivel bajo detectado en el pin INTx. Si ITx es igual a 1, la
interrupcin 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 prximo el
flag de pedido de interrupcin IEX del TCON se pondr en 1 y pedir la interrupcin.
Debido a que los pines de interrupcin externos son muestreados una vez en cada ciclo de
maquina, una entrada en alto o en bajo debera mantenerse al menos 12 periodos de reloj para
asegurar su deteccin. Si la interrupcin externa es disparada por flanco, la fuente externa
tiene que mantener el pin de pedido de interrupcin en alto por lo menos un ciclo, y luego
mantenerlo en bajo un ciclo mas para asegurar que la transicin sea detectada y as el flag de

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

27

pedido de interrupcin IEx sea colocado en 1. En este caso IEx ser automticamente
limpiado por la CPU cuando se acceda a la rutina de servicio.
Si la interrupcin externa es activada por nivel, la fuente externa tiene que mantener el pedido
activo hasta que la interrupcin pedida sea detectada. Luego tiene que desactivar el pedido
antes que la rutina de servicio de la interrupcin finalice, sino otra interrupcin 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 prximo 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 direccin de la rutina de servicio.
Este llamado ocupa 2 ciclos de maquina, de esta manera un mnimo de 3 ciclos de maquina
completos pasan entre la activacin de un pedido de interrupcin externa y la ejecucin de la
primera instruccin de la rutina de servicio.
Un tiempo de respuesta mas largo resultara si el pedido esta bloqueado por alguna de las 3
condiciones listadas anteriormente. Si una interrupcin 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 ejecucin. Si la instruccin 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 instruccin es RETI o un acceso a IP o
IE, el tiempo de espera adicional no puede ser mayor a 5 ciclos (un mximo de un ciclo mas
para completar la instruccin en proceso, mas 4 ciclos para completar la prxima instruccin
si es MUL o DIV).
De esta forma en un sistema con una solo interrupcin el tiempo de respuesta es siempre
mayor a 3 ciclos y menor que 9 ciclos.

1.7.3- Operacin Paso a Paso (single step)


La estructura de interrupciones del 8051 permite la ejecucin paso a paso por medio de un
programa elemental. Como se dijo previamente un pedido de interrupcin no se atender
mientras una interrupcin de igual nivel de prioridad este aun en proceso, ni se atender
despus de RETI hasta que al menos una instruccin del programa sea ejecutada. As, una vez
que se ha ingresado a una rutina de interrupcin, no se puede volver a ingresar hasta que al
menos una instruccin del programa interrumpido sea ejecutada. Una aplicacin de esta
caracterstica es la operacin 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
interrupcin terminara con el siguiente cdigo:
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 instruccin.

Ahora si el pin INT0, el cual corresponde a P3.2, es normalmente mantenido en bajo, la CPU
ira directamente a la rutina de interrupcin 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 instruccin e
inmediatamente ingresara otra vez a la rutina de interrupcin externa 0 para esperar el
prximo pulso en P3.2. Una instruccin 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. Tambin 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 (slo en 8052)
00H
TL2 (slo en 8052)
00H
RCAP2H (slo en 8052) 00H
RCAP2L (slo 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 automtico cuando Vcc se conecta al pin RST a travs 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 versin CHMOS provee modos de
operacin con potencia reducida como una caracterstica 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 travs de la cual la alimentacin auxiliar (Back up) es administrada
durante estas operaciones es Vcc. La figura 1.13 muestra la circuiteria interna la cual
implementa estas caractersticas. En el modo IDLE (IDL=1), el oscilador continua
funcionando y los bloques de interrupcin, la puerta serie, y los timers continan funcionando,

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

30

pero la seal 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 direccin de este registro es 87H.
Registro PCON
SMOD
SMOD:

GF1:
GF0:
PD:
IDL:

GF1 GF0 PD IDL

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.
Flag de propsitos generales.
Flag de propsitos generales.
Bit de modo POWER DOWN. PD=1 activa la operacion Power Down.
Bit de modo IDLE. IDL=1 activa la operacion Idle.

Si PD=1 y simultneamente IDL=1, la operacin 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 instruccin que ponga en 1 PCON.0 causa que sea la ultima instruccin ejecutada antes
de ir al modo IDLE. En este modo la seal 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 lgico que tenan antes de ingresar al modo IDLE. ALE y PSEN se
mantienen en el nivel lgico alto.
Hay dos caminos para finalizar el modo IDLE. La activacin de cualquier interrupcin
habilitada causara que PCON.0 sea limpiado por hardware, terminando el modo IDLE. A la
interrupcin se le dara servicio y siguiendo a RETI la prxima instruccin a ejecutarse ser la
siguiente a la instruccin que puso al dispositivo en modo IDLE.
Los bits flags GF1 y GF0 pueden utilizarse para dar una indicacin si una interrupcin ocurri
durante operacin normal o durante un IDLE. Por ejemplo, una instruccin que activa IDLE
puede colocar en uno GF1 y/o GF0. Cuando IDLE sea terminado por una interrupcin, la
rutina de servicio de la interrupcin 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 instruccin que pone en 1 a PCON.1 causa que sea la ultima instruccin 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 operacin 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 operacin normal,
antes de que el modo POWER DOWN sea terminado. El reset que finaliza Power Down,
tambin libera el oscilador. El reset no debera activarse antes de que Vcc sea restablecido a
su nivel de operacin 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

Anda mungkin juga menyukai