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
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
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.
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
OV
-
PSW.2
PSW.1
PSW.0
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
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.
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.
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.
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.
11
REGISTRO TMOD
(MSB)
GATE C/T
GATE:
C/T:
M1,M0:
M1
M0
TIMER 1
GATE C/T
(LSB)
M1
M0
TIMER 0
REGISTRO TCON
(MSB)
(LSB)
TF1 |TR1 TF0 TR0 IE1 IT1 IE0 IT0
TF1:
TR1:
TF0:
12
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.
13
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.
14
utilizado por la puerta serie como un generador de Baud Rate, o en cualquier aplicacin que
no requiera interrupcin.
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:
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:
C/T2:
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
MODO
auto recarga de 16 bits
modo 0.
captura de 16 bits
modo 1
16
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.
17
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
01 : modo 1
10 : modo 2
11 : modo 3
variable (timer 1 2)
frec. del osc./32
o frec. del osc./64.
variable (timer 1 2)
SM2:
REN:
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.
20
Modos 1 y 3
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
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
22
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.
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:
LSB
ET0 EX0
24
PT2
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.
25
PX1:
PT0:
PX0:
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.
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
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
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.
jb p3.2,$
28
reti
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
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
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:
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.
31
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).-
33