micro control adores en control iii-luis urdaneta
DESCRIPTION
Microcontroladore en ControlLuis UrdanetaTRANSCRIPT
Por Luis D. Urdaneta G.Por Luis D. Urdaneta G.
Control de Tiempo Temporizadores y
Contadores
Control de Tiempo Temporizadores y
Contadores
Registrar y/o calcular el tiempo transcurrido entre eventos.Contar eventos.Generar tasa de baudios para el puerto serie.
La función de control de tiempo del 8051 es realizada por dos Temporizadores/Contadores (T/C) denominados T0 y T1, los cuales pueden ser activados, leídos y configurados de forma independiente.
En cualquier caso el µCtrl siempre incrementa un registro interno del T/C hasta cuando éste se desborde (Todos los bits están en 1 y pasan a 0)
Temporizadores y Contadores
Las funciones generales de estos recursos del 8051 son:
2
El tiempo invertido por un T/C en contar desde 0 hasta 25000 será de 0.025 seg. Así, para ejecutar una tarea 1 vez por segundo, es necesario que el T/C cuente 40 veces desde 0 hasta 25000, lo cual no es mayor problema.
Medición de TiempoMedición de Tiempo
Las frecuencias usuales del cristal del 8051 básico son 12 MHz y 11.059 MHz, siendo está última la más común por razones relacionadas con la generación de tasa de baudios.
Temporizadores y Contadores
Cuando los T/C son configurados como temporizadores son incrementados en 1 cada ciclo de máquina. Como cada ciclo corresponde a 12 periodos de reloj, un T/C en operación se incrementará un millón de veces cada segundo, siempre que la frecuencia del cristal sea 12 MHz.
3
En un tiempo de 0.025 segundos, las matemáticas indican que el T/C debería aumentar hasta 23039.65. Corriendo la cuenta hasta 23040, el tiempo será de 0.025000461, lo cual representa una diferencia despreciable de 0.000000461.
Para un evento que deba realizarse cada segundo bastará con un con- teo inicial hasta 23040, ejecutar la tarea, reiniciar el T/C y repetir 40 veces la cuenta de 23040, debido a que 40x 0.025000461 = 1.000001664
Temporizadores y Contadores
Con f = 11.059 MHz, el T/C se incrementa 921583 veces por segundo y transcurrirán 0.027 segundos durante una cuenta desde 0 hasta 25000. Si ahora se quiere realizar una tarea cada segundo, debe repetirse la cuenta 36.86 veces, lo cual no es posible.
4
En este modo de operación la entrada externa es examinada durante la fase 2 (F2) del estado S5 de cada ciclo de máquina. Cuando la prueba muestra un alto en un ciclo y un bajo en el siguiente el registro del timer es incrementado. La nueva cuenta será registrada durante F1S3 del ciclo siguiente a aquel cuando la transición fue detectada. Al requerirse 24 estados para reconocer la transición de 1 a 0, la velocidad máxima de conteo es 1/24 de la frecuencia de reloj. En el modo temporizador este valor es 1/12 de la frecuencia de reloj.
Temporizadores y Contadores
Los timers del 8051 pueden usarse también como contadores. En este caso no se incrementan cada ciclo de máquina sino que lo hacen como respuesta a una transición de 1 a 0 en el terminal externo de entrada del temporizador T0 (P3.4) o T1 (P3.5).
Timers como contadores de eventosTimers como contadores de eventos
5
jnb P2.0,$ ; No hay objeto presente, esperar. jb P2.0,$ ; Entrada en alto. El producto está frente al sensor. inc cont ; El objeto ha cruzado la línea, incrementar contador.
Observe que el código es corto y realiza el trabajo. Pero como desven-taja fundamental: mantiene ocupado continuamente al µctrl.
Temporizadores y Contadores
Considere que se tiene un sensor colocado en una línea de producción industrial el cual envía un pulso cada vez que un objeto pasa a través de éste. El siguiente código puede servir para contar el número de objetos que pasan por el sensor. El pulso es recibido en el terminal 0 del puerto 2.
6
Temporizadores y Contadores
Si es necesario que el microcontrolador realice otras tareas además de contar objetos, puede usarse el timer 1 para registrar el paso de los productos. Lo primero es configurar a T1 como contador y conectar el sensor al terminal P3.5. De este modo T1 contará los pulsos (transiciones de 0 a 1) en P3.5. Cuando se requiera saber cuantos objetos han pasado por la línea, simplemente se lee el valor registrado por T1. De este modo el 8051 puede ejecutar otras tareas mientras el timer 1 realiza la cuenta.
7
Temporizadores y Contadores
El circuito de la figura muestra los componentes fundamentales de T0 y T1.
Timers T0 y T1Timers T0 y T1
El interruptor de la izquierda selecciona la fuente de reloj para T1 (T0).C/T = 0 1/12 de la fosc C/T = 1 pulsos en terminal T1 (T0)
8
Temporizadores y Contadores
Para arrancar el timer, debe permitirse el paso de los pulsos hacia los registros internos TH1 TL1 (TH0 TL0) que deben incrementarse. Esto se logra cuando la señal interna control está en nivel alto.El control del temporizador puede realizarse por programa a través del bit GATE1 (GATE0) del registro TMOD, si éste se programa con un 0, se bloquea el paso de la señal de acuerdo con el estado del bit TR1 (TR0) del registro TCON. setb TR1 permite (arranca) el conteo, clr TR1 inhibe (para) la cuentaPara control por hardware, se carga un 1 en GATE1 (GATE0) de modo que será la señal externa INT1 (INT0) la que habilita o deshabilita el conteo, estando en 1 TR1 (TR0). 9
Temporizadores y Contadores
Los registros internos contadores TH1 TL1 (TH0 TL0) pueden ser de 8, 13 o 16 bits de acuerdo con el modo de operación programado para el timer. Después de los registros se encuentra el flip flop del bit de bandera TF1 (TF0) del registro TCON, el cual notifica el desbordamiento del contador. Por último, si la interrupción correspondiente está habilitada, se gene-rará una solicitud de interrupción al microcontrolador.
10
Temporizadores y Contadores
Además del funcionamiento como contador de eventos, los timers T0 y T1 pueden ser programados para uno de cuatro modos de operación.Los seis registros usados para configuración y control de T0 y T1 son los siguientes:TMOD (89H) Selección de modos de operación. TCON (88H) Control del timer.TH0, TL0 (8CH, 8AH) bytes alto y bajo de T0TH1, TL1 (8DH, 8BH) bytes alto y bajo de T1
Registros asociados a la operación del los Timers T0 y T1Registros asociados a la operación del los Timers T0 y T1
11
Temporizadores y Contadores
12
Temporizadores y Contadores
13
Temporizadores y Contadores
La función temporizador o contador es seleccionada por el bit de control T/C del registro de funciones especiales TMOD (Timer/Counter Modo Control Register). Tenga en cuenta que este FSR no es direccionable por bits.El modo de operación puede ser seleccionado manipulando los bits M1M0 del registro TMOD, de acuerdo con el timer que corresponda.
14
Temporizadores y Contadores
Poniendo los bits M1M0=0 en el registro TMOD se selecciona el modo de operación cero para los timers T0 y T1.
Modo 0: Temporizador/contador de 13 bitsModo 0: Temporizador/contador de 13 bits
El registro TL1 mantendrá los 5 bits de bajo orden de la cuenta (los bits restantes no se usan) y los 8 bits de orden alto estará en TH1. 15
Temporizadores y Contadores
En este modo, TL1 contará desde 0 hasta 31 y cuando se desborde se incrementará TH1 en 1. Esto indica que la cuenta máxima será de 8192, Si la cuenta se inicia en cero, la bandera TF1 se activará después de 8192 ciclos de máquinas, cuando la cuenta finaliza.
Para programar un valor de cuenta determinada, los registros internos deben cargarse con el valor dado por la expresión:
16
Temporizadores y Contadores
Para reiniciar la misma cuenta o una nueva, debe recargarse el valor correspondiente en los registros y llevar a cero la bandera TF1.
El tiempo que tarda el contador en alcanzar la cuenta final es dado por:
17
Temporizadores y Contadores
Se usa el timer T0 con disparo por programa y en modo 0 para:
1. Generar una onda cuadrada de1.0 KHz en el terminal 0 del puerto 0.
2. Activar un LED en P0.0 durante ½ segundo y apagarlo el siguiente ½ segundo.
Programa 7Programa 7
18
Temporizadores y Contadores
1. Para generar una onda cuadrada (DC=50%) de 1.0 KHz se complementa el terminal P0.0 cada 500 µs.
Para configurar el timer para un retardo de 0.5 ms, se debe realizar una cuenta de 500 ciclos de máquina. El valor a cargar en el registro interno es (8192-500) = 7692=1E0CH. Para que los 5 bits de TL0 y el byte de TH0 representen este valor, deben contener:
1E0CH = 11110 00001100B
TH0 = F0H = 11110000B TL0 = 0CH = 00001100B
19
Temporizadores y Contadores
Los temporizadores en modo cero pueden verse como un contador de 8 bits THx (0-FFH) precedido por un divisor de frecuencia TLx de 5 bits (0-1FH)). De modo que el factor de división es de 32 cuando cuenta desde cero. Para el ejemplo anterior, TLx cuenta en el primer paso hasta 20 (32-12) y pone a THx en 1. De modo que el registro alto se desborda cuando han pasado: 15 x 32 + 20 = 500 ciclos de máquina
(FFH-F0H) x 20H + 14H = 1F4H ciclos de máquina
20
Temporizadores y Contadores
7692240 375
327692 240 32 0 375 32 240 32 12
7692 0 32 0
.
( ) ( . ) ( )
( F H ) CH
21
Temporizadores y Contadores
22
Temporizadores y Contadores
Señal en P0.0 obtenida de simulación en PROTEUS 6.9
23
Temporizadores y Contadores
El osciloscopio presenta la señal generada por el código anterior. Observe que la onda no tiene una frecuencia exacta de 1.0 KHz. Esto se debe a que el tiempo que el terminal P0.0 pasa en 1 ó en 0 se alarga sobre los 500 µs generados con precisión por T0, debido al tiempo usado en la ejecución de las instrucciones necesarias para cargar los registros contadores, arrancar T0, limpiar la bandera TF0 y el salto final.Para obtener una señal de 1.0 KHz se debe disminuir el retardo del timer T0, como compensación. Si ahora cargamos en TL0 13H en lugar de 0CH, se obtiene en P0.0:
24
Temporizadores y Contadores
25
Temporizadores y Contadores
2. Para activar un LED conectado a P0.0 cada segundo, se complementa la salida cada 0.5 segundos.
Como T1 o T0 en modo cero pueden generar un retardo máximo de 8.192 ms a 12 MHz, para obtener los 500 ms se programa T0 para un retardo de 5 ms y se repite 100 veces.
Los valores a cargar en TH0 y TL0 = son 43H y 18H, respectivamente.
26
Temporizadores y Contadores
XTAL218
XTAL119
ALE30
EA31
PSEN29
RST9
P0.0/AD039
P0.1/AD138
P0.2/AD237
P0.3/AD336
P0.4/AD435
P0.5/AD534
P0.6/AD633
P0.7/AD732
P2.7/A1528
P2.0/A821
P2.1/A922
P2.2/A1023
P2.3/A1124
P2.4/A1225
P2.5/A1326
P2.6/A1427
P1.01
P1.12
P1.23
P1.34
P1.45
P1.56
P1.67
P1.78
P3.0/RXD10
P3.1/TXD11
P3.2/INT012
P3.3/INT113
P3.4/T014
P3.7/RD17
P3.6/WR16
P3.5/T115
U1
80C51
X1
CRYSTAL12 MHz
C233pF
C333pF
+5V
R28.2k
C110uF
+5V
R1
220
D1LED-RED
+5V
1 2
U2:A
7406
27
Temporizadores y Contadores
28
Temporizadores y Contadores
Programa 8Programa 8
En los ejemplos anteriores se ha usado T0 para generar retardos en el modo 0 con disparo por soft. En este ejemplo se configura T1 en modo 0 con disparo por hardware. En este caso el timer se activa ahora cuando se aplica un nivel alto a la entrada del microcontrolador.INT1
29
Temporizadores y Contadores
XTAL218
XTAL119
ALE30
EA31
PSEN29
RST9
P0.0/AD039
P0.1/AD1 38
P0.2/AD237
P0.3/AD3 36
P0.4/AD435
P0.5/AD5 34
P0.6/AD633
P0.7/AD7 32
P2.7/A1528
P2.0/A8 21
P2.1/A922
P2.2/A10 23
P2.3/A1124
P2.4/A12 25
P2.5/A1326
P2.6/A14 27
P1.01
P1.12
P1.23
P1.34
P1.45
P1.56
P1.67
P1.78
P3.0/RXD10
P3.1/TXD 11
P3.2/INT012
P3.3/INT1 13
P3.4/T014
P3.7/RD 17P3.6/WR
16P3.5/T1 15
U4
80C51
X1
CRYSTAL12 MHz
C233pF
C333pF
+5V
R28.2k
C110uF
+5V
R1
220
D1LED-RED
+5V
1 2
U1:A
INICIO
30
Temporizadores y Contadores
31
Iniciar el destello de un LED con una señal externa no es en realidad una situación común. Este modo de operación puede usarse para medir el ancho de un pulso aplicado al pin de control de T1.
Temporizadores y Contadores
INT1
32
Este código fue usado para medir un pulso de ancho 2.453 ms. El valor retornado en R1-R2 fue de 4C15H, el cual corresponde al número de 13 bits (en formato del modo 0) de 0995H = 245310
Temporizadores y Contadores
33
El modo 0 es en realidad una reliquia creada para compatibilidad con el antiguo 8048 y se recomienda no usarlo.En la practica se configura el timer como un contador de 16 bits (modo 1) para que la lectura entregue el ancho del pulso en dos bytes, evitando la necesidad de convertir la medida desde el formato del modo o.
Temporizadores y Contadores
34
Temporizadores y Contadores
Este modo es igual que el anterior excepto que TL0 (TL1) tiene 8 bits, por lo cual la cuenta se extiende hasta 65535 (FFFFH), permitiendo retardos de mayor duración.
Modo 1: Temporizador/contador de 16 bitsModo 1: Temporizador/contador de 16 bits
35
Temporizadores y Contadores
En este caso la duración del retardo generado es dado por la ecuación:
36
Temporizadores y Contadores
Si el dispositivo opera como contador de 8 bits, la lectura del estado del temporizador en cualquier momento se limita a leer el byte en el registro con una instrucción del tipo:
mov x,TL0 o mov x,TL1.En configuración de 13 ó 16 bits la lectura correcta es algo más complicada. Suponga por ejemplo que en modo de 16 bits se lee una medida que es de 18FFH. Usted lee primero TL0 como FFH y pero luego lee TH1 como 19H, de modo que existe un error apreciable en la lectura.
Error = 665510-639910 = 25610
¿ Cómo leer el timer?
37
Temporizadores y Contadores
El problema no está en el timer, el valor correcto estuvo disponible pero no fue leído oportunamente. Después de la lectura de TL0 = FFH, cuando se ejecuta la siguiente instrucción transcurre un corto (pero suficiente) tiempo para que el timer se incremente desde 18FFH a 1900H y por esto se lee 19FFH. La solución a este problema puede ser parar el timer al finalizar la medida con clr TR0 o clr TR1, y luego leer los registros. La selección de esta opción depende de si la naturaleza de la aplicación tolera la parada del timer por algunos ciclos de máquina.
38
Temporizadores y Contadores
Cuando no se pueda parar el timer, el error producto de la situación descrita puede ser evitado si nos aseguramos que THx no cambia después de leer TLx. El código siguiente puede ser usado. La lectura queda en los registros A-R1
releer: mov a,TH1 mov r1,TL1
cjne a,TH1,releer …
releer: mov a,TH1 mov r1,TL1
cjne a,TH1,releer …
39
Temporizadores y Contadores
Se debe construir y programar un generador de forma de ondas usando el 8051. El instrumento debe tener tres entradas: la primera es un pulsador S1 para selección del tipo de señal de salida entre: seno, cuadrada, triangular o diente de sierra. Al aplicarse energía al circuito debe generarse una onda seno. Las activaciones subsecuentes del pulsador seleccionarán una salida diferente en el orden especificado. La segunda y tercera entrada son dos interruptores S2 - S3 para aumentar/disminuir la frecuencia de la señal de salida.
Programa 9Programa 9
40
Temporizadores y Contadores
+5V
C110u
P1.1
P2.4
R6
2.2K
R6
2.2K
R6
2.2K
U4A
74LS14
1 2S1
P2.7
Selector de tipo de onda
+5V
P1.0
P2.2
P1.7
P2.0 +
-
U1
LM741N
3
26
7 14 5
Aumentar frecuencia
S2
P2.6P2.5
C1100n
+5V
P2.1
Generador de señal
Disminuir frecuencia
R1 5.6K
-12V
R5
200
-12V
+5V
R35.6K
Vs
P2.3
-12V
U3
DAC0808
121110
98765
14
15
4
2
16
A8A7A6A5A4A3A2A1
VR+
VR-
IOUT
IOUT
COMP
S3
R45.6K
41
Temporizadores y Contadores
El tiempo tx entre muestras lo fija el valor cargado en los registros del T/C T1, configurado en modo 1. Para detectar cuando se debe escribir la siguiente muestra se examina la bandera de desborde TF1, así la frecuencia de la salida variará con el valor cargado en los contadores de T1.El timer T0 se configura en modo 1 para generar un retardo de 20 ms para protección por programa contra los efectos del rebote de S2 y S3. Para S1, la supresión del rebote de contactos se realiza por hardware.
42
Temporizadores y Contadores
Para seleccionar el tipo de onda, se programa un contador de módulo 3 que registra el orden en el cual es activado el pulsador. Al inicio el contador está en 0, indicando salida seno. Las subsecuentes activaciones lo pone en 1 para onda cuadrada, en 2 para triangular y en 3 para diente sierra. Al presionarse S1 por cuarta vez el contador vuelve a 0 reiniciándose la secuencia con salida seno. Con el programa en ejecución, se lee el tipo de onda y su frecuencia y se genera un ciclo de la forma de onda deseada a la frecuencia especificada. A continuación se vuelve a leer el estado de los interruptores para generar el siguiente periodo de la misma señal o el primer ciclo de nueva onda de salida.
43
Temporizadores y Contadores
Para generar la onda seno se utiliza una tabla de valores. La k-ésima muestra Nk se obtiene con la siguiente ecuación, donde n es el número de muestras en un periodo:
44
Temporizadores y Contadores
Para que la frecuencia seleccionada sea la misma para todos los tipos de ondas, es necesario generar el mismo número de muestras por ciclo y escribir una muestra cada T/n, donde T es el periodo de la forma de onda. Se desea una amplitud de la salida de 5.0 V (4.98 V) con 128 muestras por ciclo. Con la señal seno no hay problema en usar una tabla de 64 valores (medio ciclo) y con la onda cuadrada basta con escribir 64 muestras en nivel bajo y otras 64 en alto. Pero en el caso de la forma de onda triangular, para obtener la amplitud deseada, la señal debe variar entre 0 y FFH cada medio ciclo, lo cual equivale a 512 muestras por ciclo.
45
Temporizadores y Contadores
Para ajustar el número de muestras a 128, se carga (para la pendiente positiva) en el DAC los valores 0,4,8,0CH,…,FCH,…0CH,8,4,0; lo cual representa 64 muestras en el semiciclo ascendente y 64 muestras en el descendente. Como resultado la amplitud se reduce a 4.93 V. Para que toda salida tenga igual amplitud se ajusta la tabla de valores de la onda seno y el valor de del nivel alto de la onda cuadrada. En el caso de la señal diente de sierra se carga a la entrada del DAC la secuencia 0,2,4,5,8,0AH,…,0FEH para 128 muestras por ciclo.El código del generador consta de un programa principal para detectar el tipo y frecuencia de la onda y generar la señal correspondiente y dos subrutinas: una que escribe el valor digital de la muestra en el P2, cada vez que el temporizador T1 alcanza el final de la cuenta y la otra para control de T0. 46
Temporizadores y Contadores
47
Temporizadores y Contadores
48
Temporizadores y Contadores
49
Temporizadores y Contadores
50
Temporizadores y Contadores
51
Temporizadores y Contadores
52
Temporizadores y Contadores
Aunque el generador funciona, no debe considerarse un instrumento comercial. Son necesarios ciertos refinamientos para convertirlo en un generador de señales práctico.
53
Temporizadores y Contadores
Simulación del generador con Simulación del generador con PROTEUSPROTEUS
P[2
7..
20]
P27P26P25P24P23P22P21P20
P20P21P22P23P24P25P26P27
A26
VREF+14
VEE3
A15
IOUT4
A37
A48
A59
A610
A711
A812
VREF-15
COMP16
U1
DAC0808
R15k
+5V
R25.6k
C1100nF
3
26
74
15
U2
LM741
+12V
-12V
R3
5k
XTAL218
XTAL119
ALE30
EA31
PSEN29
RST9
P0.0/AD039
P0.1/AD138
P0.2/AD237
P0.3/AD336
P0.4/AD435
P0.5/AD534
P0.6/AD633
P0.7/AD732
P2.7/A1528
P2.0/A821
P2.1/A922
P2.2/A1023
P2.3/A1124
P2.4/A1225
P2.5/A1326
P2.6/A1427
P1.01
P1.12
P1.23
P1.34
P1.45
P1.56
P1.67
P1.78
P3.0/RXD10
P3.1/TXD11
P3.2/INT012
P3.3/INT113
P3.4/T014
P3.7/RD17
P3.6/WR16
P3.5/T115
U3
80C51
X1
CRYSTAL
C233pF
33pF
P[27..20]
ONDA
R42.2k
+5V
C410uF
1 2
U4:A
74LS14
R58.2k
C510uF
+5V
RST
+5
V
3
21
411
U5:A
LM324
+12V
R8
10k
R9
10k
R10
48k
-2.45
-12
.0V
RV1100k
A
B
salida
salida
f++
f--R6
2k
54
Temporizadores y Contadores
55
Temporizadores y Contadores
En este modo se configura el registro interno como un contador de 8 bits (TL1 o TL0) con recarga automática. El desbordamiento del contador además de activar la bandera TF1 (TF0), recarga TL1 (TL0) con el contenido de TH1 (TH0), iniciándose un ciclo nuevo de conteo.
Modo 2: Temporizador/contador de 8 bits con auto recargaModo 2: Temporizador/contador de 8 bits con auto recarga
56
Temporizadores y Contadores
Este modo es adecuado para temporización con precisión debido a que el retardo no es afectado por el tiempo de ejecución necesario para recargar los registros contadores.
El tiempo de desborde puede calcularse con:
57
Temporizadores y Contadores
En este ejemplo sencillo se usan los T/C T0 y T1 en modo 2 configurados como contadores de evento.Se tiene una correa transportadora la cual traslada productos de dos tipos: altos y bajos. El sistema tiene dos emisores y dos receptores de luz: A y B. El haz de luz A es interrumpido siempre que un objeto alto pasa por la línea de detección. El rayo luminoso de B es cortado cuando cualquiera de los artículos pasa frente al sensor.Las salidas de los sensores tienen niveles TTL.
Programa 10Programa 10
58
Temporizadores y Contadores
59
Temporizadores y Contadores
El 8051 debe contar 100 productos y verificar que exista un máximo de 60% de objetos altos. Si esto se cumple, se emite un beep y se reinicia con un nuevo lote de 100 artículos.Si la proporción no es la establecida, se debe generar una alarma y parar la correa hasta que sea presionado un pulsador de INICIO. También existe un interruptor PARAR, para emergencias.
60
Temporizadores y Contadores
La salida del sensor A se conecta a la entrada externa de T0, de modo que este timer registre el número de objetos altos. Mientras que la señal de B se aplica a la entrada externa del timer T1 para que este cuente el numero total de productos que pasan por el subsistema.De esta forma es posible conocer la proporción de productos de ambas clase con respecto a un total especificado.
61
Temporizadores y Contadores
+5V
+12V
Q3TIP32Q4
BC184
Q1BC160
C430pf
RESET
+5V
Q5BC184
R51
R33.3K
+5V
R7
1k
R43.3K
Q2TIP31
R1
8.2K
R2 1k
PARAR
R8
1k
Y1
12 mHz C530pf
C6 10uf
M1
U1
80C51
31
19
18
9
12131415
12345678
3938373635343332
2122232425262728
171629301110
EA/VP
X1
X2
RESET
INT0INT1T0T1
P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7
P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7
P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7
RDWR
PSENALE/P
TXDRXD
INICIO
LS1
62
Temporizadores y Contadores
63
Temporizadores y Contadores
64
Temporizadores y Contadores
65
Temporizadores y Contadores
Simulación del Programa Simulación del Programa 10 con 10 con PROTEUSPROTEUS
R23.3k
R33.3k
R41
Q1BC160
Q2TIP31
Q3TIP32
Q4BC184
R51k
Q5BC184
+12V
XTAL218
XTAL119
ALE30
EA31
PSEN29
RST9
P0.0/AD039
P0.1/AD138
P0.2/AD237
P0.3/AD336
P0.4/AD435
P0.5/AD534
P0.6/AD633
P0.7/AD732
P2.7/A1528
P2.0/A821
P2.1/A922
P2.2/A1023
P2.3/A1124
P2.4/A1225
P2.5/A1326
P2.6/A1427
P1.01
P1.12
P1.23
P1.34
P1.45
P1.56
P1.67
P1.78
P3.0/RXD10
P3.1/TXD11
P3.2/INT012
P3.3/INT113
P3.4/T014
P3.7/RD17
P3.6/WR16
P3.5/T115
U1
80C51
X1
CRYSTAL12 MHz
C133pF
C233pF
+5V
R68.2k
C310uF
+5V
R7
10k
R1
1k
PARAR INICIAR
+5
V
0BAJAS
0ALTAS
1
23
U2:A
74LS32
LS1
66
Modo 3: Temporizador en modo divididoModo 3: Temporizador en modo dividido
Cuando el timer 0 es configurado en este modo, se convierte en dos contadores independientes de 8 bits: el timer 00 será TL0 y el timer 01 será TH0. Ambos cuentan hasta 255 y se desbordan cuando regresan cero. Todos los bits asociados al timer 1 real son ahora ligados al TH0 (timer 01).Cuando el timer 0 está en modo 3, el timer 1 real (TH1 TL1) puede ser configurado en los modos 0, 1 y 2, pero no puede ser arrancado/parado y no activa la bandera de desborde, pues sus dos bits de control están cedidos al timer 01 (TH0). En este caso, el timer 1 real será incrementado cada ciclo de máquina.
Temporizadores y Contadores
67
Temporizadores y Contadores
68
El único uso de este modo es cuando la aplicación necesite dos timers independientes y uno adicional para generación de la tasa de baudios. En tal caso se usa el timer 1 real como generador de baudios y TH0/TL0 como dos timers separados.
Temporizadores y Contadores
69
Temporizadores y Contadores
70
Temporizadores y Contadores
71
InterrupcionesInterrupciones
Interrupciones
En los ejemplos anteriores, el curso secuencial del programa solo es cambiado por instrucciones específicas de saltos o llamadas/retorno desde subprogramas. El uso de la técnica de interrupciones provee un mecanismo para suspender el curso normal de un programa, ejecutar una subrutina y retornar a continuar con la ejecución del código suspendido temporalmente.
73
Interrupciones
Una interrupción, como todo evento asincrónico, puede producirse en cualquier momento durante la ejecución de un programa. Cuando ocurre, se completa la instrucción que está en ejecución. Si la interrupción en cuestión está habilitada, se acepta la petición y se transfiere el control a una rutina de servicio de interrupción (RSI). Esta salva las variables necesarias para preservar las operaciones a reanudarse, y atiende al periférico que originó la llamada. Una vez completada la RSI, el control se transfiere de nuevo al programa principal.
74
Interrupciones
75
Interrupciones
1. Culmina la ejecución de la instrucción en curso.
2. El contenido del contador de programa se almacena en la pila.
3. El PC se carga con la dirección de la primera instrucción de la RSI.
4. Se ejecuta la rutina de servicio.
5. Se recupera el contenido del PC guardado en la pila.
Las tareas que siguen a una interrupción son las siguientes:Las tareas que siguen a una interrupción son las siguientes:
76
Interrupciones
Las ventaja principal de la técnica de interrupciones es el ahorro del tiempo de CPU, el cual deja de usar el mecanismo de consultas para detectar la ocurrencia de un eventos críticos, como por ejemplo el desborde de un T/C.Para ilustrar sobre la conveniencia del uso de interrupciones, considere que un programa debe, entre otras tareas, cargar en el A el contenido del puerto 1 cada 50 ms.Para realizar esta función el código configura T1 en modo 1 para que genere el retardo en cuestión.
77
Interrupciones
jnb TF1,saltarclr TF1mov a,P1
saltar: …Considere que aparte de la instrucción jnb (2 ciclos) que prueba TF1 y determina si el salto debe realizarse, el resto del programa consume 98 ciclos de máquina. Esto significa que, en total nuestro, código requiere 100 ciclos de máquina por cada paso. Debido a que TF1 se activa cada 50000 µs, se ejecutarán 500 instrucciones jnb antes que la prueba de TF1 tenga éxito. Sumando a esto los 3 ciclos de máquina del código que lee el puerto y limpia a TF1, se obtiene un total de 1003 ciclos de instrucción invertidos en detectar el desborde del temporizador y ejecutar la lectura de P1. 78
Interrupciones
Para evitar tener que examinar el estado de TF1 en cada paso del lazo del programa, se puede programar al 8051 para que pruebe TF1 automáticamente en segundo plano y ejecute un salto a una subrutina cada vez que TF1 conmute a nivel alto. La RSI necesaria sería:
int_T1: mov a,P1 reti
Cuando el µctrl atiende una interrupción de un timer, automáticamente pone a cero la TFx correspondiente. La rutinas RSI en lugar de la instrucción habitual de retorno ret, finaliza con reti la cual además de proveer el retorno al programa principal, indica al µCtrl que una rutina de interrupción ha culminado.
79
Interrupciones
Otro ejemplo útil es la recepción de un carácter por el canal serie. Cada vez que el 8051 recibe un carácter activa un bit interno RI de un FSR. Un programa determinado debería examinar en un lazo sin fin el estado de RI para detectar la llegada de un nuevo carácter. Even-tualmente podría chequear a RI ocasionalmente a lo largo de un programa, pero esto implica la posibilidad de pérdidas de caracteres.Usando la interrupción de recepción del puerto serie, el arribo de un carácter genera una interrupción a la cual se asocia el código para la lectura del buffer de recepción del UART del 8051. Esto garantiza la integridad de la información recibida y deja libre al CPU para la realización de otras tareas.
80
Interrupciones
Usando la interrupción del timer T1, el código para leer a P1 cada 50 ms
es 334 veces más eficiente.
81
Interrupciones
El 8051 dispone 5 fuentes de interrupción:Internas:
Desborde del timer 0Desborde del timer 1Transmisión/recepción de un carácter por el puerto serie
Externas:Señal en INT0Señal en INT1
Eventos fuentes de interrupción
82
Interrupciones
En resumen, es posible configurar al 8051 para que cuando T0 desborde o sea recibido un carácter por el puerto serie, se ejecute la RSI correspondiente. Para permitir distinguir la fuente especifica de interrupción y ejecutar la RSI procedente, la aceptación de una solicitud es seguida por un salto a un vector de interrupción
83
Interrupciones
Existen 8 bytes libres entre cada vector de interrupción, en donde se puede colocar la RSI. Si este espacio de memoria no es suficiente, se inserta en el vector un salto hacia la primera instrucción de la RSI correspondiente.
84
Interrupciones
Las interrupciones pueden ser configuradas manipulando los bits de dos FSRs del 8051: IE e IP.
IE : Autoriza la ejecución de interrupciones.
IP: Asigna niveles de prioridad a las interrupciones.
Configurando las interrupciones
85
Interrupciones
Después de un RESET, las interrupciones son deshabilitadas. Debido a esto, para que un evento genere una interrupción el programa deberá habilitar el sistema de interrupciones y especificar cual o cuales fuentes serán habilitadas.
Habilitación de interrupciones
86
Interrupciones
Para habilitar/deshabilitar las interrupciones se manipula el registro FSR: IE.
87
Interrupciones
Por ejemplo, para habilitar la interrupción del timer 0, se ejecuta:
mov IE,#82H o la secuencia
setb EAsetb ET0
Antes de habilitar una interrupción particular, el sistema de interrupciones debe ser habilitado antes, cargando 1 en el bit de habilitación general de interrupciones: EA
Interrupciones
El 8051 verifica la ocurrencia de interrupciones al final de la ejecución de cada instrucción. La secuencia de consulta se realiza en el siguien-te orden:
1. Externa 0
2. Timer 0
3. Externa 1
4. Timer 1
5. Puerto serie
Esto significa que si una interrupción del canal serie y la del timer 1 ocurren simultáneamente, la de T1 será atendida primero. La del puerto serie será ejecutada una vez completada la del T1. 89
Interrupciones
El 8051 ofrece dos niveles de prioridad para las interrupciones:
Nivel alto
Nivel bajo
Esto hace posible asignar prioridad alta a ciertos eventos que sean considerados críticos para el buen desempeño de la aplicación.
Prioridad de las interrupciones
90
Interrupciones
Considere que un código autoriza las interrupciones de T1 y del puerto serie. Además se establece que la recepción de un carácter es un evento de mayor importancia que el desborde del timer. De modo que si se está ejecutando la RSI por desborde de T1, conviene que la interrupción serie interrumpa a la RSI del timer. Cuando se complete la recepción del carácter se continúa con la RSI de T1 y al culminar está, se regresa al programa principal.
Esto puede ser programado asignando prioridad alta a la interrupción del puerto serie y baja a la interrupción de T1.
91
Interrupciones
Para asignar el nivel de prioridad a las interrupciones se usan los bits el registro FSR: IP.
92
Interrupciones
93
Interrupciones
Para asignar el nivel de prioridad a las interrupciones se usan los bits el registro FSR: IP.
94
Interrupciones
Reglas para cuando se asigna prioridad a las Reglas para cuando se asigna prioridad a las interrupciones:interrupciones:
1. Una interrupción con prioridad alta puede interrumpir a otra con prioridad baja.
2. Las interrupciones de prioridad alta no pueden interrumpir a otra de igual prioridad.
3. Una interrupción de prioridad baja solo puede ejecutarse cuando ninguna interrupción está en curso.
4. Si dos solicitudes se generan en el mismo momento, primero será ejecutada la de prioridad alta. Si tienen la misma prioridad, se aceptará primero aquella que le corresponda según las prioridades establecidas en la secuencia de consulta. 95
Interrupciones
La figura muestra el proceso normal de atención a una interrupción .
96
Interrupciones
Los bits de estado son muestreados durante la fase 2 del estado 5 del ciclo de máquina C1, en el siguiente ciclo son examinados y se determina la interrupción a ejecutar. En los ciclos C3 y C4 se realiza un LCALL con el vector de interrupción y en el C5 se empieza a ejecutar la rutina de interrupción. El proceso descrito se altera si:
• Una interrupción de mayor o igual prioridad está en ejecución.
• No ha finalizado la instrucción en curso.
• La instrucción en proceso es RETI u otra que modifique IE o IP.
97
Interrupciones
• El contenido del PC es cargado en la pila.• Las interrupciones de igual o menor prioridad son
deshabilitadas.• Las banderas TF0 y TF1 son puestas a cero, cuando las
interrupciones son generadas por los timers.• Se transfiere el control del programa a la rutina de servicio.• Al final de la RSI, la ejecución de una instrucción RETI
restaura el contenido del PC.• El estado de las interrupciones es restaurado al estado
anterior a la ocurrencia de la interrupción.
Proceso de interrupción:Proceso de interrupción:
98
Interrupciones
Cuando se retorna desde la rutina RSI hacia el código que se ejecutaba cuando ocurrió la interrupción, el procesador debe ser restaurado al estado pre-interrupción. Es responsabilidad del programador salvar todo registro cuyo contenido deba ser preservado. Típicamente los registros que requieren eventual protección son:
• PSW• DPTR (DPH/DPL)• Acc• B• R0-R7
Protección de registrosProtección de registros
99
Interrupciones
Para proteger los cinco primeros registros de la lista anterior se inserta en la RSI instrucciones PUSH r al inicio y POP r antes de la instrucción RETI.
En lugar de salvar los registros R0-R7, la RSI puede usar una ventana de registros distintas a la usada por el código interrumpido.
Tenga en cuenta que no es buena idea usar PUSH R0 para preservar el registro R0 porque tal instrucción no será reconocida por el ensamblador. En su lugar use PUSH 00H si está activo el banco 0, PUSH 08H si el banco activo es el 1…
100
Interrupciones
A diferencia de las otra fuentes de interrupción, la interrupción del puerto serie puede ser disparada por dos eventos distintos. Existen dos banderas del puerto serie: RI es activada cuando se recibe el último bit de un carácter por el canal serie, mientras que TI es puesta 1 cuando se transmite el bit de parada de un carácter. En ambos casos se producirá una interrupción, si está habilitada, con vector de interrupción 23H.
Esto obliga a que el código que se inicia en tal dirección deberá primero distinguir si la interrupción se produjo por la transmisión (TI=1) o la recepción (RI=1) de un byte por el puerto serie. De acuerdo con el resultado, se transmitirá o se aceptará un carácter.
La interrupción del puerto serieLa interrupción del puerto serie
101
Interrupciones
jnb RI,exam_TI mov a,SBUF clr RIexam_TI: jnb TI,listo clr TI mov SBUF,a listo: reti
El código examina ambas banderas y procede de acuerdo con cual está activa. Si ambas lo están, ejecutará ambas secciones de código.
Es obligatorio que la RSI limpie las banderas TI y RI.102
Interrupciones
Usando las interrupciones de los timers debe generarse en P0.1 un tren de pulsos con ciclo de trabajo de 25 % y frecuencia 10 KHz. Simultáneamente debe parpadear un LED conectado a P0.0
Este ejemplo intenta demostrar como el microcontrolador puede ejecutar varias tareas si se usa la técnica de interrupciones. El periodo de la señal es de 100 µs y el ancho de pulso en alto es 25 µs. Se usa T0 en modo 2 para generar el periodo y a T1 en modo 1 le corresponderá mantener la salida en alto durante 25 µs.
Programa 11Programa 11
103
Interrupciones
El timer T0 se activa primero y cuando desborda la RSI de T0 pone la salida en alto y arranca a T1. Cuando TF1 conmuta a 1, la RSI de T1 retorna P0.1 a cero.
Observe que si TH1/TL1 es cargado con valores desde una tabla en memoria, se puede variar el tiempo alto de la onda con periodo constante. Esto permite realizar la técnica de PWM.
104
Interrupciones
105
Interrupciones
106
Interrupciones
Simulación con Simulación con PROTEUSPROTEUS
XTAL218
XTAL119
ALE30
EA31
PSEN29
RST9
P0.0/AD039
P0.1/AD138
P0.2/AD237
P0.3/AD336
P0.4/AD435
P0.5/AD534
P0.6/AD633
P0.7/AD732
P2.7/A1528
P2.0/A821
P2.1/A922
P2.2/A1023
P2.3/A1124
P2.4/A1225
P2.5/A1326
P2.6/A1427
P1.01
P1.12
P1.23
P1.34
P1.45
P1.56
P1.67
P1.78
P3.0/RXD10
P3.1/TXD11
P3.2/INT012
P3.3/INT113
P3.4/T014
P3.7/RD17
P3.6/WR16
P3.5/T115
U1
80C51
X1
CRYSTAL12 MHz
C133pF
C233pF
+5V
R68.2k
C310uF
+5V
R7
10k
A
B
1 2
U2:A
7406
R1
330
D1LED-RED
+5V
107
Interrupciones
Onda generada en P0.1Onda generada en P0.1
108
Interrupciones
Este ejemplo muestra el uso de las entradas de interrupción externas del 8051. El código debe hacer destellar un LED en P2.4 y muestrear una señal analógica por medio de un convertidor A/D conectado al P1. Si un interruptor SEL (en P2.6) está abierto, la onda adquirida debe enviarse sin alteraciones a un conversor D/A en el puerto 0. En caso que SEL esté cerrado, la señal debe ser invertida antes de ser escrita en el puerto de salida.
Programa 12Programa 12
109
Interrupciones
La frecuencia de muestreo es 3.9 KHz y debe usarse el timer T0 para generarla. El final de la conversión debe ser anunciado por el convertidor A/D mediante una interrupción en el terminal /INT0.Solución:Solución:Se diseña un sistema para procesamiento de señales, controlado por el programa mostrado más adelante.
110
Interrupciones
Sistema típico para procesamiento digital de señalesSistema típico para procesamiento digital de señales
111
Interrupciones
Sistema de control digitalSistema de control digital
112
Interrupciones
Conversión análogo digitalConversión análogo digital
Series de Fourier: fp(t) está constituida por tres componentes113
Interrupciones
Señal muestreada por impulsosSeñal muestreada por impulsos
114
Interrupciones
FUNCIONES CON MUESTRAS IGUALESFUNCIONES CON MUESTRAS IGUALES
115
Interrupciones
Teorema del muestreoTeorema del muestreo
Establece cuan pequeño debe ser T para reconstruir f(t), dando solamente el conjunto de muestras [fm]. El teorema del muestreo especifica restricciones sobre el contenido de frecuencias de f(t) y puede ser establecido como sigue:
Para recuperar Para recuperar f(t)f(t) exactamente, es necesario exactamente, es necesario muestrear la señal a una velocidad mayor que muestrear la señal a una velocidad mayor que
el doble de su frecuencia más alta.el doble de su frecuencia más alta.ffs s ≥ 2f≥ 2fHH
116
Interrupciones
ffs s ≥ 2f≥ 2fHH
ffss: frecuencia de muestreo: frecuencia de muestreoffHH: frecuencia más alta en la señal que se muestrea : frecuencia más alta en la señal que se muestrea
117
Interrupciones
Muestreo Muestreo al dobleal doble de la frecuencia más alta de la frecuencia más alta
118
Interrupciones
Muestreo a Muestreo a más del doblemás del doble de la frecuencia más alta de la frecuencia más alta
119
Interrupciones
Muestreo a Muestreo a menos del doblemenos del doble de la f de la fHH
120
Efecto Aliasing
T1 < T2
La forma de onda de f(t) tiene com-ponentes de fre-cuencia por encima de 1/2T2 pero no sobre 1/2T1.
T1 < T2
La forma de onda de f(t) tiene com-ponentes de fre-cuencia por encima de 1/2T2 pero no sobre 1/2T1.
121
Interrupciones
U4A
74LS04
12
+12V
D1
LED
P1.2
U2
DAC0808
121110
98765
14
15
4
2
16
A8A7A6A5A4A3A2A1
VR+
VR-
IOUT
IOUT
COMP
ENT U1
ADC0808
262728
12345
1216
10
97
171415818192021
252423
622
IN0IN1IN2IN3IN4IN5IN6IN7
REF+REF-
CLK
OEEOC
D0D1D2D3D4D5D6D7
A0A1A2
STARTALE
P0.4
-12V
C1100n
P0.1
P1.4
P0.7
R5
5.6k
-12V
P2.0
SAL
P1.1
U5A
7406
1 2
No se muestra el filtro pasa bajo anti-aliasingni el filtro PB de salida. El diagrama completopuede verse en el esquematico para simulaciónen PROTEUS.
P2.6
R6
330
P1.6
P0.0
P0.6
P0.3
P1.5-12V
+5V
P1.0 P2.4
U3 LM741/NS
3
2
74
6
5
1+
-
V+V-
OUT
OS2
OS1
SEL+12V
R4
5.6k
C21n
P1.3
+
-
U6
LF398
3
85
1 24 6 7
+5V
P2.7
P0.5
P0.2
+5V
P1.7
+5V
INT0
CLK
R25.6k
122
Interrupciones
123
Interrupciones
124
Interrupciones
125
Interrupciones
126
Interrupciones
Simulación con Simulación con PROTEUSPROTEUS
ENT
U3(CLOCK)
A26VREF+ 14
VEE 3
A15
IOUT 4
A37
A48
A59
A610
A711
A812
VREF- 15
COMP 16
U1
DAC0808
-12V
R15.6k
R2
5.6k
+5V
R3
5.6k
C20.1u
R9(1)
XTAL218
XTAL119
ALE30
EA31
PSEN29
RST9
P0.0/AD0 39
P0.1/AD1 38
P0.2/AD2 37
P0.3/AD3 36
P0.4/AD4 35
P0.5/AD5 34
P0.6/AD6 33
P0.7/AD7 32
P2.7/A15 28
P2.0/A8 21
P2.1/A9 22
P2.2/A10 23
P2.3/A11 24
P2.4/A12 25
P2.5/A13 26
P2.6/A14 27
P1.01
P1.12
P1.23
P1.34
P1.45
P1.56
P1.67
P1.78
P3.0/RXD 10
P3.1/TXD 11
P3.2/INT0 12
P3.3/INT1 13
P3.4/T0 14
P3.7/RD 17P3.6/WR 16P3.5/T1 15
U2
80C51
X1
CRYSTAL12 MHz
C333pF
C433pF
+5V
+5V
OUT1 21
ADD B24ADD A25
ADD C23
VREF(+)12
VREF(-)16
IN31
IN42
IN53
IN64
IN75
START 6
OUT5 8
EOC 7
OE 9
CLOCK 10
OUT2 20
OUT7 14OUT6 15
OUT8 17
OUT4 18OUT3 19
IN228IN127IN026
ALE22
U3
ADC0808
12
U4:A
74LS04
U3(START)
R4220
+5V
+12V
-12V
3
26
74
15
U5
LM741
LED
LED
SEL
SEL
SEL
R58.2k
C5
10uF
R61k
+5V+5V
12
U6:A
7406
D1LED-GREEN
LED
U3(EOC)
SUB1
SAMPLE/HOLD
S/H
AY
S/H
3
21
411
U7:A
LM324
-12V
+12V
R7
22k
C60.067uF
R8
1k
C7
0.002uF
R9
1k
SAL
ENT_ADC
5
67
411
U7:B
LM324
-12V
+12V
R10
22k
C80.067uF
R11
1k
C9
0.002uF
R12
1k
ENT_ADC
ENT_ADC
ENT
S/H
S/H
127
Interrupciones
PROTEUS PROTEUS no tiene modelos no tiene modelos parapara SAMPLE/HOLDSAMPLE/HOLD.. A
SW1DSWITCH
C110nF
Y
S/H
Los operacionales son ideales
Señal de entradaSeñal de entrada
Interrupciones
Señal de entrada y Señal de entrada y salida salida del S/Hdel S/H
Interrupciones
Ahora con control Ahora con control S/HS/H
Interrupciones
Interrupciones
Salida del Salida del S/HS/H y Salida del y Salida del Conversor D/AConversor D/A
Interrupciones
Interrupciones
Señal de salida con Señal de salida con SELSEL cerradocerrado
Interrupciones
Señales de Señales de entradaentrada y y salidasalida
Interrupciones
Señales de Señales de controlcontrol
Interrupciones
137
AdquisiciónAdquisición de una señal de una señal de de vozvoz
Interrupciones
Interrupciones
El ejemplo anterior fue modificado para adquirir una señal de audio. Debido a que el ancho de banda de la voz es de 3.4 KHz, el muestreo se realiza a 8.0 KHz.Un mensaje de voz fue grabado y almacenado en un archivo de audio: entrada_voz.wav y aplicado como entrada al sistema de adquisición.
139
Interrupciones
Modificaciones realizadas al circuito:Modificaciones realizadas al circuito:Debido a que la señal de entrada es bipolar; y en la práctica puede ser de magnitud diferente a la nuestra (± 1 V), se agrega a la etapa de entrada circuitos para modificar la amplitud de la entrada y ajustar su nivel DC. El conversor A/D debe recibir una onda de 0 a +5 V, en nuestro configuración. Otro circuito analógico hace posible ajustar el desplazamiento (offset) de la salida. La frecuencia de corte de los filtros pasa bajo, a la entrada y la salida fue modificada como corresponde.Se eliminó el interruptor SEL y también el LED parpadeante.
140
Interrupciones
ic=03
21
411
U1:A
LM324
5
67
411
U1:B
LM324
Vi
R1
10k
R2
100k
R3
10k
R4
10k
R5
10k
R610k
+5V
ESH
+12V
47%
RV2
100k
46%RV3
47k
+12V
-12V
-12V
C11
10uF
C6
10uF
C7
10uF
C8
10uF
C90.0022uF
ETAPA DE ENTRADA
C13
0.002uF
141
Interrupciones
10
98
411
U1:C
LM324
12
1314
411
U1:D
LM324
R13
10k
R14
10kSDAC
R15
10k
R1610k
R17
470k
R18
470k
Vo
+5V
53%
RV1
10k
+12V
-12V
-12V
+12V
C100.0028uF
C12
0.002uF
ETAPA DE SALIDA 142
Interrupciones
Modificaciones realizadas al programa:Modificaciones realizadas al programa:Al suprimir el LED, el programa principal se reduce a una instrucción que espera la interrupción de T0:
sjmp $El valor a cargar en T0 para un muestreo de 8.0 KHz es de 83H.En la rutina de servicio de INT0 se elimina el examen del interruptor SEL y la inversión de la señal.
143
Interrupciones
Simulación en Simulación en ProteusProteusU4(CLOCK)
A26
VREF+14
VEE3
A15
IOUT4
A37
A48
A59
A610
A711
A812
VREF-15
COMP16
U2
DAC0808
-12V
R85.6k
R9
5.6k
+5V
R10
5.6k
C20.1u
XTAL218
XTAL119
ALE30
EA31
PSEN29
RST9
P0.0/AD039
P0.1/AD138
P0.2/AD237
P0.3/AD336
P0.4/AD435
P0.5/AD534
P0.6/AD633
P0.7/AD732
P2.7/A1528
P2.0/A821
P2.1/A922
P2.2/A1023
P2.3/A1124
P2.4/A1225
P2.5/A1326
P2.6/A1427
P1.01
P1.12
P1.23
P1.34
P1.45
P1.56
P1.67
P1.78
P3.0/RXD10
P3.1/TXD11
P3.2/INT012
P3.3/INT113
P3.4/T014
P3.7/RD17
P3.6/WR16
P3.5/T115
U3
80C51
X1
CRYSTAL12 MHz
C333pF
C433pF
+5
V
+5V
OUT121
ADD B24
ADD A25
ADD C23
VREF(+)12
VREF(-)16
IN31
IN42
IN53
IN64
IN75
START6
OUT58
EOC7
OE9
CLOCK10
OUT220
OUT714
OUT615
OUT817
OUT418
OUT319
IN228
IN127
IN026
ALE22
U4
ADC0808
12
U5:A
74LS04
+12V
-12V
3
26
74
15
U6
LM741
R118.2k
C5
10uF
R121k
+5V+5V
SUB2
SAMPLE/HOLD
S/H
AY
SAL
SUB1(Vi)
SUB1
ETAP_ENT
Vi ESH
SUB3
ETAP_SAL
SDAC Vo
144
Interrupciones
Salida de Salida de 1.4 segundos1.4 segundos de de audioaudio
Versiones del 8051
El 8051 original fue diseñado por Intel. Las funciones de 4 de los primeros miembros de la familia MCS-51 son:El 8051 original fue diseñado por Intel. Las funciones de 4 de los primeros miembros de la familia MCS-51 son:
M E M O R I A I N T E R N A
T I P O C A P A C I D A D
R O M E P R O M N IN G U N A C Ó D I G O R A M T IM E R S T E C N O L O G ÍA 8 0 5 1 8 7 5 1 8 0 3 1 4 K 1 2 8 2 H M O S
8 0 5 1 A H 8 7 5 1 A H 8 0 3 1 A H 4 K 1 2 8 2 H M O S 8 0 5 2 A H 8 7 5 2 A H 8 0 3 2 A H 8 K 2 5 6 3 H M O S
8 0 C 5 1 B H 8 7 C 5 1 8 0 C 3 1 B H 4 K 1 2 8 2 C M O S
M E M O R I A I N T E R N A
T I P O C A P A C I D A D
R O M E P R O M N IN G U N A C Ó D I G O R A M T IM E R S T E C N O L O G ÍA 8 0 5 1 8 7 5 1 8 0 3 1 4 K 1 2 8 2 H M O S
8 0 5 1 A H 8 7 5 1 A H 8 0 3 1 A H 4 K 1 2 8 2 H M O S 8 0 5 2 A H 8 7 5 2 A H 8 0 3 2 A H 8 K 2 5 6 3 H M O S
8 0 C 5 1 B H 8 7 C 5 1 8 0 C 3 1 B H 4 K 1 2 8 2 C M O S
Existen al menos catorce fabricantes de microcon- troladores basados y compatibles con el 8051, quie- nes producen casi 300 versiones del dispositivo. En el programa µVision de Keil Software se encuentran las especificaciones de cada modelo.
Existen al menos catorce fabricantes de microcon- troladores basados y compatibles con el 8051, quie- nes producen casi 300 versiones del dispositivo. En el programa µVision de Keil Software se encuentran las especificaciones de cada modelo.
Sólo la empresa holandesa Philips produce 40 modelos.
Sólo la empresa holandesa Philips produce 40 modelos.
146
Versiones del 8051
• CPU 80C51.• 8 K x 8 de ROM/EPROM con expansión externa hasta 64 K.• 256 bytes de memoria RAM.• 2 Timers/Contadores estándares de 16 bits.• 1 Timer/Contador de 16 bits asociado a 4 registros de captura y 3
registros de comparación.• 2 canales PWM.• Convertidor A/D de 10 bits con 8 entradas multiplexadas.• Salida para bus serie I2C.• 5 Puertos de E/S de 8 bits más 1 compartido con entradas analógicas.• Frecuencia de operación hasta 30 MHZ (80C552). 16 MHz (87C552).
Características del 80C552Características del 80C552
147
µCTRL 80C552/87C552
RST15
P3.0/RxD24
P3.1/TxD25
P3.2/INT026
P3.3/INT127
P3.4/T028
P3.5/T129
P3.6/WR30
P3.7/RD31
XTAL234
XTAL135
VS
S1
36V
DD
2
P0.0/AD057
P0.1/AD156
P0.2/AD255
P0.3/AD354
P0.4/AD453
P0.5/AD552
P0.6/AD651
P0.7/AD750
EA/VPP49
ALE/PROG48
PSEN47
P2.0/A839
P2.1/A940
P2.2/A1041
P2.3/A1142
P2.4/A1243
P2.5/A1344
P2.6/A1445
P2.7/A1546
P1.0/CT0I16
P1.1/CT1I17
P1.2/CT2I18
P1.3/CT3I19
P1.4/T220
P1.6/SCL22
P1.7/SDA23
P1.5/RT221
P4.0/CMSR07
P4.1/CMSR18
P4.2/CMSR29
P4.3/CMSR310
P4.4/CMSR411
P4.5/CMSR512
P4.6/CMT013
P4.7/CMT114
P5.0/ADC01
P5.1/ADC168
P5.2/ADC267
P5.3/ADC366
P5.4/ADC465
P5.5/ADC564
P5.6/ADC663
P5.7/ADC762
STADC3
PWM04
PWM15
EW6
AVref-58
AVref+59
AV
SS
60A
VD
D61
VS
S2
37
148
µCTRL 80C552/87C552
149
Organización de la memoriaOrganización de la memoria
µCTRL 80C552/87C552
Igual que en el 80C51, pero con 8K de memoria interna de código, 256 bytes de RAM y nuevos FSR para el control de funciones adicionales.
150
El 805552 incluye un CAD de 10 bits con 8 canales de entrada. Estas son las especificaciones del CAD.8 canales de entrada multiplexados (Puerto 5).Resolución de 10 bits.Modo de conversión de una muestra o continuo.Disparo de conversión interno o externo.Genera interrupción al final de la conversión.
El convertidor A/DEl convertidor A/D
µCTRL 80C552/87C552
151
FSR para control del convertidor FSR para control del convertidor A/DA/D
µCTRL 80C552/87C552
152
Operación del CADOperación del CADPara iniciar internamente la conversión, se pone en 1 el bit ADCSADCON. ADCS puede ser puesto a uno por el programa solamente o por el hardware o el programa.El modo de arranque sólo por programa es seleccionado con el bit de control ADEXADCON = 0. La conversión se inicia cuando el código pone a 1 el bit ADCS. El inicio por hardware o programa se habilita con ADEXADCON = 1, e cuyo caso la conversión se inicia activando ADCS o aplicando un flanco de subida en el terminal externo STADC. En este último modo, debe ser aplicado STADC un nivel bajo durante un ciclo de máquina seguido por un nivel alto con duración mínima de 1 ciclo.
µCTRL 80C552/87C552
153
La bandera de ocupado ADCI (ADCON.4) es automáticamente puesta a 0 al inicio de la conversión y llevada a 1 al final de la misma. Una solicitud de interrupción puede ser generada cuando se completa una conversión. ADCI Debe ser llevada a cero por el código.El resultado de 10 bits es entregado en formato justificado a la izquierda en los FSR ADCH y ADCON. El bit ADCH.7 es el bit de mayor orden del resultado y ADCON.6 el menos significativo. Para una conversión de 8 bits sólo es necesario leer a ADCH. Los bits ADCON.2, ADCON.1 y ADCON.0 se usan para la selección de los canales de entrada.
µCTRL 80C552/87C552
154
El 80515A incluye un CAD de 10 bits con 8 canales de entrada. Estas son las especificaciones del CAD.8 canales de entrada multiplexados (Puerto 6).Resolución de 10 bits.Modo de conversión de una muestra o continuo.Disparo de conversión interno o externo.Genera interrupción al final de la conversión.
Señales con modulación de ancho de pulso (Señales con modulación de ancho de pulso (PWMPWM))
µCTRL 80C552/87C552
155
Una onda PWM tiene un tiempo base (periodo) y un tiempo durante el cual la salida permanece en nivel alto (ciclo de trabajo). El periodo es la duración a partir del flanco de subida, hasta cuando la salida se repite. La resolución de la salida PWM es la granularidad con la cual puede ser variado el ciclo de trabajo y por supuesto, la frecuencia PWM es el inverso del periodo.
Señales con modulación de ancho de pulso (Señales con modulación de ancho de pulso (PWMPWM))
µCTRL 80C552/87C552
156
µCTRL 80C552/87C552
157
µCTRL 80C552/87C552
158
µCTRL 80C552/87C552
El contador de 8 bits de la unidad PWM es de módulo 255, cuenta de 0 a 254. El valor en el contador es comparado con los contenidos de los registros PWM0 y PWM1. Si el número en uno de los registros es mayor que la cuenta, la salidas PWM que corresponda es puesta a cero. En caso que el contenido de los registros sea menor o igual que el estado del contador, entonces la salida PWM estará en nivel alto. La razón de ancho de pulso estará fijada por el contenido del registro PWMx y está en el rango de 0 a 1 y puede programarse con incrementos de 1/255. Si se carga en los registros PWM: 0 ó FFH, la salida será un nivel constante alto o bajo, respectivamente. Esto se debe a que el contador no alcanza FFH por ser de módulo 255, 159
µCTRL 80C552/87C552
160
µCTRL 80C552/87C552
161
µCTRL 80C552/87C552
Se trata de adquirir voltajes DC desde 8 potenciómetros conectados a las entradas análogas del 87C552. Los valores de las muestras deben ser promediados y escritos en el canal PWM0.El periodo de muestreo debe ser de 0.2 segundos y la frecuencia PWM 15.68 KHz
Programa 13Programa 13
162
µCTRL 80C552/87C552
RST15
P3.0/RxD24
P3.1/TxD25
P3.2/INT026
P3.3/INT127
P3.4/T028
P3.5/T129
P3.6/WR30
P3.7/RD31
XTAL234
XTAL135
VS
S1
36V
DD
2
P0.0/AD057
P0.1/AD156
P0.2/AD255
P0.3/AD354
P0.4/AD453
P0.5/AD552
P0.6/AD651
P0.7/AD750
EA/VPP49
ALE/PROG48
PSEN47
P2.0/A839
P2.1/A940
P2.2/A1041
P2.3/A1142
P2.4/A1243
P2.5/A1344
P2.6/A1445
P2.7/A1546
P1.0/CT0I16
P1.1/CT1I17
P1.2/CT2I18
P1.3/CT3I19
P1.4/T220
P1.6/SCL22
P1.7/SDA23
P1.5/RT221
P4.0/CMSR07
P4.1/CMSR18
P4.2/CMSR29
P4.3/CMSR310
P4.4/CMSR411
P4.5/CMSR512
P4.6/CMT013
P4.7/CMT114
P5.0/ADC01
P5.1/ADC168
P5.2/ADC267
P5.3/ADC366
P5.4/ADC465
P5.5/ADC564
P5.6/ADC663
P5.7/ADC762
STADC3
PWM04
PWM15
EW6
AVref-58
AVref+59
AV
SS
60A
VD
D61
VS
S2
37
87C552
X1
CRYSTAL16 MHzC1
33pFC233pF
+5
V
C3
2.2uF
+5V
RESET
+5V
SALIDA PWM
P6 P5 P4 P3 P2 P1 P0P7
+5V
10k X 8
C410uF
R1
5.1k
+88.8
Volts
32
U1:A
4050
163
µCTRL 80C552/87C552
164
µCTRL 80C552/87C552
165
µCTRL 80C552/87C552
166
El simulador PROTEUS no incluye el modelo del 87C552. de modo que para simular la ejecución del código anterior se recurre al paquete ya conocido µVision 2.Las herramientas de Keil Software permiten la simulación del hardware del µCtrl, incluyendo el conversor A/D y la salida PWM.
µCTRL 80C552/87C552
167
Simulación con Simulación con µVision 2µVision 2
µCTRL 80515A
Los valores de entrada y los resultados pueden verse en 3 ventanas de periféricos: la del centro corresponde al convertidor A/D y se especifican los voltajes aplicados a los 8 canales, el estado de los bits asociados al ADC y el resultado de la conversión. Para el instante mostrado ADCH= 2BH y el resultado de 10 bits 26EH. Observe que la tensión promedio es de 2.5 V. Los valores de la conversión se muestran a partir de la posición de memoria de datos 55H (canal 0) 56H (canal 1) … El promedio se carga en 61H. En este caso no es necesario convertir los resultados a BCD. La ventana de la derecha muestra el estado de T0 y la de la izquierda el canal PWM0, donde se ha cargado 7FH. En ejecución en tiempo real se puede seguir el timer PWM y verificar que la salida PWM0 está en nivel bajo el mismo tiempo que en alto, para un ciclo de trabajo de 50 %.
µCTRL 80C552/87C552
169
Con un circuito amplificador de corriente apropiado, las salidas PWM se puede usar para controlar un motor DC. La velocidad de giro de la máquina será proporcional al contenido del registro PWMx. En este caso es preferible aplicar la señal de salida a los terminales del motor sin modificarla previamente .Cuando las salidas se usen como convertidores D/A es necesario usar un filtro para alisar la señal y obtener la tensión requerida. Este puede ser una red RC si la frecuencia PWM es mucho mayor (5 a 10 veces) que la de la señal que sale. La alternativa es usar un filtro activo.Para procesamiento digital de señales se obtienen mejores resultados si la frecuencia PWM es al menos cinco veces mayor que la frecuencia más alta de la onda que se reconstruye.
µCTRL 80C552/87C552
170
Modos de consumo reducido
Modos de consumo reducidoModos de consumo reducido
Las versiones CMOS del 8051 permiten el funcionamiento del µCtrl en dos modos de consumo bajo:
1. Modo ocioso (idle)
2. Modo de potencia baja (Power down)
Ambos se controlan con los bits IDL y PD del registro FSR PCON. El mecanismo consiste en desconectar la señal de reloj a los subsistemas internos.
171
Modos de consumo reducido
172
Si se pone en 1 el bit IDL, el reloj no llega al CPU y se detiene la ejecución de instrucciones. En este caso no se afecta el funcionamiento de los timers, puerto serie y el sistema de interrupciones. Con el bit PD puesto a 1, se detiene el reloj y todo funcionamiento interno es suspendido.
Durante cualquier modo de consumo bajo, se preserva el contenido de la memoria y los puertos y FSRs retienen el valor que tenían antes de ejecutarse la instrucción que activo el modo.
La forma de restaurar el modo normal desde bajo consumo depende del modo activado.
Modos de consumo reducido
173
El modo idle puede desactivarse por la ejecución de una interrupción válida o por la aplicación de un reset al sistema. En el primer caso se ejecuta la rutina de servicio y la instrucción RETI, al final de la RSI, dirige el programa hacia la instrucción siguiente a aquella que activó el modo idle. Además, el bit IDL es puesto a cero. Para conocer si la interrupción ocurrió durante el modo normal o el de bajo consumo, pueden usarse las banderas GFn, poniéndolas a 1 antes de entrar al modo idle y examinándolas en la rutina de interrupción.
Al salir del modo idle por medio de un reset, se limpia el bit IDL y se retorna a la siguiente instrucción a la que activó el modo.
Para salir del modo Power Down, debe aplicarse un reset. Después de un operación de reinicio se pierde el contenido de los FSR pero se preserva la memoria de datos interna.
Modos de consumo reducido
174
EL Puerto de Comunicación
Serie
EL Puerto de Comunicación
Serie
Puerto serie
El 8051 incluye un puerto serie que hace posible la comunicación unidireccional (half duplex) o bidireccional (full duples) en modo sincrónico o asincrónico en sistemas punto a punto o punto a multipunto. Estas características simplifican la realización de redes de microcontroladores con dispositivos de la familia MCS-51.
El 8051 dispone de un UART integrado en el encapsulado, el cual re- presenta el puerto para comunicación serie del µCtrl. El proceso de transmisión/recepción se limita a escribir/leer un valor desde el puerto.
176
Puerto serie
Antes de usar el puerto serie es necesario configurar el modo de ope- ración y seleccionar la velocidad en baudios. Una vez realizada estas tareas se escribe al SFR SBUF (99H) un valor para escribir al puerto serie o se lee del mismo SFR para leer el puerto. SBUF representa dos registros con igual dirección.
El 8051 informa cuando finaliza la transmisión del carácter escrito y cuando ha recibido un dato, de modo que pueda ser procesado. El programador no debe preocuparse por la transmisión a nivel de bit.
177
Puerto serie
Configuración del Puerto SerieLo primero que debe hacerse para usar el puerto serie es indicarle al 8051: cuantos bits deseamos transmitir, la velocidad a usar, y como esta debe ser determinada. Para esta tarea se usa el FSR SCON (98H).
SCONSCON
178
Puerto serie
SM0-SM1 Serial Mode BitsSeleccionan 1 entre 4 modos de operación, como indica la tabla abajo. También indican como se calcula la velocidad. En los modos 0 y 2 es fijada por la frecuencia del reloj maestro, mientras que en los modos 1 y 3 es variable, determinada por cuan a menudo se sobrepasa el TIMER 1.
* La velocidad indicada es duplicada si PCON.7 (SMOD) es 1.* La velocidad indicada es duplicada si PCON.7 (SMOD) es 1. 179
Puerto serie
180
Puerto serie
181
Puerto serie
SM2 Serial Mode 2Es una bandera para comunicación multiprocesador. Cuando un dato es recibido el 8051 pone a 1 la bandera de recepción RI, indicando al programa que un byte fue recibido y que debe ser procesado. Cuando SM2 está activado, RI va a 1 sólo si el 9no bit recibido es 1. Esto es útil en ciertas aplicaciones avanzadas de transmisión serie.
REN Receiver EnableEn estado alto permite recibir datos por el puerto serie
182
Puerto serie
Los siguientes cuatro bits (0 a 3) son operacionales. Se usan durante el proceso de transmisión, no para configurar el UART.
TB8 Transmition Bit 8Es usado en los modos 2 y 3, en los cuales se transmiten 9 bits. Los primeros 8 corresponden al dato principal, mientras que el 9no bit es tomado desde TB8.
RB8 Reception Bit 8No se utiliza en el modo 0.Es el bit de parada en el modo 1, si SM1 es 0En los modos 2 y 3 es el noveno bit que se recibe
183
Puerto serie
TI Transmit InterruptCuando un programa escribe un dato al puerto serie, pasará cierta cantidad de tiempo antes que los bits sean cargados al puerto. Si el programa intenta enviar otro byte antes que el anterior sea escrito, la información se perdería. Con TI en 1 el 8051 indica al programa que el puerto serie está listo para enviar el próximo byte.RI Receive InterruptIgual que TI, pero para recepción de datos serie.
184
Puerto serie
185
Puerto serie
Seleccionando la velocidad del Puerto SerieUna vez configurado el modo del puerto serie, como se explicó anteriormente, el programa debe seleccionar la velocidad de baudios. Esto sólo aplica a los modos del 1 y 3. En los modos 0 y 2, la velo- cidad es determinada en base a la frecuencia del oscilador 2.
MODO 0: la velocidad es siempre la frecuencia del oscilador dividida por 12. Esto significa que con un cristal de 11.059 MHz, la velocidad será 921,583 baudios para el modo 0. MODO 2: la velocidad corresponde a la frecuencia del oscilador dividida por 64, así que una f = 11.059Mhz fijará una velocidad de 172,797 baudios.
186
MODOS 1 y 3: La velocidad es determinada por la frecuencia con la cual el timer 1 se sobrepasa. Hay muchas formas de lograr una fre cuencia de el sobrepaso del timer 1 de modo de modo que correspon- da a una determinada velocidad en baudios, pero el método más co- mún es poner al timer 1 en el modo de 8 bits con autorrecarga (T1 en MODO 2) y cargar un valor en TH1 que permita generar la velocidad deseada.
Puerto serie
187
La expresión para la velocidad usando T1 es dada por:
Puerto serie
El tiempo de desborde de T1 en modo 2 se calcula con:
188
Puerto serie
189
Puerto serie
Por ejemplo para fijar la velocidad de 19200 baudios con un cristal de 11.059 MHz, se debe:1.Configurar el puerto serie en el modo 1 ó 3.2.Configura temporizador T1 en modo 2 ( 8 bits con autorecarga).3.Cargar TH1 Con FDH (253).4.Poner a 1 PCON.7 (SMOD).
190
Puerto serieRecepción por el puerto seriePara recibir un dato una vez configurado el puerto serie, se lee el registro FSR SBUF (99H), después que el 8051 haya activado la bandera RI en SCON. Para que el programa espere por la recepción de un carácter para cargarlo en el registro acumulador, puede usarse el código siguiente:
jnb RI,$mov a,SBUF
Por supuesto el µCtrl deberá esperar continuamente por el arribo de un carácter. Cuando el UART recibe el bit de parada activa a RI. Este modo de operación puede ser mejorado usando las interrupciones del puerto serie. Más adelante se presentarán los ejemplos corres-pondientes.
191
Puerto serie
Transmisión por el puerto serieSi se quiere enviar la letra P por el canal serie , se debe ejecutar:
mov SBUF,#’P’Antes de transmitir un carácter debe tenerse la seguridad que el anterior ya ha sido enviado. El 8051 notifica que un carácter ha sido enviado activando la bandera TI en SCON. El siguiente código transmite un carácter y espera que TI se active , antes de continuar.
clr TImov SBUF,a jnb RI,$.
192
Puerto serie
Escribir un programa que presente el siguiente menú en la pantalla.
Programa 14Programa 14
193
Puerto serie
Al pulsar la tecla <ENTER> se podrá realizar una nueva selección. La velocidad de transmisión es de 9600 baudios.
194
Puerto serie
195
Puerto serie
196
Puerto serie
197
Puerto serie
198