Вы находитесь на странице: 1из 83

TEMPORIZADORES Y CONTADORES (T/C)

(Timers/Counters)
Objetivos

? Conocer y comprender la utilidad de los temporizadores y contadores.

? Comprender su estructura y lgica de funcionamiento.

? Sintetizar programas que hagan uso del sistema de contadores/temporizadores.

? Sintetizar manejadores de interrupcin para los contadores/temporizadores.

TEMPORIZADORES Y CONTADORES 2
Resumen de contenidos

1 Introduccin.

2 Los Temporizadores/Contadores 0 y 1.
2.1 Caractersticas bsicas.
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 aplicacin.
4.1 Medicin del ancho de un pulso positivo.
4.2 Medicin del perodo de una seal.
4.3 Generacin de un pulso.
4.4 Generacin de una seal PWM.

TEMPORIZADORES Y CONTADORES 3
1 - Introduccin

TEMPORIZADORES Y CONTADORES 4
1 - Introduccin

Muchas aplicaciones de automatizacin y regulacin necesitan ...

? Contabilizar eventos externos


Contar cajas en una cinta transportadora, vehculos en una carretera, ...
Velocidad de un motor (encoder)

? Realizar retardos de precisin o tareas peridicas


Semforos, pasos a nivel, ...
Generacin de seales PWM, ondas cuadradas, control de potencia

? Medir frecuencias/periodos de seales digitales


Sensores.
Receptores de seales infrarrojas, radio ...

TEMPORIZADORES Y CONTADORES 5
1 - Introduccin

EJEMPLO: Control velocidad motor asignatura Regulacin Automtica

Motor Encoder

Puente
en H

PWM Pulsos
Modulador PID Frecuencia
PWM analgico Tensin

Referencia

TEMPORIZADORES Y CONTADORES 6
1 - Introduccin

EJEMPLO: Control velocidad motor asignatura Regulacin Automtica

Motor Encoder

Puente
en H

PWM Microcontrolador Pulsos


PID
digital

Referencia

TEMPORIZADORES Y CONTADORES 7
1 - Introduccin

EJEMPLO:

? El encoder genera una onda cuadrada


con frecuencia proporcional a la velocidad del motor
? Midiendo el ancho del periodo ON (Ton) se podra calcular la velocidad

Encoder

Toff = 0 Ton = 1

Pulsos

TEMPORIZADORES Y CONTADORES 8
1 - Introduccin

Medir ancho de un pulso Encoder

Pulsos P1.0 C
Cuenta=0

SI
Nivel
0?
0 1

Incrementa
cuenta
...
SI MOV DPTR,#0
Nivel es_0: JNB P1.0,es_0
1? es_1: INC DPTR
JB P1.0,es_1
...
TEMPORIZADORES Y CONTADORES 9
1 - Introduccin

Medir ancho de un pulso Encoder

Pulsos P1.0 C
Cuenta=0

SI
Nivel
0?
0 1

Incrementa
cuenta
unsigned int contador=0;
SI while (!P1.0) {}
Nivel while (P1.0)
1? {
contador++;
}

TEMPORIZADORES Y CONTADORES 10
1 - Introduccin

? Problemas al resolverlo por software.


Hay que saber cunto tardan en ejecutarse las instrucciones.
No se puede trabajar con frecuencias altas.
Si hay interrupciones es imposible lograr precisin.
La CPU desperdicia su tiempo y no puede hacer otras cosas.

? Solucin: Emplear contadores y/o temporizadores (T/C).

? Los microcontroladores integran temporizadores/contadores (T/C).


No necesitan circuitos adicionales (integracin).
Sin sobrecargar a la CPU (funcionamiento en paralelo con la CPU).
Programacin sencilla y transparente.

TEMPORIZADORES Y CONTADORES 11
1 - Introduccin

? Cada generacin de microcontroladores aade ms 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 comparacin/captura
Motorola MPC555 (32 bits) -> 2 Time Processor Unit 3 (TPU3)
Atmel T89C51CC01 -> 3 T/C: T/C0, T/C1, T/C2 , unidad comparacin/captura

? Los T/C tienen innumerables aplicaciones.


Contabilizacin de eventos.
Encoders, contadores de objetos, ...
Generacin de seales digitales. PWM.
Control de potencia, motores de continua, motores AC, motores P. a P., ...
Generacin de seales para transmisin/recepcin de datos.
Medicin de seales digitales.
Sensores de humedad, de distancia, de luminosidad...
Temporizaciones.
Retardos, tareas peridicas, planificacin de tareas, ...

TEMPORIZADORES Y CONTADORES 12
2 Los Temporizadores/Contadores 0 y 1
T/C 0 y T/C 1 en la familia MCS-51

TEMPORIZADORES Y CONTADORES 13
2 - T/C 0 y T/C 1 en la familia MCS-51
Caractersticas bsicas

? Dos temporizadores/contadores casi idnticos: T/C0 y T/C1

? Registro de cuenta de hasta 16 bits


Cuenta tiempo: TEMPORIZADOR

Cuenta eventos: CONTADOR

? Contabilizacin ascendente (cuenta = cuenta+1).

? El desborde se usa para detectar el fin de cuenta/temporizacin.

? Dispone de hardware/software para arrancar y parar la cuenta.

TEMPORIZADORES Y CONTADORES 14
2 - T/C 0 y T/C 1 en la familia MCS-51
2.1 Caractersticas bsicas

? A OTRO SITIO

1 0 0 1 0 1 1 1 0 1 0 0 0 1 1 0
Valor cuenta = 9746h = 38726

TEMPORIZADORES Y CONTADORES 15
2 - T/C 0 y T/C 1 en la familia MCS-51
2.2 Hardware involucrado

TEMPORIZADOR/CONTADOR 0 (T/C 0)
Registros (zona SFR):
TMOD (modo operacin) (dir. 89h por mscara).
TCON (control operacin) (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 operacin) (dir. 89h por mscara).
TCON (control operacin) (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).

TEMPORIZADORES Y CONTADORES 16
2 - T/C 0 y T/C 1 en la familia MCS-51
2.3 Diagrama de bloques

Generacin:
- Eventos externos Contador
- Seal reloj interno

Control
de puerta

TEMPORIZADOR/CONTADOR 0 (T/C 0)
SFR: TMOD (modo operacin), TCON (control operacin), 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 operacin), TCON (control operacin), TL1, TH1 (registros cuenta).
Pines: T1 (P3.5) (entrada de pulsos), /INT1 (P3.3) (control de puerta).

TEMPORIZADORES Y CONTADORES 17
2 - T/C 0 y T/C 1 en la familia MCS-51
2.3 Diagrama de bloques

OSC 1/12
1 = cerrado
0
C/T Contador
Contador TF0
pin 1
T0
(P3.4)
GATE
pin Control
/INT0
(P3.2)
de puerta
TR0

TEMPORIZADOR/CONTADOR 0 (T/C 0)
SFR: TMOD (modo operacin), TCON (control operacin), 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 operacin), TCON (control operacin), TL1, TH1 (registros cuenta).
Pines: T1 (P3.5) (entrada de pulsos), /INT1 (P3.3) (control de puerta).

TEMPORIZADORES Y CONTADORES 18
2 - T/C 0 y T/C 1 en la familia MCS-51
2.3 Diagrama de bloques

OSC 1/12
1 = cerrado
0
C/T Contador
Contador TF0
pin 1
T0
(P3.4)
GATE
pin
/INT0
(P3.2)
TR0

TEMPORIZADOR/CONTADOR 0 (T/C 0)
SFR: TMOD (modo operacin), TCON (control operacin), 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 operacin), TCON (control operacin), TL1, TH1 (registros cuenta).
Pines: T1 (P3.5) (entrada de pulsos), /INT1 (P3.3) (control de puerta).

TEMPORIZADORES Y CONTADORES 19
2 - T/C 0 y T/C 1 en la familia MCS-51
2.3 Diagrama de bloques

OSC 1/12
1 = cerrado
0
C/T Contador TF0
pin 1
T0
(P3.4)
GATE
pin
/INT0
(P3.2)
TR0

TEMPORIZADOR/CONTADOR 0 (T/C 0)
SFR: TMOD (modo operacin), TCON (control operacin), 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 operacin), TCON (control operacin), TL1, TH1 (registros cuenta).
Pines: T1 (P3.5) (entrada de pulsos), /INT1 (P3.3) (control de puerta).

TEMPORIZADORES Y CONTADORES 20
2 - T/C 0 y T/C 1 en la familia MCS-51
2.3 Diagrama de bloques

OSC 1/12
1 = cerrado
0
C/T Contador TF0
pin 1
T0
Interrupcin
(P3.4)
GATE (si est habilitada)
pin
/INT0
(P3.2)
TR0

TEMPORIZADOR/CONTADOR 0 (T/C 0)
SFR: TMOD (modo operacin), TCON (control operacin), 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 operacin), TCON (control operacin), TL1, TH1 (registros cuenta).
Pines: T1 (P3.5) (entrada de pulsos), /INT1 (P3.3) (control de puerta).

TEMPORIZADORES Y CONTADORES 21
2 - T/C 0 y T/C 1 en la familia MCS-51

2.3 Diagrama de bloques


T/C 0
OSC 1/12
1 = cerrado
0
C/T Contador TF0
1
pin
T0 Interrupcin
GATE

pin
/INT0
TR0

T/C 1

TEMPORIZADORES Y CONTADORES 22
2 - T/C 0 y T/C 1 en la familia MCS-51
2.4 Registros SFR TMOD y TCON

OSC 1/12
1 = cerrado
0
C/T Contador TF0
1
pin
T0 Interrupcin
GATE

pin
/INT0
TR0

T/C 1 T/C 0
b7 TMOD, dir. 89h, por mscara b0
GATE C/ T M1 M0 GATE C/T M1 M0
T/C 1 T/C 0
b7 TCON, dir. 88h, bit a bit b0
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

TEMPORIZADORES Y CONTADORES 23
2 - T/C 0 y T/C 1 en la familia MCS-51
2.4 Registros SFR TMOD y TCON

OSC 1/12
1 = cerrado
0
C/T Contador TF0
1
pin
T0 Interrupcin
GATE

pin
/INT0
TR0

b7 TMOD, dir. 89h, por mscara b0


GATE C/ T M1 M0 GATE C/T M1 M0
T/C 1 T/C 0
b7 TCON, dir. 88h, bit a bit b0
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

TEMPORIZADORES Y CONTADORES 24
2 - T/C 0 y T/C 1 en la familia MCS-51
2.4 Registros SFR TMOD y TCON

OSC 1/12
1 = cerrado
0
C/T Contador TF0
1
pin
T0
Bit C/T Interrupcin
GATE
Seleccin modo
pin
-INT0
contador o temporizador.
TR0 0 -> temporizador
1 -> contador
b7 TMOD, dir. 89h, por mscara b0
GATE C/ T M1 M0 GATE C/T M1 M0
T/C 1 T/C 0
b7 TCON, dir. 88h, bit a bit b0
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

TEMPORIZADORES Y CONTADORES 25
2 - T/C 0 y T/C 1 en la familia MCS-51
2.4 Registros SFR TMOD y TCON

OSC 1/12
1 = cerrado
0
1
0
C/T
1
Contador TF0

pin
T0 Interrupcin
GATE Pulso muy estrecho:
se pierde!
pin
pin
/INT0 T0
TR0

C.M.C.M.
? Operacin como temporizador
Cuentan ciclos de mquina (1 ciclo mquina 0 1= 12 ciclos
(C.M.) 0 de
0reloj).
? Operacin como contador
Deteccin de flancos de bajada en el pin T0 (P3.4).
Muestreo cada CM -> Flanco de bajada = detectar 1 y despus 0.
Mxima frecuencia detectable ser 1/24 frecuencia reloj.

TEMPORIZADORES Y CONTADORES 26
2 - T/C 0 y T/C 1 en la familia MCS-51
2.4 Registros SFR TMOD y TCON

OSC 1/12
1 = cerrado
0
C/T Contador TF0
1
pin
T0 Interrupcin
GATE Bit TR0
pin Activacin T/C 0.
/INT0 0 -> desactivado
TR0
1 -> activado

b7 TMOD, dir. 89h, por mscara b0


GATE C/ T M1 M0 GATE C/T M1 M0
T/C 1 T/C 0
b7 TCON, dir. 88h, bit a bit b0
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

TEMPORIZADORES Y CONTADORES 27
2 - T/C 0 y T/C 1 en la familia MCS-51
2.4 Registros SFR TMOD y TCON

OSC 1/12
1 = cerrado
0
C/T Contador TF0
1
pin
T0 Interrupcin
GATE Bit GATE
pin Control de puerta.
/INT0 0 -> interno (software)
TR0
1 -> externo (hardware)

b7 TMOD, dir. 89h, por mscara b0


GATE C/ T M1 M0 GATE C/T M1 M0
T/C 1 T/C 0
b7 TCON, dir. 88h, bit a bit b0
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

TEMPORIZADORES Y CONTADORES 28
2 - T/C 0 y T/C 1 en la familia MCS-51
2.4 Registros SFR TMOD y TCON

OSC 1/12
1 = cerrado
0
C/T Contador TF0
1
pin
T0 Interrupcin

1
GATE
0 D Bit GATE
Control de puerta.
D/INT0
pin
0 -> interno (software)
TR0
1 -> externo (hardware)

b7 TMOD, dir. 89h, por mscara b0


GATE C/ T M1 M0 GATE C/T M1 M0
T/C 1 T/C 0
b7 TCON, dir. 88h, bit a bit b0
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

TEMPORIZADORES Y CONTADORES 29
2 - T/C 0 y T/C 1 en la familia MCS-51
2.4 Registros SFR TMOD y TCON

OSC 1/12
1 = cerrado
0
C/T Contador TF0
1
pin
T0 Interrupcin

0
GATE
1 1 Bit GATE
Control de puerta.
D/INT0
pin
0 -> interno (software)
TR0
1 -> externo (hardware)

b7 TMOD, dir. 89h, por mscara b0


GATE C/ T M1 M0 GATE C/T M1 M0
T/C 1 T/C 0
b7 TCON, dir. 88h, bit a bit b0
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

TEMPORIZADORES Y CONTADORES 30
2 - T/C 0 y T/C 1 en la familia MCS-51
2.4 Registros SFR TMOD y TCON

OSC 1/12
1 = cerrado
0
C/T Contador TF0
1
pin
T0 Interrupcin
Modo
GATE
Modo 0: Contador 13 bits.
pin
/INT0
Modo 1: Contador 16 bits.
TR0
Modo 2: Cont. 8 bit autorrecarga
Modo 3: Desdoble (T/C0)

b7 TMOD, dir. 89h, por mscara b0


GATE C/ T M1 M0 GATE C/T M1 M0
T/C 1 T/C 0
b7 TCON, dir. 88h, bit a bit b0
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

TEMPORIZADORES Y CONTADORES 31
2 - T/C 0 y T/C 1 en la familia MCS-51
Interrupcin
2.4 Registros SFR TMOD y TCON

OSC 1/12
1 = cerrado
0
C/T
1
Contador
111...100
000...010
000...001
000...000
111...111
111...110
111...101 1
TF0

pin
T0
ContadorInterrupcin
GATE
Registros SFR TH0 y TL0.
pin
/INT0
Ascendente.
TR0
Y cuando desborda ...

b7 TMOD, dir. 89h, por mscara b0


GATE C/ T M1 M0 GATE C/T M1 M0
T/C 1 T/C 0
b7 TCON, dir. 88h, bit a bit b0
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

TEMPORIZADORES Y CONTADORES 32
2 - T/C 0 y T/C 1 en la familia MCS-51
2.4 Registros SFR TMOD y TCON

OSC 1/12
1 = cerrado
0
C/T Contador TF0
1
pin
T0
Bit TF0 Interrupcin
GATE
Timer flag 0.
pin
/INT0
1 -> desborde
TR0 PERO NO SE DETIENE
EL CONTADOR
b7 TMOD, dir. 89h, por mscara b0
GATE C/ T M1 M0 GATE C/T M1 M0
T/C 1 T/C 0
b7 TCON, dir. 88h, bit a bit b0
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

TEMPORIZADORES Y CONTADORES 33
2 - T/C 0 y T/C 1 en la familia MCS-51

Ejemplo:
Se desea temporizar un intervalo de 125 ? s. Cul es el valor a
cargar como cuenta inicial?
Para un valor de fOSC =12MHz:

Duracin de 1 Ciclo Mquina:


1
*12=1? s
12MHz
Duracin=125? s=1? s*Cuenta
Duracin=125? s=1? s*125

Si se utilizan 8 bits: 256-125=131=83H THx=?


THx=? TLx=131
TLx=131

Si se utilizan 16 bits: 65536-125=65411=FF83H THx=255


THx=255 TLx=131
TLx=131

TEMPORIZADORES Y CONTADORES 34
2 - T/C 0 y T/C 1 en la familia MCS-51

Ejemplo:
Se desea temporizar un intervalo de 2s. Cul es el valor a
cargar como cuenta inicial? (fOSC=12MHz)

Duracin=2000000? s=1? s*Cuenta


No
No cabe
cabe en
en
Duracin=2000000? s=1? s*2000000 16
16 bits
bits

Solucin: Contabilizar desbordes del contador (Con 16 bits cada


desborde equivale a 65536 ? s).

Desbordes = 30 Resto_hasta_completar = 33920


Cuenta = 30*65536+33920 = 2000000

TEMPORIZADORES Y CONTADORES 35
2 - T/C 0 y T/C 1 en la familia MCS-51
2.5 Modos de funcionamiento

M1 M0 Modo
Temporizador/contador de 8 bits con THx. TLx acta como preescala de 5 bits (los de
0 0 0 menor peso) (13 bits en total). (los 3 bits de mayor peso de TLx son de valor
indeterminado)
0 1 1 Temporizador/contador de 16 bits, con THx y TLx en cascada
Temporizador/contador de 8 bits con autorrecarga. THx contiene el valor de recarga
1 0 2
para TLx tras cada desbordamiento
Para el temporizador 0, TL0 y TH0 son dos temporizadores/contadores de 8 bits,
1 1 3 controlados con los bits de control de los temporizadores 0 y 1 respectivamente.
Temporizador 1 inactivo.

TEMPORIZADORES Y CONTADORES 36
2 - T/C 0 y T/C 1 en la familia MCS-51
2.5 Modos de funcionamiento

OSC 1/12 LSB MSB


1 = cerrado
0 TL0
C/T 5 bits TH0
Contador TF0
1 de menor 8 bits
pin peso
T0 Interrupcin
GATE 13 bits
pin
/INT0
TR0
MODO 0: Contador de 13 bits
M1 M0 Modo
Temporizador/contador de 8 bits con THx. TLx acta como preescala de 5 bits (13 bits
0 0 0
en total).
0 1 1 Temporizador/contador de 16 bits, con THx y TLx en cascada
Temporizador/contador de 8 bits con autorrecarga. THx contiene el valor de recarga
1 0 2
para TLx tras cada desbordamiento
Para el temporizador 0, TL0 y TH0 son dos temporizadores/contadores de 8 bits,
1 1 3 controlados con los bits de control de los temporizadores 0 y 1 respectivamente.
Temporizador 1 inactivo.

TEMPORIZADORES Y CONTADORES 37
2 - T/C 0 y T/C 1 en la familia MCS-51
2.5 Modos de funcionamiento

OSC 1/12 LSB MSB


1 = cerrado
0
C/T
TL0 TH0
Contador TF0
1 8 bits 8 bits
pin
T0 Interrupcin
GATE 16 bits
pin
/INT0
TR0
MODO 1: Contador de 16 bits
M1 M0 Modo
Temporizador/contador de 8 bits con THx. TLx acta como preescala de 5 bits (13 bits
0 0 0
en total).
0 1 1 Temporizador/contador de 16 bits, con THx y TLx en cascada
Temporizador/contador de 8 bits con autorrecarga. THx contiene el valor de recarga
1 0 2
para TLx tras cada desbordamiento
Para el temporizador 0, TL0 y TH0 son dos temporizadores/contadores de 8 bits,
1 1 3 controlados con los bits de control de los temporizadores 0 y 1 respectivamente.
Temporizador 1 inactivo.

TEMPORIZADORES Y CONTADORES 38
2 - T/C 0 y T/C 1 en la familia MCS-51
2.5 Modos de funcionamiento

OSC 1/12
1 = cerrado
0
C/T
TL0
Contador TF0
1 8 bits
pin
T0 Interrupcin
Recarga
GATE
TH0
pin 8 bits
/INT0
TR0
MODO 2: Contador de 8 bits con autorrecarga
M1 M0 Modo
Temporizador/contador de 8 bits con THx. TLx acta como preescala de 5 bits (13 bits
0 0 0
en total).
0 1 1 Temporizador/contador de 16 bits, con THx y TLx en cascada
Temporizador/contador de 8 bits con autorrecarga. THx contiene el valor de recarga
1 0 2
para TLx tras cada desbordamiento
Para el temporizador 0, TL0 y TH0 son dos temporizadores/contadores de 8 bits,
1 1 3 controlados con los bits de control de los temporizadores 0 y 1 respectivamente.
Temporizador 1 inactivo.

TEMPORIZADORES Y CONTADORES 39
2 - T/C 0 y T/C 1 en la familia MCS-51
2.5 Modos de funcionamiento
TR1

TH0
TH0
Intr
OSC 1/12 ??????
TF1
8 bits

0
C/T TL0
TL0 TF0 Intr
??????
1 8 bits
pin T0

GATE

pin INT0

TR0
MODO 3: Desdoble T/C 0
M1 M0 Modo
Temporizador/contador de 8 bits con THx. TLx acta como preescala de 5 bits (13 bits
0 0 0
en total).
0 1 1 Temporizador/contador de 16 bits, con THx y TLx en cascada
Temporizador/contador de 8 bits con autorrecarga. THx contiene el valor de recarga
1 0 2
para TLx tras cada desbordamiento
Para el temporizador 0, TL0 y TH0 son dos temporizadores/contadores de 8 bits,
1 1 3 controlados con los bits de control de los temporizadores 0 y 1 respectivamente.
Temporizador 1 inactivo.

TEMPORIZADORES Y CONTADORES 40
2 - T/C 0 y T/C 1 en la familia MCS-51
2.6 Ejemplo de un contador
Se desea contabilizar los vehculos que circulan por una carretera.
NO excedern 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? Cuenta
0. T0 C 0
2
1

TEMPORIZADORES Y CONTADORES 41
2 - T/C 0 y T/C 1 en la familia MCS-51
2.6 Ejemplo de un contador
Se desea contabilizar los vehculos que circulan por una carretera.
NO excedern de 30.000.
Contador.
Interno
Modo 1. En principio podemos contar hasta 65535.
0.

TH0=0x00; TL0=0x00;

b7 TMOD, dir. 89h, por mscara b0


GATE C/ T
T/C 1
M1 M0
0
GATE C / T
1T/C 0 M10 1
M0

b7 TCON, dir. 88h, bit a bit b0


TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

TEMPORIZADORES Y CONTADORES 42
2 - T/C 0 y T/C 1 en la familia MCS-51
2.6 Ejemplo de un contador
Se desea contabilizar los vehculos que circulan por una carretera. NO excedern de 30.000.
TH0=0x00; TL0=0x00;

b7 TMOD, dir. 89h, por mscara b0


GATE C/ T
T/C 1
M1 M0
0
GATE C / T
1T/C 0 M10 1
M0

b7 TCON, dir. 88h, bit a bit b0


TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

sfr TMOD=0x89,TCON=0x88,TH0=0x8C,TL0=0x8A;
sbit TF0=TCON^5, TR0=TCON^4;
void main(void)
{
int vehiculos;/* Para contabilizar vehculos */
TMOD = 0x05; /* 0101(b => T/C 0, control sw, contador, modo 1 */
TH0=0x00;
TL0=0x00;
/* sigue ... */
}

TEMPORIZADORES Y CONTADORES 43
2 - T/C 0 y T/C 1 en la familia MCS-51
2.6 Ejemplo de un contador
Se desea contabilizar los vehculos que circulan por una carretera.
NO excedern de 30.000.
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; vehiculos = TH0;
TL0=0x00;
TR0=1; /* arrancar timer */ vehiculos = vehiculos << 8;
while(1) { vehiculos = vehiculos | TL0;
/* hacer otras cosas */
TR0=0; /* evitar condiciones de carrera */
vehiculos = TH0*256 + TL0;
TR0=1;
}
}

TEMPORIZADORES Y CONTADORES 44
2 - T/C 0 y T/C 1 en la familia MCS-51
2.6 Ejemplo de un contador (ampliacin)
Se desea contabilizar los vehculos que circulan por una carretera.
Mejora, 4.000 millones de vehculos.
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;
}}

TEMPORIZADORES Y CONTADORES 45
2 - T/C 0 y T/C 1 en la familia MCS-51
2.6 Ejemplo de un temporizador
Se desea realizar un retardo de 10 ms. Reloj del ? C de 12 Mhz

? PASO 1: Contador o temporizador?


Temporizador.
? PASO 2: Control puerta externo o interno? (GATE)
Interno.

12 Mhz
1Ciclo Mquina ? ?1? S
12 perodos de reloj
10 mS ? 10.000 ? S ? 10.000 cuentas hasta desborde

? PASO 3: Modo 0 (13 bits), Modo 1 (16 bits) o Modo 2 (8 bits rec.)
Modo 1.
? PASO 4: Valor inicial del contador?
216 ? cuenta ? 65.536 ? 10.000 ? 55.536 ? D8 F 0h

TEMPORIZADORES Y CONTADORES 46
2 - T/C 0 y T/C 1 en la familia MCS-51
2.6 Ejemplo de un temporizador
Se desea realizar un retardo de 10 ms. Reloj del ? C de 12 Mhz
Temporizador.
Interno
Modo 1.
55.536 (D8F0h)

TH0=0xD8; TL0=0xF0;

b7 TMOD, dir. 89h, por mscara b0


GATE C/ T
T/C 1
M1 M0
0
GATE C / T
0T/C 0 M10 1
M0

b7 TCON, dir. 88h, bit a bit b0


TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

TEMPORIZADORES Y CONTADORES 47
2 - T/C 0 y T/C 1 en la familia MCS-51
2.6 Ejemplo de un temporizador
Se 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 */
/* ... */
}

TEMPORIZADORES Y CONTADORES 48
2 - T/C 0 y T/C 1 en la familia MCS-51
Actividad
Se desea disponer de una funcin en lenguaje C para realizar
retardos de precisin del orden de milisegundos. Reloj del ? C de 12
Mhz.

? AYUDA:

Prototipo funcin: void delay_ms(unsigned int ms);


Calcular ciclos de mquina a esperar y usar un timer para contabilizarlos
Emplear mecanismo de desborde para realizar temporizaciones grandes

Solucin

TEMPORIZADORES Y CONTADORES 49
3 Interrupciones asociadas a los
contadores/temporizadores

TEMPORIZADORES Y CONTADORES 50
3 Interrupciones asociadas a los T/C

? Permite sacar mayor partido al sistema.


? Liberan a la CPU de tener que encuestar flag de desborde.

Flag hab. Flag act. Nm


Descripcin Nombre Vector Borrado
(IEN0) (TCON) Interrup
Cont./Temp. 0 T/C0 ET0 TF0 000Bh Hw 1
Cont./Temp.1 T/C1 ET1 TF1 001Bh Hw 3

OSC 1/12
1 = cerrado
0
C/T
1
Contador TF0
pin
T0 Interrupcin
GATE
pin
/INT0
TR0
Bit ET0
Habilitacin de
interrupcin.

TEMPORIZADORES Y CONTADORES 51
3 Interrupciones asociadas a los T/C

? Permite sacar el mximo partido Borrado automtico


? Liberan a la CPU de tener que al vectorizarse.
encuestar flag de desborde (puesta a 0)

Flag hab. Flag act. Nm


Descripcin Nombre Vector Borrado
(IEN0) (TCON) Interrup
Cont./Temp. 0 T/C0 ET0 TF0 000Bh Hw 1
Cont./Temp.1 T/C1 ET1 TF1 001Bh Hw 3

OSC 1/12
1 = cerrado
0
C/T
1
Contador TF0
pin
T0 Interrupcin
GATE
pin
/INT0
TR0 Bit TF0
Activacin peticin
interrupcin.
(a 1)
TEMPORIZADORES Y CONTADORES 52
3 Interrupciones asociadas a los T/C

? Permite sacar el mximo partido


? Liberan a la CPU de tener que encuestar flag de desborde

Flag hab. Flag act. Nm


Descripcin Nombre Vector Borrado
(IEN0) (TCON) Interrup
Cont./Temp. 0 T/C0 ET0 TF0 000Bh Hw 1
Cont./Temp.1 T/C1 ET1 TF1 001Bh Hw 3

OSC 1/12
1 = cerrado
0
C/T
1
Contador TF0
pin
T0 Interrupcin
GATE
pin
-INT0
TR0

void servicio (void)interrupt 1


Direccin de {
/* codigo */
rutina interrupcin. }
TEMPORIZADORES Y CONTADORES 53
3 Interrupciones asociadas a los T/C

? Permite sacar el mximo partido


? Liberan a la CPU de tener que encuestar flag de desborde

Flag hab. Flag act. Nm


Descripcin Nombre Vector Borrado
(IEN0) (TCON) Interrup
Cont./Temp. 0 T/C0 ET0 TF0 000Bh Hw 1
Cont./Temp.1 T/C1 ET1 TF1 001Bh Hw 3

OSC 1/12
1 = cerrado
0
C/T
1
Contador TF0
pin
T0 Interrupcin
GATE
pin
/INT0
TR0
Se puede combinar
el T/C y la
interrupcin externa.

TEMPORIZADORES Y CONTADORES 54
3 Interrupciones asociadas a los T/C
Ejemplo generacin onda cuadrada
Se trata de un ejemplo tpico de tarea
peridica. P1.0
Interesa tener desocupada la CPU para
otros menesteres.
Se propone que el T/C genere una
interrupcin transcurrido cada semiperiodo
y que la rutina de servicio modifique el valor
del pin.

10 Khz

Generar onda cuadrada de 10 Khz por el pin P1.0. Reloj del ? C de 12 Mhz

TEMPORIZADORES Y CONTADORES 55
3 Interrupciones asociadas a los T/C
Ejemplo generacin onda cuadrada
Generar onda cuadrada de 10 Khz por el pin P1.0. Reloj del ? C de 12 Mhz

? 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 nmeros

1 Ciclo Mquina ? 1 ? S
1
T? ? 0,1mS ? 100 ? S ? Semiperiodo ? 50 ? S (CM )
10 Khz

TEMPORIZADORES Y CONTADORES 56
3 Interrupciones asociadas a los T/C
Ejemplo generacin onda cuadrada
Generar onda cuadrada de 10 Khz por el pin P1.0. Reloj del ? C de 12 Mhz

? 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?
28 ? cuenta ? 256 ? 50 ? 206

TEMPORIZADORES Y CONTADORES 57
3 Interrupciones asociadas a los T/C
Ejemplo generacin onda cuadrada
Generar onda cuadrada de 10 Khz por el pin P1.0. Reloj del ? C de 12 Mhz

Temporizador
Interno
Modo 2
206

TH0=TL0=206;

b7 TMOD, dir. 89h, por mscara b0


GATE C/T M1
TIMER 1
M0
0
GATE C/T
0 M1
TIMER 0
1 0
M0

b7 TCON, dir. 88h, bit a bit b0


TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

TEMPORIZADORES Y CONTADORES 58
3 Interrupciones asociadas a los T/C
Ejemplo generacin onda cuadrada
Generar onda cuadrada de 10 Khz por el pin P1.0. Reloj del ? C de 12 Mhz

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;
}

TEMPORIZADORES Y CONTADORES 59
3 Interrupciones asociadas a los T/C
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 accin.

Solucin

TEMPORIZADORES Y CONTADORES 60
3 - T/C 0 y T/C 1 en el 805x7
Actividad

En la actividad anterior, conseguir que el tiempo que la seal est a


nivel alto y a nivel bajo sean distintos.

Solucin

TEMPORIZADORES Y CONTADORES 61
4 - Ejemplos de aplicacin

TEMPORIZADORES Y CONTADORES 62
4 - Ejemplos de aplicacin
4.1 Medir el ancho de un pulso positivo

Para introducir el pulso se emplea la entrada de interrupcin 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 un
inversor externo.
?

?C

?
INT0

TEMPORIZADORES Y CONTADORES 63
4 - Ejemplos de aplicacin
4.1 Medir el ancho de un pulso positivo

Control externo,

OSC= 1 1/12
bit GATE
1 = cerrado
0
C/T
1
Contador TF0

pin
T0 Interrupcin
? 1 GATE 0 0
pin
/INT0 0
TR0
No
cuenta!

TEMPORIZADORES Y CONTADORES 64
4 - Ejemplos de aplicacin
4.1 Medir el ancho de un pulso positivo

OSC 1/12
1 = cerrado
0
C/T
1
Contador TF0

pin
T0
1 Interrupcin
? 1 GATE 0 1
pin
/INT0 1
TR0
Si
1 cuenta!

TEMPORIZADORES Y CONTADORES 65
4 - Ejemplos de aplicacin
4.1 Medir el ancho de un pulso positivo

Aprovechar flanco
? de bajada para generar
una interrupcin externa
y leer valor cuenta

TR0 = 1 Termina de contar

Control por HW:


Comienza a contar

TEMPORIZADORES Y CONTADORES 66
4 - Ejemplos de aplicacin
4.1 Medir el ancho de un pulso positivo

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 interrupcin 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;
}

TEMPORIZADORES Y CONTADORES 67
4 - Ejemplos de aplicacin
4.2 Medir el periodo de una seal

La seal se introduce al microcontrolador mediante la entrada de interrupcin


externa /INT0.

?C

INT0

TEMPORIZADORES Y CONTADORES 68
4 - Ejemplos de aplicacin
4.2 Medir el periodo de una seal

Control por software. Bit GATE =0

Flanco bajada Flanco bajada Flanco bajada


generar peticin generar peticin generar peticin
Interrupcin externa: Interrupcin externa: Interrupcin externa:

Comenzar cuenta Parar cuenta Comenzar cuenta


y procesar cuenta

El mtodo puede suponer algo de perdida de precisin debido a las variaciones de


latencia de la interrupcin.

TEMPORIZADORES Y CONTADORES 69
4 - Ejemplos de aplicacin
4.2 Medir el periodo de una seal
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 */
}
TEMPORIZADORES Y CONTADORES 70
4 - Ejemplos de aplicacin
4.3 Generar un pulso
Se utiliza un pin de un puerto (P2.0) para generar el pulso
La precisin del mtodo depende de la latencia de la interrupcin del
temporizador.

temporizador

?C

P2.0

TEMPORIZADORES Y CONTADORES 71
4 - Ejemplos de aplicacin
4.3 Generar un pulso
Control por software. Bit GATE = 0
P2.0 = 1
Habilitar interrupcin del T/C 0
Arrancar el temporizador inicializando la cuenta en funcin del ancho del pulso
Cuando rebose, se generar una interrupcin procedente del T/C cuyo
manejador pondr P2.0 = 0 dado que se ha alcanzado la duracin del pulso
temporizador

P2.0 = 1
Inicializar El manejador de la interrupcin
temporizador y del T/C 0, dar por finalizado
comenzar cuenta el pulso P2.0 = 0

TEMPORIZADORES Y CONTADORES 72
4 - Ejemplos de aplicacin
4.3 Generar un pulso
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 duracin 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 */
}
TEMPORIZADORES Y CONTADORES 73
4 - Ejemplos de aplicacin
4.3 Generar un pulso

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
; duracin del pulso.
MOV TL0,#LoTime
SETB TR0 ;Arrancar temporizador.
SETB P2.0 ;Comenienzo pulso.

;Manejador interrupcin del T/C 0.


TC0INT: CLR P2.0 ;Final del pulso.
CLR TR0 ;Parar temporizador.
RETI

TEMPORIZADORES Y CONTADORES 74
4 - Ejemplos de aplicacin
4.4 Generar una seal PWM
La precisin de este mtodo depende de la latencia de las interrupciones
del temporizador.
Para generar seales de mayor frecuencia usar modo 2.

Arrancar tempo. Arrancar tempo. Repetir


Valor 0 Valor 1

TEMPORIZADORES Y CONTADORES 75
4 - Ejemplos de aplicacin
4.4 Generar una seal PWM

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

TEMPORIZADORES Y CONTADORES 76
4 - Ejemplos de aplicacin
4.5 Leer un timer al vuelo

ReadTimer: MOV ValH,TH0 ;Leer parte alta y baja.


MOV ValL,TL0
MOV A,TH0 ;Leer nuevamente parte alta.
CJNE A,ValH,ChkHigh ;Ha cambiado?
SJMP RTEX ;Si no, la primera lectura es vlida.

ChkHigh: JB ValL.7,RTEX ;Otro caso, verificar parte baja para ver


; si ha cambiado despes de leer la parte
; alta original.
MOV ValH,A ;Si ha cambiado, usar la segunda lectura
; de la parte alta
RTEX: RET

TEMPORIZADORES Y CONTADORES 77
Solucin actividad
Generar 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 interrupcin.
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 78
Solucin actividad
Se desea disponer de una funcin C para realizar retardos de
precisin del orden de milisegundos. Reloj del ? C de 12 Mhz.
void delay_ms(unsigned int mseg)
{
long l;
unsigned int desbordes, resto;

l = 1000L * mseg; /* ciclos mquina 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;
}

TEMPORIZADORES Y CONTADORES 79
Actividad
Conseguir que el tiempo a nivel alto y a nivel bajo sean distintos.
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;
}

TEMPORIZADORES Y CONTADORES 80
? EJERCICIO:
Realizar un programa en lenguaje C, que configure el TEMPORIZADOR-0
en modo 2 (Temporizador/Contador de 8 bits con autorrecarga), de forma
que genere una interrupcin con cada overflow. El manejador de
interrupcin tendr como nica misin invertir el valor de P3.5

SOLUCIN:
7 6 5 4 3 2 1 0

IEN0 1 0 0 0 0 0 1 0 = $82

EAL WDT ET2 ES0 ET1 EX1 ET0 EX0

7 6 5 4 3 2 1 0

TMOD 0 0 0 0 0 0 1 0 = $02

GATE C/T M1 M0 GATE C/T M1 M0

TIMER-0

TEMPORIZADORES Y CONTADORES 81
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)


{
/* Inicializacin de registros */
IEN0 = 0x82; /* Habilitacin Interrupciones */
TMOD = 0x02; /* Configuracin 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 82
Bibliografa

[Domng2001] C. Domnguez, J.M. Martnez, A. Perles, J. Albaladejo, H.


Hassan. Curso de Informtica Industrial: Aplicacin con el
microcontrolador. Ed. Universidad Politcnica de Valencia,
2001.

[Campelo1998] J. C. Campelo, A. Perles, F. Rodrguez. Microcontroladores


Intel MCS-51. Arquitectura y programacin. Ed. Universidad
Politcnica de Valencia, 1.998.

[Martnez2001] J.M. Martnez, C. Domnguez, A. Perles, H. Hassan, J.


Albaladejo. Problemas de microcontroladores de la familia
MCS-51. Ed. Universidad Politcnica de Valencia, 2001.

[Intel1994] MCS-51 Microcontroller Family Users Manual.

TEMPORIZADORES Y CONTADORES 83

Вам также может понравиться