Sei sulla pagina 1di 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

Resumen de contenidos

1 Introduccin.
2 Los Temporizadores/Contadores 0 y 1.
2.1
2.2
2.3
2.4
2.5
2.6

Caractersticas bsicas.
Hardware involucrado.
Diagrama de bloques.
Registros SFR TMOD y TCON.
Modos de funcionamiento.
Ejemplos.

3 Interrupciones asociadas a los contadores/temporizadores.


4 Ejemplos de aplicacin.
4.1
4.2
4.3
4.4

Medicin del ancho de un pulso positivo.


Medicin del perodo de una seal.
Generacin de un pulso.
Generacin de una seal PWM.

TEMPORIZADORES Y CONTADORES

1 - Introduccin

TEMPORIZADORES Y CONTADORES

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

1 - Introduccin
EJEMPLO: Control velocidad motor asignatura Regulacin Automtica
Motor

Encoder

Puente
en H

PWM

Pulsos
Modulador
PWM

PID
analgico

Frecuencia
Tensin

Referencia
TEMPORIZADORES Y CONTADORES

1 - Introduccin
EJEMPLO: Control velocidad motor asignatura Regulacin Automtica
Motor

Encoder

Puente
en H

PWM

Microcontrolador

Pulsos

PID
digital
Referencia
TEMPORIZADORES Y CONTADORES

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

1 - Introduccin
Medir ancho de un pulso

Encoder
Pulsos

P1.0

Cuenta=0

Nivel
0?

SI
0

Incrementa
cuenta
Nivel
1?

SI

es_0:
es_1:

...
MOV DPTR,#0
JNB P1.0,es_0
INC DPTR
JB P1.0,es_1
...

TEMPORIZADORES Y CONTADORES

1 - Introduccin
Medir ancho de un pulso

Encoder
Pulsos

P1.0

Cuenta=0

Nivel
0?

SI
0

Incrementa
cuenta
Nivel
1?

SI

unsigned int contador=0;


while (!P1.0) {}
while (P1.0)
{
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
0

1 = cerrado

Contador
Contador

C/T
1

pin
T0

TF0

(P3.4)
GATE

Control
de puerta

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

18

2 - T/C 0 y T/C 1 en la familia MCS-51


2.3 Diagrama de bloques
OSC

1/12
0

1 = cerrado

Contador
Contador

C/T
1

pin
T0

TF0

(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
0

1 = cerrado

Contador

C/T
1

pin
T0

TF0

(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
0

1 = cerrado

Contador

C/T
1

pin
T0

TF0

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
0
C/T
1

pin
T0

1 = cerrado

Contador

TF0

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
1/12

OSC

1 = cerrado

Contador

C/T
1
pin
T0

TF0

Interrupcin
GATE

pin
/INT0
TR0

T/C 1
b7
GATE

TMOD, dir. 89h, por mscara


M1
M0
GATE
C/T

C/ T

T/C 1
b7
TF1

T/C 0

TR1

b0
M0

M1
T/C 0

TCON, dir. 88h, bit a bit


TF0
TR0
IE1
IT1

IE0

b0
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
1/12

OSC

1 = cerrado

Contador

C/T
1
pin
T0

TF0

Interrupcin
GATE

pin
/INT0
TR0

b7
GATE

TMOD, dir. 89h, por mscara


M1
M0
GATE
C/T

C/ T

T/C 1
b7
TF1

TR1

b0
M0

M1
T/C 0

TCON, dir. 88h, bit a bit


TF0
TR0
IE1
IT1

IE0

b0
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
1/12

OSC

1 = cerrado

Contador

C/T
1
pin
T0

Bit C/T Interrupcin


Seleccin modo
contador o temporizador.
0 -> temporizador
1 -> contador

GATE
pin
-INT0
TR0

b7
GATE

TMOD, dir. 89h, por mscara


M1
M0
GATE
C/T

C/ T

T/C 1
b7
TF1

TF0

TR1

b0
M0

M1
T/C 0

TCON, dir. 88h, bit a bit


TF0
TR0
IE1
IT1

IE0

b0
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
0

1 = cerrado

Contador

C/T

pin
T0
GATE

pin
T0

pin
/INT0

TF0

Interrupcin
Pulso muy estrecho:
se pierde!

TR0

C.M.C.M.
? Operacin como temporizador
Cuentan ciclos de mquina (1 ciclo mquina 0
(C.M.)
1= 12 ciclos
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
1/12

OSC

1 = cerrado

Contador

C/T
1
pin
T0

TF0

Interrupcin

Bit TR0
Activacin T/C 0.
0 -> desactivado
1 -> activado

GATE
pin
/INT0
TR0

b7
GATE

TMOD, dir. 89h, por mscara


M1
M0
GATE
C/T

C/ T

T/C 1
b7
TF1

TR1

b0
M0

M1
T/C 0

TCON, dir. 88h, bit a bit


TF0
TR0
IE1

IT1

IE0

b0
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
1/12

OSC

1 = cerrado

Contador

C/T
1
pin
T0

TF0

Interrupcin

Bit GATE
Control de puerta.
0 -> interno (software)
1 -> externo (hardware)

GATE
pin
/INT0
TR0

b7
GATE

TMOD, dir. 89h, por mscara


M1
M0
GATE
C/T

C/ T

T/C 1
b7
TF1

TR1

b0
M0

M1
T/C 0

TCON, dir. 88h, bit a bit


TF0
TR0
IE1

IT1

IE0

b0
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
1/12

OSC

1 = cerrado

Contador

C/T
1
pin
T0

GATE

Interrupcin

Bit GATE
Control de puerta.
0 -> interno (software)
1 -> externo (hardware)

pin
D/INT0
TR0

b7
GATE

TMOD, dir. 89h, por mscara


M1
M0
GATE
C/T

C/ T

T/C 1
b7
TF1

TR1

TF0

b0
M0

M1
T/C 0

TCON, dir. 88h, bit a bit


TF0
TR0
IE1

IT1

IE0

b0
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
1/12

OSC

1 = cerrado

Contador

C/T
1
pin
T0

GATE

Interrupcin

Bit GATE
Control de puerta.
0 -> interno (software)
1 -> externo (hardware)

pin
D/INT0
TR0

b7
GATE

TMOD, dir. 89h, por mscara


M1
M0
GATE
C/T

C/ T

T/C 1
b7
TF1

TR1

TF0

b0
M0

M1
T/C 0

TCON, dir. 88h, bit a bit


TF0
TR0
IE1

IT1

IE0

b0
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
1/12

OSC

1 = cerrado

Contador

C/T
1
pin
T0

Modo

GATE

TR0

TMOD, dir. 89h, por mscara


M1
M0
GATE
C/T

C/ T

T/C 1
b7
TF1

Interrupcin

Modo 0: Contador 13 bits.


Modo 1: Contador 16 bits.
Modo 2: Cont. 8 bit autorrecarga
Modo 3: Desdoble (T/C0)

pin
/INT0

b7
GATE

TF0

TR1

b0
M0

M1
T/C 0

TCON, dir. 88h, bit a bit


TF0
TR0
IE1

IT1

IE0

b0
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


1/12

OSC

1 = cerrado

111...100
000...010
000...001
000...000
111...111
111...110
111...101
Contador

C/T
1
pin
T0

ContadorInterrupcin

GATE

Registros SFR TH0 y TL0.


Ascendente.
Y cuando desborda ...

pin
/INT0
TR0

b7
GATE

TMOD, dir. 89h, por mscara


M1
M0
GATE
C/T

C/ T

T/C 1
b7
TF1

TF0

TR1

b0
M0

M1
T/C 0

TCON, dir. 88h, bit a bit


TF0
TR0
IE1

IT1

IE0

b0
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
1/12

OSC

1 = cerrado

Contador

C/T
1
pin
T0

Bit TF0 Interrupcin


Timer flag 0.
1 -> desborde
PERO NO SE DETIENE
EL CONTADOR

GATE
pin
/INT0
TR0

b7
GATE

TMOD, dir. 89h, por mscara


M1
M0
GATE
C/T

C/ T

T/C 1
b7
TF1

TF0

TR1

b0
M0

M1
T/C 0

TCON, dir. 88h, bit a bit


TF0
TR0
IE1

IT1

IE0

b0
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
Duracin=2000000? s=1? s*2000000

No
No cabe
cabe en
en
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
menor peso) (13 bits en total). (los 3 bits de mayor peso de TLx son de valor
indeterminado)
Temporizador/contador de 16 bits, con THx y TLx en cascada
Temporizador/contador de 8 bits con autorrecarga. THx contiene el valor de recarga
para TLx tras cada desbordamiento
Para 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.

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
0

C/T
1
pin
T0

1 = cerrado

MSB

TL0
TH0
5 bits
Contador
8 bits

TF0

de menor
peso

Interrupcin
GATE

13 bits

pin
/INT0
TR0

M1

M0

MODO 0: Contador de 13 bits


Modo
Temporizador/contador de 8 bits con THx. TLx acta como preescala de 5 bits (13 bits
en total).
Temporizador/contador de 16 bits, con THx y TLx en cascada
Temporizador/contador de 8 bits con autorrecarga. THx contiene el valor de recarga
para TLx tras cada desbordamiento
Para 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.

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
0

C/T
1

MSB

1 = cerrado

TL0
TH0
Contador
8 bits
8 bits

pin
T0

TF0

Interrupcin
GATE

16 bits

pin
/INT0
TR0

M1

M0

MODO 1: Contador de 16 bits


Modo
Temporizador/contador de 8 bits con THx. TLx acta como preescala de 5 bits (13 bits
en total).
Temporizador/contador de 16 bits, con THx y TLx en cascada
Temporizador/contador de 8 bits con autorrecarga. THx contiene el valor de recarga
para TLx tras cada desbordamiento
Para 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.

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
0
C/T
1

1 = cerrado

TL0
Contador
8 bits

pin
T0

Recarga
GATE

pin
/INT0

TF0

Interrupcin

TH0
8 bits

TR0

M1

M0

MODO 2: Contador de 8 bits con autorrecarga


Modo
Temporizador/contador de 8 bits con THx. TLx acta como preescala de 5 bits (13 bits
en total).
Temporizador/contador de 16 bits, con THx y TLx en cascada
Temporizador/contador de 8 bits con autorrecarga. THx contiene el valor de recarga
para TLx tras cada desbordamiento
Para 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.

TEMPORIZADORES Y CONTADORES

39

2 - T/C 0 y T/C 1 en la familia MCS-51


2.5 Modos de funcionamiento
TR1

OSC

TH0
TH0

1/12

??????
8 bits

0
C/T
1

TL0
TL0

??????

TF1

Intr

TF0

Intr

8 bits

pin T0
GATE
pin INT0

MODO 3: Desdoble T/C 0

TR0

M1

M0

Modo
Temporizador/contador de 8 bits con THx. TLx acta como preescala de 5 bits (13 bits
en total).
Temporizador/contador de 16 bits, con THx y TLx en cascada
Temporizador/contador de 8 bits con autorrecarga. THx contiene el valor de recarga
para TLx tras cada desbordamiento
Para 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.

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?


0.

Cuenta
T0

TEMPORIZADORES Y CONTADORES

0
2
1

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
GATE

TMOD, dir. 89h, por mscara


M1
M0
GATE C / T

C/ T

T/C 1
b7
TF1

TR1

TCON, dir. 88h, bit a bit


TF0
TR0
IE1

1T/C 0 M10
IT1

IE0

b0
M0

1
b0
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
GATE

TMOD, dir. 89h, por mscara


M1
M0
GATE C / T

C/ T

T/C 1
b7
TF1

TR1

TCON, dir. 88h, bit a bit


TF0
TR0
IE1

1T/C 0 M10
IT1

IE0

b0
M0

1
b0
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;
vehiculos = vehiculos << 8;
TR0=1;
/* arrancar timer */
vehiculos = vehiculos | TL0;
while(1) {
/* 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.

1Ciclo Mquina ?

12 Mhz
?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
GATE

TMOD, dir. 89h, por mscara


M1
M0
GATE C / T

C/ T

T/C 1
b7
TF1

TR1

TCON, dir. 88h, bit a bit


TF0
TR0
IE1

0T/C 0 M10
IT1

IE0

b0
M0

1
b0
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.

Descripcin

Nombre

Cont./Temp. 0
Cont./Temp.1

T/C0
T/C1

Flag hab. Flag act.


Nm
Vector Borrado
(IEN0) (TCON)
Interrup
ET0
TF0
000Bh
Hw
1
ET1
TF1
001Bh
Hw
3

OSC 1/12
C/T
pin
T0

0
1

1 = cerrado

Contador

TF0

Interrupcin
GATE

pin
/INT0

TR0

Bit ET0
Habilitacin de
interrupcin.
TEMPORIZADORES Y CONTADORES

51

3 Interrupciones asociadas a los T/C


Borrado automtico
al vectorizarse.
(puesta a 0)

? Permite sacar el mximo partido


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

Nombre

Cont./Temp. 0
Cont./Temp.1

T/C0
T/C1

Flag hab. Flag act.


Nm
Vector Borrado
(IEN0) (TCON)
Interrup
ET0
TF0
000Bh
Hw
1
ET1
TF1
001Bh
Hw
3

OSC 1/12
C/T
pin
T0

0
1

1 = cerrado

Contador

TF0

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
Descripcin

Nombre

Cont./Temp. 0
Cont./Temp.1

T/C0
T/C1

Flag hab. Flag act.


Nm
Vector Borrado
(IEN0) (TCON)
Interrup
ET0
TF0
000Bh
Hw
1
ET1
TF1
001Bh
Hw
3

OSC 1/12
C/T
pin
T0

0
1

1 = cerrado

Contador

TF0

Interrupcin
GATE

pin
-INT0

TR0

Direccin de
rutina interrupcin.

void servicio (void)interrupt 1


{
/* codigo */
}
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
Descripcin

Nombre

Cont./Temp. 0
Cont./Temp.1

T/C0
T/C1

Flag hab. Flag act.


Nm
Vector Borrado
(IEN0) (TCON)
Interrup
ET0
TF0
000Bh
Hw
1
ET1
TF1
001Bh
Hw
3

OSC 1/12
C/T
pin
T0

0
1

1 = cerrado

Contador

TF0

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.
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.

P1.0

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
GATE

b7
TF1

TMOD, dir. 89h, por mscara


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

TR1

TCON, dir. 88h, bit a bit


TF0
TR0
IE1

IT1

1
IE0

b0
M0

0
b0
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

Contador

C/T
1
pin
T0

GATE

pin
/INT0
TR0

0
0

TF0
Interrupcin

0
No
cuenta!

TEMPORIZADORES Y CONTADORES

64

4 - Ejemplos de aplicacin
4.1 Medir el ancho de un pulso positivo

OSC

1/12
1 = cerrado

Contador

C/T
1
pin
T0

GATE

pin
/INT0
TR0

0
1

TF0
Interrupcin

1
Si
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

Termina de contar

TR0 = 1
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
generar peticin
Interrupcin externa:

Flanco bajada
generar peticin
Interrupcin externa:

Flanco bajada
generar peticin
Interrupcin externa:

Comenzar cuenta

Parar cuenta
y procesar cuenta

Comenzar 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
temporizador y
comenzar cuenta

El manejador de la interrupcin
del T/C 0, dar por finalizado
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;
P2.0 = 1;

/* Arrancar temporizador. */
/* 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
MOV

TCON,#$00
TMOD,#$01

;Asegurarse que el temporizador est parado.


;Temporizador en modo 1.

MOV

TH0,#HiTime

;Cargar T/C 0 con la cuenta para la


; duracin del pulso.

MOV
SETB

TL0,#LoTime
TR0

;Arrancar temporizador.

SETB

P2.0

;Comenienzo pulso.

;Manejador interrupcin del T/C 0.


TC0INT:
CLR
P2.0
CLR
RETI

TR0

;Final del pulso.


;Parar temporizador.

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.
Valor 0

Arrancar tempo.
Valor 1

Repetir

TEMPORIZADORES Y CONTADORES

75

4 - Ejemplos de aplicacin
4.4 Generar una seal PWM

T0INT:

SetPWMHigh:

T0EX:

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

MOV

TH0,PWMHighH

MOV

TL0,PWMHighL

SETB

TR0

;Poner PWM a 1.

;Reinicializar temporizador.

RETI

TEMPORIZADORES Y CONTADORES

76

4 - Ejemplos de aplicacin
4.5 Leer un timer al vuelo

ReadTimer: MOV
MOV
MOV
CJNE
SJMP

ValH,TH0
ValL,TL0
A,TH0
A,ValH,ChkHigh
RTEX

;Leer parte alta y baja.

ChkHigh:

JB

ValL.7,RTEX

MOV

ValH,A

;Otro caso, verificar parte baja para ver


; si ha cambiado despes de leer la parte
; alta original.
;Si ha cambiado, usar la segunda lectura
; de la parte alta

RTEX:

;Leer nuevamente parte alta.


;Ha cambiado?
;Si no, la primera lectura es vlida.

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;
while (1)
{ /* otras cosas */ }
}

/* a correr */

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
#define T_OFF
#define P_OUT

1000
2000
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
IEN0

1
EAL

TMOD

ET2

ES0

ET1

EX1

ET0

EX0

M1

M0

M1

M0

WDT

GATE

C/T

GATE

C/T

= $82

= $02

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;
void main (void)
{
/* Inicializacin de registros */
IEN0 = 0x82;
TMOD = 0x02;
TH0 = 0x05;
TL0
= 0x05;
TR0
= 1;
while (1) {}
}
void T0_int (void) interrupt 1
{
P3.5 = ~P3.5;
}

/* Rutina Timer-0 */

/* Habilitacin Interrupciones */
/* Configuracin Timer-0 */
/* Valor inicial en TH0 */
/* Valor inicial en TL0 */
/* Arranque del Timer-0 */

/* 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

Potrebbero piacerti anche