TEMPORIZADORES Y CONTADORES (T/C)(Timers/Counters)
TEMPORIZADORES Y CONTADORES 2
Objetivos
? Conocer y comprender la utilidad de los temporizadores y contadores.
? Comprender su estructura y lógica de funcionamiento.
? Sintetizar programas que hagan uso del sistema de contadores/temporizadores.
? Sintetizar manejadores de interrupción para los contadores/temporizadores.
TEMPORIZADORES Y CONTADORES 3
Resumen de contenidos
1 Introducción.
2 Los Temporizadores/Contadores 0 y 1.2.1 Características básicas.2.2 Hardware involucrado.2.3 Diagrama de bloques.2.4 Registros SFR TMOD y TCON.2.5 Modos de funcionamiento.2.6 Ejemplos.
3 Interrupciones asociadas a los contadores/temporizadores.
4 Ejemplos de aplicación.4.1 Medición del ancho de un pulso positivo.4.2 Medición del período de una señal.4.3 Generación de un pulso.4.4 Generación de una señal PWM.
TEMPORIZADORES Y CONTADORES 4
1 - Introducción
TEMPORIZADORES Y CONTADORES 5
1 - Introducción
? Contabilizar eventos externos– Contar cajas en una cinta transportadora, vehículos en una carretera, ...– Velocidad de un motor (encoder)
Muchas aplicaciones de automatización y regulación necesitan ...
?Medir frecuencias/periodos de señales digitales– Sensores.– Receptores de señales infrarrojas, radio ...
? Realizar retardos de precisión o tareas periódicas– Semáforos, pasos a nivel, ...– Generación de señales PWM, ondas cuadradas, control de potencia
TEMPORIZADORES Y CONTADORES 6
1 - Introducción
Motor Encoder
Pulsos
FrecuenciaTensión
PIDanalógico
Referencia
Puenteen H
ModuladorPWM
PWM
EJEMPLO: Control velocidad motor asignatura Regulación Automática
TEMPORIZADORES Y CONTADORES 7
1 - Introducción
EncoderMotor
Pulsos
Puenteen H
PWM
PIDdigital
Referencia
Microcontrolador
EJEMPLO: Control velocidad motor asignatura Regulación Automática
TEMPORIZADORES Y CONTADORES 8
1 - Introducción
EJEMPLO:
? El encoder genera una onda cuadrada con frecuencia proporcional a la velocidad del motor? Midiendo el ancho del periodo ON (Ton) se podría calcular la velocidad
Toff = “0” Ton = “1”
Encoder
Pulsos
TEMPORIZADORES Y CONTADORES 9
1 - Introducción
Medir ancho de un pulso
“0” “1”
Cuenta=0
Nivel0?
SI
Incrementacuenta
Nivel1?
SI
Encoder
Pulsos µCP1.0
... MOV DPTR,#0es_0: JNB P1.0,es_0es_1: INC DPTR JB P1.0,es_1 ...
... MOV DPTR,#0es_0: JNB P1.0,es_0es_1: INC DPTR JB P1.0,es_1 ...
... MOV DPTR,#0es_0: JNB P1.0,es_0es_1: INC DPTR JB P1.0,es_1 ...
TEMPORIZADORES Y CONTADORES 10
1 - Introducción
Medir ancho de un pulso
“0” “1”
Cuenta=0
Nivel0?
SI
Incrementacuenta
Nivel1?
SI
Encoder
Pulsos µCP1.0
unsigned int contador=0;while (!P1.0) {}while (P1.0) { contador++; }
TEMPORIZADORES Y CONTADORES 11
1 - Introducción
? Problemas al resolverlo por software.– Hay que saber cuánto tardan en ejecutarse las instrucciones.– No se puede trabajar con frecuencias altas.– Si hay interrupciones es imposible lograr precisión.– La CPU desperdicia su tiempo y no puede hacer otras cosas.
? Los microcontroladores integran temporizadores/contadores (T/C).– No necesitan circuitos adicionales (integración).– Sin sobrecargar a la CPU (funcionamiento en paralelo con la CPU).– Programación sencilla y transparente.
? Solución: Emplear contadores y/o temporizadores (T/C).
TEMPORIZADORES Y CONTADORES 12
1 - Introducción
? Los T/C tienen innumerables aplicaciones.– Contabilización de eventos.
• Encoders, contadores de objetos, ...
– Generación de señales digitales. PWM.• Control de potencia, motores de continua, motores AC, motores P. a P., ...• Generación de señales para transmisión/recepción de datos.
– Medición de señales digitales.• Sensores de humedad, de distancia, de luminosidad...
– Temporizaciones.• Retardos, tareas periódicas, planificación de tareas, ...
? Cada generación de microcontroladores añade más capacidad.– Intel 8051 -> 2 T/C: T/C0, T/C1– Intel 8052 -> 3 T/C: T/C0, T/C1, T/C2– Siemens SAB80C517 -> 3 T/C: T/C0, T/C1, T/C2 , unidad comparación/captura– Motorola MPC555 (32 bits) -> 2 Time Processor Unit 3 (TPU3)– Atmel T89C51CC01 -> 3 T/C: T/C0, T/C1, T/C2 , unidad comparación/captura
TEMPORIZADORES Y CONTADORES 13
2 – Los Temporizadores/Contadores 0 y 1T/C 0 y T/C 1 en la familia MCS-51
TEMPORIZADORES Y CONTADORES 14
? Dos temporizadores/contadores “casi” idénticos: T/C0 y T/C1
? Registro de cuenta de hasta 16 bits
– Cuenta tiempo: TEMPORIZADOR
– Cuenta eventos: CONTADOR
? Contabilización ascendente (cuenta = cuenta+1).
? El desborde se usa para detectar el fin de cuenta/temporización.
? Dispone de hardware/software para arrancar y parar la cuenta.
2 - T/C 0 y T/C 1 en la familia MCS-51
Características básicas
TEMPORIZADORES Y CONTADORES 15
? A OTRO SITIO
2.1 Características básicas
1 0 0 1 0 1 1 1 0 1 0 0 0 1 1 0
Valor cuenta = 9746h = 38726
2 - T/C 0 y T/C 1 en la familia MCS-51
TEMPORIZADORES Y CONTADORES 16
2.2 Hardware involucrado
TEMPORIZADOR/CONTADOR 0 (T/C 0)– Registros (zona SFR):
• TMOD (modo operación) (dir. 89h por máscara).• TCON (control operación) (dir. 88h bit a bit).• TL0, TH0 (registros cuenta) (dir. 8Ah y 8Ch).
– Terminales (Pines):• T0 (P3.4) (entrada de pulsos).• /INT0 (P3.2) (control de puerta).
TEMPORIZADOR/CONTADOR 1 (T/C 1)– Registros (zona SFR):
• TMOD (modo operación) (dir. 89h por máscara).• TCON (control operación) (dir. 88h bit a bit).• TL1, TH1 (registros cuenta) (dir. 8Bh y 8Dh).
– Terminales (Pines):• T1 (P3.5) (entrada de pulsos).• /INT1 (P3.3) (control de puerta).
2 - T/C 0 y T/C 1 en la familia MCS-51
TEMPORIZADORES Y CONTADORES 17
2.3 Diagrama de bloques
TEMPORIZADOR/CONTADOR 0 (T/C 0)– SFR: TMOD (modo operación), TCON (control operación), TL0, TH0 (registros cuenta).– Pines: T0 (P3.4) (entrada de pulsos), /INT0 (P3.2) (control de puerta).
TEMPORIZADOR/CONTADOR 1 (T/C 1)– SFR: TMOD (modo operación), TCON (control operación), TL1, TH1 (registros cuenta).– Pines: T1 (P3.5) (entrada de pulsos), /INT1 (P3.3) (control de puerta).
Controlde puerta
ContadorGeneración:
- Eventos externos
- Señal reloj interno
2 - T/C 0 y T/C 1 en la familia MCS-51
TEMPORIZADORES Y CONTADORES 18
2.3 Diagrama de bloques
TEMPORIZADOR/CONTADOR 0 (T/C 0)– SFR: TMOD (modo operación), TCON (control operación), TL0, TH0 (registros cuenta).– Pines: T0 (P3.4) (entrada de pulsos), /INT0 (P3.2) (control de puerta).
TEMPORIZADOR/CONTADOR 1 (T/C 1)– SFR: TMOD (modo operación), TCON (control operación), TL1, TH1 (registros cuenta).– Pines: T1 (P3.5) (entrada de pulsos), /INT1 (P3.3) (control de puerta).
Contador
OSC 1/12
C/T
GATE
TR0
TF0
pinT0
(P3.4)
pin/INT0
(P3.2)
1
01 = cerrado
Contador
Controlde puerta
2 - T/C 0 y T/C 1 en la familia MCS-51
TEMPORIZADORES Y CONTADORES 19
2.3 Diagrama de bloques
TEMPORIZADOR/CONTADOR 0 (T/C 0)– SFR: TMOD (modo operación), TCON (control operación), TL0, TH0 (registros cuenta).– Pines: T0 (P3.4) (entrada de pulsos), /INT0 (P3.2) (control de puerta).
TEMPORIZADOR/CONTADOR 1 (T/C 1)– SFR: TMOD (modo operación), TCON (control operación), TL1, TH1 (registros cuenta).– Pines: T1 (P3.5) (entrada de pulsos), /INT1 (P3.3) (control de puerta).
Contador
OSC 1/12
C/T
GATE
TR0
TF0
pinT0
(P3.4)
pin/INT0
(P3.2)
1
01 = cerrado
Contador
2 - T/C 0 y T/C 1 en la familia MCS-51
TEMPORIZADORES Y CONTADORES 20
2.3 Diagrama de bloques
TEMPORIZADOR/CONTADOR 0 (T/C 0)– SFR: TMOD (modo operación), TCON (control operación), TL0, TH0 (registros cuenta).– Pines: T0 (P3.4) (entrada de pulsos), /INT0 (P3.2) (control de puerta).
TEMPORIZADOR/CONTADOR 1 (T/C 1)– SFR: TMOD (modo operación), TCON (control operación), TL1, TH1 (registros cuenta).– Pines: T1 (P3.5) (entrada de pulsos), /INT1 (P3.3) (control de puerta).
Contador
OSC 1/12
C/T
GATE
TR0
TF0
pinT0
(P3.4)
pin/INT0
(P3.2)
1
01 = cerrado
2 - T/C 0 y T/C 1 en la familia MCS-51
TEMPORIZADORES Y CONTADORES 21
2.3 Diagrama de bloques
TEMPORIZADOR/CONTADOR 0 (T/C 0)– SFR: TMOD (modo operación), TCON (control operación), TL0, TH0 (registros cuenta).– Pines: T0 (P3.4) (entrada de pulsos), /INT0 (P3.2) (control de puerta).
TEMPORIZADOR/CONTADOR 1 (T/C 1)– SFR: TMOD (modo operación), TCON (control operación), TL1, TH1 (registros cuenta).– Pines: T1 (P3.5) (entrada de pulsos), /INT1 (P3.3) (control de puerta).
Contador
OSC 1/12
C/T
GATE
TR0
TF0
pinT0
(P3.4)
pin/INT0
(P3.2)
1
01 = cerrado
Interrupción
(si está habilitada)
2 - T/C 0 y T/C 1 en la familia MCS-51
TEMPORIZADORES Y CONTADORES 22
Contador
OSC 1/12
C/T
GATE
TR0
TF0
pinT0
pin/INT0
1
01 = cerrado
Interrupción
2 - T/C 0 y T/C 1 en la familia MCS-51
2.3 Diagrama de bloques
T/C 1
T/C 0
TEMPORIZADORES Y CONTADORES 23
Contador
OSC 1/12
C/T
GATE
TR0
TF0
pinT0
pin/INT0
1
01 = cerrado
Interrupción
b7 TMOD, dir. 89h, por máscara b0GATE C / T M1 M0 GATE C / T M1 M0
T/C 1 T/C 0
b7 TCON, dir. 88h, bit a bit b0TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
T/C 0T/C 1
2.4 Registros SFR TMOD y TCON
2 - T/C 0 y T/C 1 en la familia MCS-51
TEMPORIZADORES Y CONTADORES 24
Contador
OSC 1/12
C/T
GATE
TR0
TF0
pinT0
pin/INT0
1
01 = cerrado
Interrupción
b7 TCON, dir. 88h, bit a bit b0TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
2.4 Registros SFR TMOD y TCON
b7 TMOD, dir. 89h, por máscara b0GATE C / T M1 M0 GATE C / T M1 M0
T/C 1 T/C 0
2 - T/C 0 y T/C 1 en la familia MCS-51
TEMPORIZADORES Y CONTADORES 25
b7 TCON, dir. 88h, bit a bit b0TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
Contador
OSC 1/12
C/T
GATE
TR0
TF0
pinT0
pin-INT0
1
01 = cerrado
InterrupciónBit C/TSelección modo
contador o temporizador. 0 -> temporizador
1 -> contador
2.4 Registros SFR TMOD y TCON
b7 TMOD, dir. 89h, por máscara b0GATE C / T M1 M0 GATE C / T M1 M0
T/C 1 T/C 0
2 - T/C 0 y T/C 1 en la familia MCS-51
TEMPORIZADORES Y CONTADORES 26
Contador
OSC 1/12
C/T
GATE
TR0
TF0
pinT0
pin/INT0
1
01 = cerrado
Interrupción
? Operación como temporizador– Cuentan ciclos de máquina (1 ciclo máquina (C.M.) = 12 ciclos de reloj).
? Operación como contador– Detección de flancos de bajada en el pin T0 (P3.4).– Muestreo cada CM -> Flanco de bajada = detectar “1” y después “0”.– Máxima frecuencia detectable será 1/24 frecuencia reloj.
“0”“1”
C.M.
“0”“0”
C.M.
01
2.4 Registros SFR TMOD y TCON
pinT0
Pulso muy estrecho:¡se pierde!
2 - T/C 0 y T/C 1 en la familia MCS-51
TEMPORIZADORES Y CONTADORES 27
Contador
OSC 1/12
C/T
GATE
TR0
TF0
pinT0
pin/INT0
1
01 = cerrado
Interrupción
b7 TCON, dir. 88h, bit a bit b0TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
Bit TR0Activación T/C 0.
0 -> desactivado1 -> activado
2.4 Registros SFR TMOD y TCON
b7 TMOD, dir. 89h, por máscara b0GATE C / T M1 M0 GATE C / T M1 M0
T/C 1 T/C 0
2 - T/C 0 y T/C 1 en la familia MCS-51
TEMPORIZADORES Y CONTADORES 28
Contador
OSC 1/12
C/T
GATE
TR0
TF0
pinT0
pin/INT0
1
01 = cerrado
Interrupción
b7 TCON, dir. 88h, bit a bit b0TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
Bit GATEControl de puerta.
0 -> interno (software) 1 -> externo (hardware)
2.4 Registros SFR TMOD y TCON
b7 TMOD, dir. 89h, por máscara b0GATE C / T M1 M0 GATE C / T M1 M0
T/C 1 T/C 0
2 - T/C 0 y T/C 1 en la familia MCS-51
TEMPORIZADORES Y CONTADORES 29
Contador
OSC 1/12
C/T
GATE
TR0
TF0
pinT0
pin/INT0
1
01 = cerrado
Interrupción
b7 TCON, dir. 88h, bit a bit b0TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
Bit GATEControl de puerta.
0 -> interno (software) 1 -> externo (hardware)
D1 0 D
2.4 Registros SFR TMOD y TCON
b7 TMOD, dir. 89h, por máscara b0GATE C / T M1 M0 GATE C / T M1 M0
T/C 1 T/C 0
2 - T/C 0 y T/C 1 en la familia MCS-51
TEMPORIZADORES Y CONTADORES 30
Contador
OSC 1/12
C/T
GATE
TR0
TF0
pinT0
pin/INT0
1
01 = cerrado
Interrupción
b7 TCON, dir. 88h, bit a bit b0TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
Bit GATEControl de puerta.
0 -> interno (software) 1 -> externo (hardware)
D0 1 1
2.4 Registros SFR TMOD y TCON
b7 TMOD, dir. 89h, por máscara b0GATE C / T M1 M0 GATE C / T M1 M0
T/C 1 T/C 0
2 - T/C 0 y T/C 1 en la familia MCS-51
TEMPORIZADORES Y CONTADORES 31
Contador
OSC 1/12
C/T
GATE
TR0
TF0
pinT0
pin/INT0
1
01 = cerrado
Interrupción
b7 TCON, dir. 88h, bit a bit b0TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
Modo Modo 0: Contador 13 bits. Modo 1: Contador 16 bits. Modo 2: Cont. 8 bit autorrecarga Modo 3: Desdoble (T/C0)
2.4 Registros SFR TMOD y TCON
b7 TMOD, dir. 89h, por máscara b0GATE C / T M1 M0 GATE C / T M1 M0
T/C 1 T/C 0
2 - T/C 0 y T/C 1 en la familia MCS-51
TEMPORIZADORES Y CONTADORES 32
Contador
OSC 1/12
C/T
GATE
TR0
TF0
pinT0
pin/INT0
1
01 = cerrado
Interrupción
b7 TCON, dir. 88h, bit a bit b0TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
ContadorRegistros SFR TH0 y TL0.
Ascendente.Y cuando desborda ...
111...100111...101111...110111...111000...000000...001000...010 1
Interrupción2.4 Registros SFR TMOD y TCON
b7 TMOD, dir. 89h, por máscara b0GATE C / T M1 M0 GATE C / T M1 M0
T/C 1 T/C 0
2 - T/C 0 y T/C 1 en la familia MCS-51
TEMPORIZADORES Y CONTADORES 33
Contador
OSC 1/12
C/T
GATE
TR0
TF0
pinT0
pin/INT0
1
01 = cerrado
Interrupción
b7 TCON, dir. 88h, bit a bit b0TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
Bit TF0Timer flag 0.
1 -> desbordePERO NO SE DETIENE
EL CONTADOR
2.4 Registros SFR TMOD y TCON
b7 TMOD, dir. 89h, por máscara b0GATE C / T M1 M0 GATE C / T M1 M0
T/C 1 T/C 0
2 - T/C 0 y T/C 1 en la familia MCS-51
TEMPORIZADORES Y CONTADORES 34
Ejemplo:
Se desea temporizar un intervalo de 125 ?s. ¿Cuál es el valor acargar como cuenta inicial?
Para un valor de fOSC=12MHz:
Duración de 1 Ciclo Máquina:
1
12MHz*12=1? s
Si se utilizan 8 bits: 256-125=131=83H
Si se utilizan 16 bits: 65536-125=65411=FF83H
Duración=125?s=1?s*125Duración=125?s=1?s*Cuenta
THx=? TLx=131
THx=255 TLx=131
THx=? TLx=131
THx=255 TLx=131
2 - T/C 0 y T/C 1 en la familia MCS-51
TEMPORIZADORES Y CONTADORES 35
Ejemplo:
Se desea temporizar un intervalo de 2s. ¿Cuál es el valor acargar como cuenta inicial? (fOSC=12MHz)
Duración=2000000? s=1? s*Cuenta
Duración=2000000? s=1? s*2000000 No cabe en 16 bits
No cabe en 16 bits
Solución: Contabilizar desbordes del contador (Con 16 bits cada
desborde equivale a 65536 ? s).
Desbordes = 30 Resto_hasta_completar = 33920
Cuenta = 30*65536+33920 = 2000000
2 - T/C 0 y T/C 1 en la familia MCS-51
TEMPORIZADORES Y CONTADORES 36
M1 M0 Modo
0 0 0Temporizador/contador de 8 bits con THx. TLx actúa como preescala de 5 bits (los demenor peso) (13 bits en total). (los 3 bits de mayor peso de TLx son de valorindeterminado)
0 1 1 Temporizador/contador de 16 bits, con THx y TLx en cascada
1 0 2 Temporizador/contador de 8 bits con autorrecarga. THx contiene el valor de recargapara TLx tras cada desbordamiento
1 1 3Para el temporizador 0, TL0 y TH0 son dos temporizadores/contadores de 8 bits,controlados con los bits de control de los temporizadores 0 y 1 respectivamente.Temporizador 1 inactivo.
2.5 Modos de funcionamiento
2 - T/C 0 y T/C 1 en la familia MCS-51
TEMPORIZADORES Y CONTADORES 37
Contador
OSC 1/12
C/T
GATE
TR0
TF0
pinT0
pin/INT0
1
01 = cerrado
Interrupción
M1 M0 Modo
0 0 0 Temporizador/contador de 8 bits con THx. TLx actúa como preescala de 5 bits (13 bitsen total).
0 1 1 Temporizador/contador de 16 bits, con THx y TLx en cascada
1 0 2 Temporizador/contador de 8 bits con autorrecarga. THx contiene el valor de recargapara TLx tras cada desbordamiento
1 1 3Para el temporizador 0, TL0 y TH0 son dos temporizadores/contadores de 8 bits,controlados con los bits de control de los temporizadores 0 y 1 respectivamente.Temporizador 1 inactivo.
TL05 bits
de menor peso
TH08 bits
MODO 0: Contador de 13 bits
LSB MSB
13 bits
2.5 Modos de funcionamiento
2 - T/C 0 y T/C 1 en la familia MCS-51
TEMPORIZADORES Y CONTADORES 38
LSB MSB
16 bits
Contador
OSC 1/12
C/T
GATE
TR0
TF0
pinT0
pin/INT0
1
01 = cerrado
Interrupción
M1 M0 Modo
0 0 0 Temporizador/contador de 8 bits con THx. TLx actúa como preescala de 5 bits (13 bitsen total).
0 1 1 Temporizador/contador de 16 bits, con THx y TLx en cascada
1 0 2 Temporizador/contador de 8 bits con autorrecarga. THx contiene el valor de recargapara TLx tras cada desbordamiento
1 1 3Para el temporizador 0, TL0 y TH0 son dos temporizadores/contadores de 8 bits,controlados con los bits de control de los temporizadores 0 y 1 respectivamente.Temporizador 1 inactivo.
TL0 8 bits
TH08 bits
MODO 1: Contador de 16 bits
2.5 Modos de funcionamiento
2 - T/C 0 y T/C 1 en la familia MCS-51
TEMPORIZADORES Y CONTADORES 39
Contador
OSC 1/12
C/T
GATE
TR0
TF0
pinT0
pin/INT0
1
01 = cerrado
Interrupción
M1 M0 Modo
0 0 0 Temporizador/contador de 8 bits con THx. TLx actúa como preescala de 5 bits (13 bitsen total).
0 1 1 Temporizador/contador de 16 bits, con THx y TLx en cascada
1 0 2 Temporizador/contador de 8 bits con autorrecarga. THx contiene el valor de recargapara TLx tras cada desbordamiento
1 1 3Para el temporizador 0, TL0 y TH0 son dos temporizadores/contadores de 8 bits,controlados con los bits de control de los temporizadores 0 y 1 respectivamente.Temporizador 1 inactivo.
TL0 8 bits
TH08 bits
MODO 2: Contador de 8 bits con autorrecarga
Recarga
2.5 Modos de funcionamiento
2 - T/C 0 y T/C 1 en la familia MCS-51
TEMPORIZADORES Y CONTADORES 40
M1 M0 Modo
0 0 0 Temporizador/contador de 8 bits con THx. TLx actúa como preescala de 5 bits (13 bitsen total).
0 1 1 Temporizador/contador de 16 bits, con THx y TLx en cascada
1 0 2 Temporizador/contador de 8 bits con autorrecarga. THx contiene el valor de recargapara TLx tras cada desbordamiento
1 1 3Para el temporizador 0, TL0 y TH0 son dos temporizadores/contadores de 8 bits,controlados con los bits de control de los temporizadores 0 y 1 respectivamente.Temporizador 1 inactivo.
MODO 3: Desdoble T/C 0
2.5 Modos de funcionamiento
OSC 1/12
TL0??????
TH0??????
TF0
pin T0
Intr
TR1
TF1 Intr
GATE
pin INT0
TR0
TL0 8 bits
TH08 bits
C/T1
0
2 - T/C 0 y T/C 1 en la familia MCS-51
TEMPORIZADORES Y CONTADORES 41
Se desea contabilizar los vehículos que circulan por una carretera.NO excederán de 30.000.
? PASO 1: ¿Contador o temporizador?– Contador.
? PASO 2: ¿Control puerta externo o interno? (GATE)– Interno.
? PASO 3: Modo 0 (13 bits), Modo 1 (16 bits) o Modo 2 (8 bits rec.)– Modo 1. En principio podemos contar hasta 65535.
? PASO 4: ¿Valor inicial del contador?– 0.
2.6 Ejemplo de un contador
µCT0 0
Cuenta
12
2 - T/C 0 y T/C 1 en la familia MCS-51
TEMPORIZADORES Y CONTADORES 42
– Contador.– Interno– Modo 1. En principio podemos contar hasta 65535.– 0.
b7 TMOD, dir. 89h, por máscara b0GATE C / T M1 M0 GATE C / T M1 M0
T/C 1 T/C 0
b7 TCON, dir. 88h, bit a bit b0TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
10 10
TH0=0x00; TL0=0x00;
2.6 Ejemplo de un contadorSe desea contabilizar los vehículos que circulan por una carretera.NO excederán de 30.000.
2 - T/C 0 y T/C 1 en la familia MCS-51
TEMPORIZADORES Y CONTADORES 43
b7 TMOD, dir. 89h, por máscara b0GATE C / T M1 M0 GATE C / T M1 M0
T/C 1 T/C 0
b7 TCON, dir. 88h, bit a bit b0TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
10 10
TH0=0x00; TL0=0x00;
2.6 Ejemplo de un contador
Se desea contabilizar los vehículos que circulan por una carretera. NO excederán de 30.000.
sfr TMOD=0x89,TCON=0x88,TH0=0x8C,TL0=0x8A; sbit TF0=TCON^5, TR0=TCON^4; void main(void) { int vehiculos;/* Para contabilizar vehículos */ TMOD = 0x05; /* 0101(b => T/C 0, control sw, contador, modo 1 */ TH0=0x00; TL0=0x00; /* sigue ... */ }
2 - T/C 0 y T/C 1 en la familia MCS-51
TEMPORIZADORES Y CONTADORES 44
sfr TMOD=0x89,TCON=0x88,TH0=0x8C,TL0=0x8A; sbit TF0=TCON^5, TR0=TCON^4; void main(void) { int vehiculos; TMOD = 0x05; /* T/C 0, modo 1, soft, contador */ TH0=0x00; TL0=0x00; TR0=1; /* arrancar timer */ while(1) { /* hacer otras cosas */ TR0=0; /* evitar condiciones de carrera */ vehiculos = TH0*256 + TL0; TR0=1; } }
vehiculos = TH0;vehiculos = vehiculos << 8;vehiculos = vehiculos | TL0;
2.6 Ejemplo de un contadorSe desea contabilizar los vehículos que circulan por una carretera.NO excederán de 30.000.
2 - T/C 0 y T/C 1 en la familia MCS-51
TEMPORIZADORES Y CONTADORES 45
sfr TMOD=0x89,TCON=0x88,TH0=0x8C,TL0=0x8A; sbit TF0=TCON^5, TR0=TCON^4; void main(void) { unsigned long vehiculos, desbordes=0; TMOD = 0x05; /* timer 0, modo 1, soft. */ TH0=0x00; TL0=0x00; TF0=0; TR0=1; /* arrancar timer */ while(1) { /* hacer otras cosas */ if (TF0==1) { TF0=0; desbordes++; } TR0=0; /* evitar condiciones de carrera */ vehiculos = desbordes*65536 + TH0*256 + TL0; TR0=1;
}}
2.6 Ejemplo de un contador (ampliación)Se desea contabilizar los vehículos que circulan por una carretera.Mejora, 4.000 millones de vehículos.
2 - T/C 0 y T/C 1 en la familia MCS-51
TEMPORIZADORES Y CONTADORES 46
2.6 Ejemplo de un temporizadorSe desea realizar un retardo de 10 ms. Reloj del ?C de 12 Mhz
SMáquinaCiclo ?1reloj de períodos 12
Mhz 121 ??
desbordehastacuentasSmS 000.10000.1010 ?? ?
? PASO 1: ¿Contador o temporizador?– Temporizador.
? PASO 2: ¿Control puerta externo o interno? (GATE)– Interno.
hFDcuenta 08536.55000.10536.65216 ?????
? PASO 3: Modo 0 (13 bits), Modo 1 (16 bits) o Modo 2 (8 bits rec.)– Modo 1.
? PASO 4: ¿Valor inicial del contador?
2 - T/C 0 y T/C 1 en la familia MCS-51
TEMPORIZADORES Y CONTADORES 47
2.6 Ejemplo de un temporizadorSe desea realizar un retardo de 10 ms. Reloj del ?C de 12 Mhz
TH0=0xD8; TL0=0xF0;
– Temporizador.– Interno– Modo 1.– 55.536 (D8F0h)
b7 TMOD, dir. 89h, por máscara b0GATE C / T M1 M0 GATE C / T M1 M0
T/C 1 T/C 0
b7 TCON, dir. 88h, bit a bit b0TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
00 10
2 - T/C 0 y T/C 1 en la familia MCS-51
TEMPORIZADORES Y CONTADORES 48
2.6 Ejemplo de un temporizadorSe desea realizar un retardo de 10 ms. Reloj del ?C de 12 Mhz
sfr TMOD=0x89,TCON=0x88,TH0=0x8C,TL0=0x8A; sbit TF0=TCON^5, TR0=TCON4; void main(void) { /* ... */ TMOD |= 0x01; /* timer 0, modo 1, soft. */ TMOD &= 0xF1; TH0=0xD8; TL0=0xF0; TF0=0; TR0=1; /* arrancar timer */ while(!TF0); /* esperar desborde */ /* ... */ }
2 - T/C 0 y T/C 1 en la familia MCS-51
TEMPORIZADORES Y CONTADORES 49
? AYUDA:
– Prototipo función: void delay_ms(unsigned int ms);– Calcular ciclos de máquina a esperar y usar un timer para contabilizarlos– Emplear mecanismo de desborde para realizar temporizaciones grandes
ActividadSe desea disponer de una función en lenguaje C para realizarretardos de precisión del orden de milisegundos. Reloj del ? C de 12Mhz.
Solución
2 - T/C 0 y T/C 1 en la familia MCS-51
TEMPORIZADORES Y CONTADORES 50
3 – Interrupciones asociadas a loscontadores/temporizadores
TEMPORIZADORES Y CONTADORES 51
? Permite sacar mayor partido al sistema.? Liberan a la CPU de tener que encuestar flag de desborde.
Contador
OSC 1/12
C/T
GATE
TR0
TF0pinT0
pin/INT0
1
0 1 = cerrado
Interrupción
Descripción Nombre Flag hab. (IEN0)
Flag act. (TCON) Vector Borrado Núm
Interrup
Cont./Temp. 0 T/C0 ET0 TF0 000Bh Hw 1 Cont./Temp.1 T/C1 ET1 TF1 001Bh Hw 3
Bit ET0Habilitación deinterrupción.
3 – Interrupciones asociadas a los T/C
TEMPORIZADORES Y CONTADORES 52
Descripción Nombre Flag hab. (IEN0)
Flag act. (TCON) Vector Borrado Núm
Interrup
Cont./Temp. 0 T/C0 ET0 TF0 000Bh Hw 1 Cont./Temp.1 T/C1 ET1 TF1 001Bh Hw 3
3 – Interrupciones asociadas a los T/C
? Permite sacar el máximo partido? Liberan a la CPU de tener que
encuestar flag de desborde
Contador
OSC 1/12
C/T
GATE
TR0
TF0pinT0
pin/INT0
1
0 1 = cerrado
Interrupción
Bit TF0Activación petición
interrupción.(a 1)
Borrado automáticoal vectorizarse.
(puesta a 0)
TEMPORIZADORES Y CONTADORES 53
Descripción Nombre Flag hab. (IEN0)
Flag act. (TCON) Vector Borrado Núm
Interrup
Cont./Temp. 0 T/C0 ET0 TF0 000Bh Hw 1 Cont./Temp.1 T/C1 ET1 TF1 001Bh Hw 3
3 – Interrupciones asociadas a los T/C
? Permite sacar el máximo partido? Liberan a la CPU de tener que encuestar flag de desborde
Contador
OSC 1/12
C/T
GATE
TR0
TF0pinT0
pin-INT0
1
0 1 = cerrado
Interrupción
Dirección derutina interrupción.
void servicio (void)interrupt 1{ /* codigo */}
TEMPORIZADORES Y CONTADORES 54
3 – Interrupciones asociadas a los T/C
? Permite sacar el máximo partido? Liberan a la CPU de tener que encuestar flag de desborde
Contador
OSC 1/12
C/T
GATE
TR0
TF0pinT0
pin/INT0
1
0 1 = cerrado
Interrupción
Se puede combinarel T/C y la
interrupción externa.
Descripción Nombre Flag hab. (IEN0)
Flag act. (TCON) Vector Borrado Núm
Interrup
Cont./Temp. 0 T/C0 ET0 TF0 000Bh Hw 1 Cont./Temp.1 T/C1 ET1 TF1 001Bh Hw 3
TEMPORIZADORES Y CONTADORES 55
3 – Interrupciones asociadas a los T/C
– Se trata de un ejemplo típico de tareaperiódica.
– Interesa tener desocupada la CPU paraotros menesteres.
– Se propone que el T/C genere unainterrupción transcurrido cada semiperiodoy que la rutina de servicio modifique el valordel pin.
Ejemplo generación onda cuadrada
Generar onda cuadrada de 10 Khz por el pin P1.0. Reloj del ?C de 12 Mhz
10 Khz
P1.0
TEMPORIZADORES Y CONTADORES 56
Ejemplo generación onda cuadrada
SMáquinaCiclo ?11 ?
)(501001,010
1CMSoSemiperiodSmS
KhzT ?? ?????
? PASO 1: ¿Contador o temporizador?– Temporizador
? PASO 2: ¿Control puerta externo o interno? (GATE)– Interno
? PASO 3: Modo 0 (13 bits), Modo 1 (16 bits) o Modo 2 (8 bits rec.)– Modo 2. 8 bits con autorrecarga
? Hacer números
Generar onda cuadrada de 10 Khz por el pin P1.0. Reloj del ?C de 12 Mhz
3 – Interrupciones asociadas a los T/C
TEMPORIZADORES Y CONTADORES 57
Ejemplo generación onda cuadrada
2065025628 ???? cuenta
? PASO 1: ¿Contador o temporizador?– Temporizador
? PASO 2: ¿Control puerta externo o interno? (GATE)– Interno
? PASO 3: Modo 0 (13 bits), Modo 1 (16 bits) o Modo 2 (8 bits rec.)– Modo 2. 8 bits con autorrecarga
? PASO 4: ¿Valor inicial del contador?
Generar onda cuadrada de 10 Khz por el pin P1.0. Reloj del ?C de 12 Mhz
3 – Interrupciones asociadas a los T/C
TEMPORIZADORES Y CONTADORES 58
Ejemplo generación onda cuadrada
– Temporizador– Interno– Modo 2– 206
b7 TMOD, dir. 89h, por máscara b0GATE C / T M1 M0 GATE C / T M1 M0
TIMER 1 TIMER 0
b7 TCON, dir. 88h, bit a bit b0TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
00 01
TH0=TL0=206;
Generar onda cuadrada de 10 Khz por el pin P1.0. Reloj del ?C de 12 Mhz
3 – Interrupciones asociadas a los T/C
TEMPORIZADORES Y CONTADORES 59
Ejemplo generación onda cuadrada
sfr TMOD=0x89,TCON=0x88,TH0=0x8C,TL0=0x8A; sfr IEN0=0xA8, P1=0x90; sbit ET0=IEN0^1, EAL=IEN0^7, TR0=TCON^4; void main(void) { EAL = 0; TMOD = 0x02; TH0 = 206; TL0 = 206; ET0 = 1; /* habilitar int. timer 0 */ EAL = 1; /* habilitar interrupciones */ TR0 = 1; /* a correr */ while (1) { /* otras cosas */ } } void T0 (void)interrupt 1 { P1.0 = ~P1.0; }
Generar onda cuadrada de 10 Khz por el pin P1.0. Reloj del ?C de 12 Mhz
3 – Interrupciones asociadas a los T/C
TEMPORIZADORES Y CONTADORES 60
Actividad
Generar onda cuadrada de 50 Hz por el pin P1.0. Reloj del ? C de 12 Mhz.
? AYUDA:– DOS CAMINOS– a) Las recargas del temporizador/contador se pueden hacer por software.– b) Cada N interrupciones realizar la acción.
Solución
3 – Interrupciones asociadas a los T/C
TEMPORIZADORES Y CONTADORES 61
En la actividad anterior, conseguir que el tiempo que la señal está anivel alto y a nivel bajo sean distintos.
Actividad
Solución
3 - T/C 0 y T/C 1 en el 805x7
TEMPORIZADORES Y CONTADORES 62
4 - Ejemplos de aplicación
TEMPORIZADORES Y CONTADORES 63
– Para introducir el pulso se emplea la entrada de interrupción externa /INT0.Se emplea el T/C 0 como temporizador en modo control hardware.
– Si se desea medir el nivel bajo de esta manera es necesario emplear uninversor externo.
?
4.1 Medir el ancho de un pulso positivo
4 - Ejemplos de aplicación
? C
INT0?
TEMPORIZADORES Y CONTADORES 64
?
4.1 Medir el ancho de un pulso positivo
4 - Ejemplos de aplicación
Contador
OSC 1/12
C/T
GATE
TR0
TF0
pinT0
pin/INT0
1
01 = cerrado
Interrupción
1 0
Control externo,
bit GATE = 1
00
¡Nocuenta!
TEMPORIZADORES Y CONTADORES 65
4.1 Medir el ancho de un pulso positivo
4 - Ejemplos de aplicación
Contador
OSC 1/12
C/T
GATE
TR0
TF0
pinT0
pin/INT0
1
01 = cerrado
Interrupción
1 0
1
11?
¡Sicuenta!
1
TEMPORIZADORES Y CONTADORES 66
?
TR0 = 1 Termina de contar
4.1 Medir el ancho de un pulso positivo
4 - Ejemplos de aplicación
Control por HW:Comienza a contar
Aprovechar flancode bajada para generar
una interrupción externay leer valor cuenta
TEMPORIZADORES Y CONTADORES 67
sfr TMOD=0x89,TCON=0x88,TH0=0x8C,TL0=0x8A, IEN0=0xA8; sbit TR0=TCON^4, IT0=TCON^0, EX0=IEN0^0, EAL=IEN0^7; unsigned int ancho_pulso; void main(void) { EAL = 0; /* deshabilitar interrupciones */ TMOD = 0x09; /* control hard., timer, modo 1 */ TH0 = 0x00; TL0 = 0x00; IT0 = 1; /* disparo interrupción externa por flanco bajada*/ EX0 = 1; /* habilitar int. externa 0 */ EAL = 1; /* habilitar interrupciones */ TR0 = 1; /* a correr */ while (1) { /* otras cosas */ } } void Externa0_INT0 (void) interrupt 0 { TR0 = 0; /* para timer */ ancho_periodo = TH0*256+TL0; /* recoger medida */ TH0 = TL0 = 0; /*reiniciar cuenta timer */ TR0 = 1; }
4.1 Medir el ancho de un pulso positivo
4 - Ejemplos de aplicación
TEMPORIZADORES Y CONTADORES 68
– La señal se introduce al microcontrolador mediante la entrada de interrupciónexterna /INT0.
?
4.2 Medir el periodo de una señal
4 - Ejemplos de aplicación
? C
INT0
TEMPORIZADORES Y CONTADORES 69
– El método puede suponer algo de perdida de precisión debido a las variaciones delatencia de la interrupción.
?
Flanco bajadagenerar petición
Interrupción externa:
Comenzar cuenta
4.2 Medir el periodo de una señal
4 - Ejemplos de aplicación
Control por software. Bit GATE =0
Flanco bajadagenerar petición
Interrupción externa:
Parar cuentay procesar cuenta
Flanco bajadagenerar petición
Interrupción externa:
Comenzar cuenta
TEMPORIZADORES Y CONTADORES 70
sfr TMOD=0x89,TCON=0x88,TH0=0x8C,TL0=0x8A, IEN0=0xA8; sbit TR0=TCON^4, IT0=TCON^0, EX0=IEN0^0, EAL=IEN0^7; unsigned int periodo; void main(void) { EAL = 0; /* deshabilitar interrupciones */ TMOD = 0x01; /* control soft., timer, modo 1 */ TH0 = 0x00; TL0 = 0x00; IT0 = 1; /* disparo int. externa. 0 por flanco bajada */ EX0 = 1; /* habilitar int. externa 0 *7 EAL = 1; /* habilitar interrupciones */ TR0 = 1; /* a correr */ while (1) { /* otras cosas */ } } void Externa0_INT0 (void) interrupt 0 { /* arranca y para el timer en */ /* interrupciones alternadas */ TR0 = ~TR0; /* complementar. if (TR0==1) return; /* salir si timer corriendo */ periodo = TH0*256+TL0; /* recoger medida */ TH0 = 0; TL0 = 0; /*reiniciar cuenta timer */ }
4.2 Medir el periodo de una señal
4 - Ejemplos de aplicación
TEMPORIZADORES Y CONTADORES 71
– Se utiliza un pin de un puerto (P2.0) para generar el pulso– La precisión del método depende de la latencia de la interrupción del
temporizador.
temporizador
4.3 Generar un pulso
4 - Ejemplos de aplicación
? C
P2.0
TEMPORIZADORES Y CONTADORES 72
– Control por software. Bit GATE = 0– P2.0 = 1– Habilitar interrupción del T/C 0– Arrancar el temporizador inicializando la cuenta en función del ancho del pulso– Cuando rebose, se generará una interrupción procedente del T/C cuyo
manejador pondrá P2.0 = 0 dado que se ha alcanzado la duración del pulso
4.3 Generar un pulso
4 - Ejemplos de aplicación
temporizador
P2.0 = 1Inicializar
temporizador ycomenzar cuenta
El manejador de la interrupcióndel T/C 0, dará por finalizado
el pulso P2.0 = 0
TEMPORIZADORES Y CONTADORES 73
sfr TMOD=0x89,TCON=0x88,TH0=0x8C,TL0=0x8A, IEN0=0xA8 P2=0xA0;
sbit TR0=TCON^4, ET0=IEN0^1, EAL=IEN07;#define HITime ???
#define LoTime ???void main (void){
EAL = 0; /* deshabilitar interrupciones */ ET0 = 1; /* habilitar int. del T/C 0 *7
TCON = 0x00; /* Asegurarse que el temporizador está parado. */ TMOD =0x01; /* Temporizador en modo 1, soft. */
TH0 = HiTime; /* Cargar T/C 0 con la cuenta para la duración del pulso. */ TL0 = LoTime;
TR0 = 1; /* Arrancar temporizador. */ P2.0 = 1; /* Comenienzo pulso. */
EAL = 1; /* habilitar interrupciones */ }void Timer0_int (void) interrupt 1
{ TR0 = 0; /* Parar temporizador */
P2.0 = 0; /* Final del pulso */ }
4.3 Generar un pulso
4 - Ejemplos de aplicación
TEMPORIZADORES Y CONTADORES 74
Inicio: MOV TCON,#$00 ;Asegurarse que el temporizador está parado.MOV TMOD,#$01 ;Temporizador en modo 1.
MOV TH0,#HiTime ;Cargar T/C 0 con la cuenta para la; duración del pulso.
MOV TL0,#LoTimeSETB TR0 ;Arrancar temporizador.
SETB P2.0 ;Comenienzo pulso.
;Manejador interrupción del T/C 0.TC0INT: CLR P2.0 ;Final del pulso.
CLR TR0 ;Parar temporizador.RETI
4.3 Generar un pulso
4 - Ejemplos de aplicación
TEMPORIZADORES Y CONTADORES 75
– La precisión de este método depende de la latencia de las interrupcionesdel temporizador.
– Para generar señales de mayor frecuencia usar modo 2.
Arrancar tempo.Valor “1”
Arrancar tempo.Valor “0”
Repetir
4.4 Generar una señal PWM
4 - Ejemplos de aplicación
TEMPORIZADORES Y CONTADORES 76
T0INT: CLR TR0 ;Parar el temporizador.
CPL P2.0 ;Complementar valor pin.
JB P2.0,SetPWMHigh ;Está a valor “1” ó “0”?
MOV TH0,PWMLowH ;Poner PWM a “0”.
MOV TL0,PWMLowL
SJMP T0EX
SetPWMHigh: MOV TH0,PWMHighH ;Poner PWM a “1”.
MOV TL0,PWMHighL
T0EX: SETB TR0 ;Reinicializar temporizador.
RETI
4.4 Generar una señal PWM
4 - Ejemplos de aplicación
TEMPORIZADORES Y CONTADORES 77
ReadTimer:MOV ValH,TH0 ;Leer parte alta y baja.MOV ValL,TL0MOV A,TH0 ;Leer nuevamente parte alta.CJNE A,ValH,ChkHigh ;Ha cambiado?SJMP RTEX ;Si no, la primera lectura es válida.
ChkHigh: JB ValL.7,RTEX ;Otro caso, verificar parte baja para ver ; si ha cambiado despúes de leer la parte
; alta original.MOV ValH,A ;Si ha cambiado, usar la segunda lectura
; de la parte altaRTEX: RET
4.5 Leer un timer “al vuelo”
4 - Ejemplos de aplicación
TEMPORIZADORES Y CONTADORES 78
Solución actividadGenerar onda cuadrada de 50 Hz por el pin P1.0. Reloj de 12 Mhz.– 50 Hz = 20000 µS periodo = 10000 µS semiperiodo– Usar temporizador y modo 1 (16 bits). Recargar por programa el timer en interrupción.– Recarga: 10000 µS -> 65536 -10000 = 55536 = D8F0h
sfr TMOD=0x89,TCON=0x88,TH0=0x8C,TL0=0x8A; sfr IEN0=0xA8, P1=0x90; sbit ET0=IEN0^1, EAL=IEN0^7, TR0=TCON^4; void main(void) { TMOD = 0x01; TH0 = 0xD8; TL0 = 0xF0; EAL = 0; ET0 = 1; EAL = 1; TR0 = 1; /* a correr */ while (1) { /* otras cosas */ } } void T0 (void)interrupt 1 { P1.0 = ~P1.0; TR0 = 0; TH0 = 0xD8; TL0 = 0xF0; TR0 = 1; }
TEMPORIZADORES Y CONTADORES 79
void delay_ms(unsigned int mseg){ long l; unsigned int desbordes, resto;
l = 1000L * mseg; /* ciclos máquina en us */ desbordes = (l / 65536) + 1; /*incluye desborde del resto*/ resto = 65536 - (l % 65536); TR0=TF0=0; /*garantizar condiciones iniciales adecuadas*/ TMOD |= 0x01; TMOD &= 0xF1; /* modo 1, temporizador, control soft. */ TL0 = resto & 0x00FF; TH0 = resto >> 8; TR0 = 1; /* a correr */
while(desbordes) if (TF0) { TF0 = 0; desbordes--; } TR0 = TF0 = 0;}
Solución actividadSe desea disponer de una función C para realizar retardos deprecisión del orden de milisegundos. Reloj del ?C de 12 Mhz.
TEMPORIZADORES Y CONTADORES 80
sfr TMOD=0x89,TCON=0x88,TH0=0x8C,TL0=0x8A, IEN0=0xA8; sbit TR0=TCON^4, IT0=TCON^0, ET0=IEN0^1, EAL=IEN0^7; #define T_ON 1000 #define T_OFF 2000 #define P_OUT P1.0 unsigned char t_on_h, t_on_l, t_off_h, t_off_l; void main(void) { t_on_h = T_ON / 256; t_on_l = T_ON % 256; t_off_h = T_OFF / 256; t_off_l = T_OFF % 256; TMOD = 0x01; TH0 = t_on_h; TL0 = t_on_l; P_OUT = 1; ET0 = 1; EAL = 1; TR0 = 1; /* a correr */ while (1) { /* otras cosas */ } } void T0 (void) interrupt 1 { TR0=0; P_OUT++; /* complementar salida */ if (P_OUT) { TH0 = t_on_h; TL0 = t_on_l; } else { TH0 = t_off_h; TL0 = t_off_l; } TR0=1; }
Conseguir que el tiempo a nivel alto y a nivel bajo sean distintos.Actividad
TEMPORIZADORES Y CONTADORES 81
? EJERCICIO:– Realizar un programa en lenguaje C, que configure el TEMPORIZADOR-0
en modo 2 (Temporizador/Contador de 8 bits con autorrecarga), de formaque genere una interrupción con cada overflow. El manejador deinterrupción tendrá como única misión invertir el valor de P3.5
SOLUCIÓN:
7 6 5 4 3 2 1 0
EAL WDT ET2 ES0 ET1 EX1 ET0 EX0
GATE C/T M1 M0 GATE C/T M1 M0
TIMER-0
IEN0
TMOD
7 6 5 4 3 2 1 0
0 0 0 0 0 0 1 0 = $02
1 0 0 0 0 0 1 0 = $82
TEMPORIZADORES Y CONTADORES 82
sfr TMOD=0x89,TCON=0x88,TH0=0x8C,TL0=0x8A, IEN0=0xA8, P3=0xB0;sbit TR0=TCON^4;
void T0_int (void) interrupt 1; /* Rutina Timer-0 */
void main (void){
/* Inicialización de registros */IEN0 = 0x82; /* Habilitación Interrupciones */TMOD = 0x02; /* Configuración Timer-0 */TH0 = 0x05; /* Valor inicial en TH0 */TL0 = 0x05; /* Valor inicial en TL0 */TR0 = 1; /* Arranque del Timer-0 */while (1) {}
}
void T0_int (void) interrupt 1{ P3.5 = ~P3.5; /* Invertir salida */}
TEMPORIZADORES Y CONTADORES 83
Bibliografía
[Domíng2001] C. Domínguez, J.M. Martínez, A. Perles, J. Albaladejo, H.Hassan. “Curso de Informática Industrial: Aplicación con elmicrocontrolador”. Ed. Universidad Politécnica de Valencia,2001.
[Campelo1998] J. C. Campelo, A. Perles, F. Rodríguez. “MicrocontroladoresIntel MCS-51. Arquitectura y programación”. Ed. UniversidadPolitécnica de Valencia, 1.998.
[Martínez2001] J.M. Martínez, C. Domínguez, A. Perles, H. Hassan, J.Albaladejo. “Problemas de microcontroladores de la familiaMCS-51”. Ed. Universidad Politécnica de Valencia, 2001.
[Intel1994] MCS-51 Microcontroller Family User´s Manual.