TEMPORIZADORES Y CONTADORES (T/C) (Timers/Counters)



Documentos relacionados
TEMPORIZADORES Y CONTADORES

Guía resumida para utilizar el microcontrolador CY7C68013

BLOQUE 3. Enrique Mandado Pérez María José Moure Rodríguez. Microcontroladores

Temporizadores y contadores en tiempo real: El módulo Timer0 y el prescaler del PIC

INTERRUPCIONES. Existen 256 interrupciones En el modo real cada una tiene un vector asociado Vectores de 4 bytes: segmento + offset 32 F0 50 8A

INTERRUPCIONES. La comunicación asíncrona de los sistemas periféricos con la CPU, en ambos sentidos, se puede establecer de dos maneras fundamentales:

TUTORIAL PRIMERA PARTE: GENERACIÓN DE UN RETARDO CON TIMER.

Tablas familia MCS-51 (8051)

Tema. Módulo Captura Comparación Modulación n de Achura de Pulsos. C. F. G.S. D.P.E. Módulo de Proyectos 1

El TIMER 0. (c) Domingo Llorente

EL SISTEMA DE INTERRUPCIONES

Control Digital en PC con MS-DOS

Diseño y construcción de la base de un robot móvil autónomo gobernada por microcontrolador

DESCRIPCION DEL SITEMA MASTER.

Tema 14. Interrupciones. Las. C. F. G.S. D.P.E. Módulo de Proyectos 1

Unidad 1: Conceptos generales de Sistemas Operativos.

Cuestionario: Programación en C y máscaras (II)

AUTOMATIZACION. Reconocer la arquitectura y características de un PLC Diferenciar los tipos de entradas y salidas

Gestión digital sencilla de controladores de fuentes de alimentación analógicas

CAN-101, HT6P20x2 Encoder para aplicaciones remotas de control

UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Diseño con Microcontroladores

Control, Instrumentación e Instalaciones Ingeniería Ambiental

Señal de petición de Interrupción

TEMA 2. Interrupciones y periféricos básicos

Programación del Timer1 para la captura de flancos

STEP 7 INDICE. Contadores rápidos Restricciones en el uso de los contadores rápidos HSC0, HSC3, HSC4, HSC5

SISTEMAS ELECTRÓNICOS AVANZADOS. ING. TÉC. INDUSTRIAL ELECTRÓNICO

Estructura de Computadores

Programación de Microcontroladores

Cursos de Perfeccionamiento

podemos enfocar al funcionamiento del robot, es decir la parte de electrónica. Para que el

2º CURSO INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN TEMA 5 ENTRADA/SALIDA. JOSÉ GARCÍA RODRÍGUEZ JOSÉ ANTONIO SERRA PÉREZ Tema 5.

Operaciones con Temporizadores

Introducción a Arduino

Tema 2: Programación de PLCs

TEMA III - Interrupciones en Sistemas en Tiempo Real

Departamento de Ingeniería de Sistemas y Automática TEMPORIZADORES, CONTADORES Y ACUMULADORES

Temporizadores y contadores en tiempo real: El módulo Timer0 del PIC.

6. TARJETA TELEFÓNICA: MARCACIÓN, DETECCIÓN DE PASO A FALTA, TONOS, PULSOS, INTERRUPCIÓN

REGISTROS DE DESPLAZAMIENTO

Práctica 1. Programación y Simulación de un PLC

Sesión 8 Sensor de Ultrasonido

CAPITULO 4. Inversores para control de velocidad de motores de

18. Camino de datos y unidad de control

6-REGISTROS DEL 8086 Y DEL 80286

INTRODUCCIÓN. Interrupciones.

Control y temporización Comunicación con la CPU Comunicación con el dispositivo externo Almacén temporal de datos Detección de errores

Usando los Codificadores Cuadráticos

CAPÍTULO 3. Las principales funciones del microcontrolador son: adquirir por medio del A/D y también, mostrar mensajes de pesos y voltaje en el LCD.

5. SECCIÓN DEL MICROCONTROLADOR (PROGRAMACIÓN)

Maqueta: Osciloscopio y generador

Competencia de Robótica R2-D2 2014

Sistemas de Numeración Operaciones - Códigos

Guía de la Práctica 1

Práctica 2: Operaciones Binarias

Informática Industrial (II)

PUERTOS DE ENTRADA Y SALIDA

Introducción a los Sistemas Operativos

Anexo B. Comunicaciones entre mc y PC

Problema: Barrera de Garaje

Lector de códigos de barras con microcontrolador Motorola HC11

Tema N 2.- Tiempo de respuesta de un PLC

1. Representación de la información en los sistemas digitales

3. FUNCIONAMIENTO DE LA FUNCIONES TXD Y RXD 4. EJEMPLO DE ENVÍO DE SMS DESDE EL PLC 5. EJEMPLO DE RECEPCIÓN DE SMS EN EL PLC

Para comenzar realizaremos el ejercicio-ejemplo de poner a titilar un led.

PRACTICA #1. Aprender a programar una interrupción software empleando C y/o Ensamblador.

Comunicación Asíncrona

Modos de ahorro de energía a en los chips CMOS

Control de motores de CC

Tema 5 Sentencias de control de flujo. Fundamentos de Informática

El temporizador /contador Intel 8254

TEMPORIZADORES, CONTADORES Y COMPARADORES

Características de algunos Registros de Funciones Especiales (SFR):

V W V W

PROYECTO DE ELECTRÓNICA

Modos de programación del módulo Easy Control

El soporte del sistema operativo. Hace que un computador sea más fácil de usar. Permite que los recursos del computador se aprovechen mejor.

Universidad Autónoma de Baja California Facultad de Ingeniería Mexicali

Tema IV. Unidad aritmético lógica

VELOCIDAD DE TRANSFERENCIA A MEMORIA USB CON EL GL900.

INTRODUCCION A LA PROGRAMACION DE PLC

Pipelining o Segmentación de Instrucciones

TEMA 4. Unidades Funcionales del Computador

Práctica 4: Toma de medidas mediante tarjeta de adquisición de datos.

ACTUALIZACION MANUAL: MODO OFFLINE (Ejemplo: WINDOWS 7-32 bits):

AUTOMATIZACIÓN INDUSTRIAL

Examen Junio- Grupo A Lunes 17 de Junio - Programación en C++ Pág. 1

Microprocesadores, Tema 6:

Sensor de Temperatura utilizando el Starter Kit Javelin Stamp. Realizado por: Bertha Palomeque A. Rodrigo Barzola J.

Regulador PID con convertidores de frecuencia DF5, DV5, DF6, DV6. Página 1 de 10 A Regulador PID

SENSORES DE DISTANCIA POR ULTRASONIDOS

Leica Application Suite

Ensamblador. Interrupciones. Dentro de una computadora existen dos clases de interrupciones:

Sistemas Operativos. Curso 2016 Procesos

Nociones básicas sobre adquisición de señales

14 - AR R AN Q U E Y P U E S T A E N M AR C H A

LOS PIC16F88X: Comparadores

Inversores De Frecuencia

Práctica No. 4 del Curso "Microcontroladores" Uso del Convertidor ADC

Transcripción:

TEMPORIZADORES Y CONTADORES (T/C) (Timers/Counters)

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 2

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 3

1 - Introducción TEMPORIZADORES Y CONTADORES 4

1 - Introducción Muchas aplicaciones de automatización y regulación necesitan...? Contabilizar eventos externos Contar cajas en una cinta transportadora, vehículos en una carretera,... Velocidad de un motor (encoder)? 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? Medir frecuencias/periodos de señales digitales Sensores. Receptores de señales infrarrojas, radio... TEMPORIZADORES Y CONTADORES 5

1 - Introducción EJEMPLO: Control velocidad motor asignatura Regulación Automática Motor Encoder Puente en H PWM Modulador PWM PID analógico Frecuencia Tensión Pulsos Referencia TEMPORIZADORES Y CONTADORES 6

1 - Introducción EJEMPLO: Control velocidad motor asignatura Regulación Automática Motor Encoder Puente en H PWM Microcontrolador PID digital Pulsos Referencia TEMPORIZADORES Y CONTADORES 7

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 Encoder Toff = 0 Ton = 1 Pulsos TEMPORIZADORES Y CONTADORES 8

1 - Introducción Medir ancho de un pulso Encoder Cuenta=0 Pulsos P1.0 µc Nivel 0? SI 0 1 Incrementa cuenta Nivel 1? SI... MOV DPTR,#0 es_0: JNB P1.0,es_0 es_1: INC DPTR JB P1.0,es_1... TEMPORIZADORES Y CONTADORES 9

1 - Introducción Medir ancho de un pulso Encoder Cuenta=0 Pulsos P1.0 µc Nivel 0? SI 0 1 Incrementa cuenta Nivel 1? SI unsigned int contador=0; while (!P1.0) {} while (P1.0) { contador++; } TEMPORIZADORES Y CONTADORES 10

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.? Solución: Emplear contadores y/o temporizadores (T/C).? 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. TEMPORIZADORES Y CONTADORES 11

1 - Introducción? 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? 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,... 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 Características básicas? 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. TEMPORIZADORES Y CONTADORES 14

2 - T/C 0 y T/C 1 en la familia MCS-51 2.1 Características básicas? 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 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). TEMPORIZADORES Y CONTADORES 16

2 - T/C 0 y T/C 1 en la familia MCS-51 2.3 Diagrama de bloques Generación: - Eventos externos - Señal reloj interno Contador Control de puerta 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). 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 T0 C/T 0 1 1 = cerrado Contador TF0 (P3.4) /INT0 (P3.2) GATE TR0 Control de puerta 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). 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 T0 C/T 0 1 1 = cerrado Contador TF0 (P3.4) /INT0 GATE (P3.2) TR0 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). 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 T0 C/T 0 1 1 = cerrado Contador TF0 (P3.4) /INT0 GATE (P3.2) TR0 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). 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 T0 (P3.4) /INT0 GATE C/T 0 1 1 = cerrado Contador TF0 Interrupción (si está habilitada) (P3.2) TR0 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). TEMPORIZADORES Y CONTADORES 21

2 - T/C 0 y T/C 1 en la familia MCS-51 T/C 0 T0 2.3 Diagrama de bloques OSC 1/12 C/T 0 1 1 = cerrado Contador TF0 Interrupción GATE /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 T0 C/T 0 1 1 = cerrado Contador TF0 Interrupción GATE /INT0 TR0 T/C 1 T/C 0 b7 TMOD, dir. 89h, por máscara 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 T0 C/T 0 1 1 = cerrado Contador TF0 Interrupción GATE /INT0 TR0 b7 TMOD, dir. 89h, por máscara 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 T0 -INT0 GATE TR0 C/T 0 1 1 = cerrado Contador TF0 Bit C/T Interrupción Selección modo contador o temporizador. 0 -> temporizador 1 -> contador b7 TMOD, dir. 89h, por máscara 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

T0 /INT0 GATE TR0 2 - T/C 0 y T/C 1 en la familia MCS-51 OSC 1/12 C/T? Operación como temporizador 0 1 1 = cerrado Contador TF0 Interrupción Pulso muy estrecho: se pierde! Cuentan ciclos de máquina (1 ciclo máquina (C.M.) = 12 ciclos de reloj).? Operación como contador 2.4 Registros SFR TMOD y TCON 01 T0 Detección de flancos de bajada en el T0 (P3.4). C.M. C.M. Muestreo cada CM -> Flanco de bajada = detectar 1 y después 0. 0 1 Máxima frecuencia detectable será 1/24 frecuencia reloj. 0 0 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 T0 /INT0 GATE TR0 C/T 0 1 1 = cerrado Contador TF0 Interrupción Bit TR0 Activación T/C 0. 0 -> desactivado 1 -> activado b7 TMOD, dir. 89h, por máscara 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 T0 /INT0 GATE TR0 C/T 0 1 1 = cerrado Contador TF0 Interrupción Bit GATE Control de puerta. 0 -> interno (software) 1 -> externo (hardware) b7 TMOD, dir. 89h, por máscara 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 D T0 /INT0 1 GATE TR0 0 C/T 1 0 D 1 = cerrado Contador TF0 Interrupción Bit GATE Control de puerta. 0 -> interno (software) 1 -> externo (hardware) b7 TMOD, dir. 89h, por máscara 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 D T0 /INT0 0 GATE TR0 0 C/T 1 1 1 1 = cerrado Contador TF0 Interrupción Bit GATE Control de puerta. 0 -> interno (software) 1 -> externo (hardware) b7 TMOD, dir. 89h, por máscara 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 T0 /INT0 GATE TR0 C/T 0 1 1 = cerrado Contador TF0 Interrupción Modo Modo 0: Contador 13 bits. Modo 1: Contador 16 bits. Modo 2: Cont. 8 bit autorrecarga Modo 3: Desdoble (T/C0) b7 TMOD, dir. 89h, por máscara 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 2.4 Registros SFR TMOD y TCON Interrupción OSC 1/12 T0 /INT0 GATE TR0 C/T 0 1 1 = cerrado 111...100 111...101 111...110 111...111 000...000 000...001 000...010 Contador 1 TF0 Contador Interrupción Registros SFR TH0 y TL0. Ascendente. Y cuando desborda... b7 TMOD, dir. 89h, por máscara 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 T0 /INT0 GATE TR0 C/T 0 1 1 = cerrado Contador TF0 Bit TF0 Interrupción Timer flag 0. 1 -> desborde PERO NO SE DETIENE EL CONTADOR b7 TMOD, dir. 89h, por máscara 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. Cuál es el valor a cargar como cuenta inicial? Para un valor de f OSC =12MHz: Duración de 1 Ciclo Máquina: Si se utilizan 8 bits: 256-125=131=83H 1 12MHz *12=1? s Duración=125?s=1?s*Cuenta Duración=125?s=1?s*125 Si se utilizan 16 bits: 65536-125=65411=FF83H THx=? TLx=131 THx=255 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. Cuál es el valor a cargar como cuenta inicial? (f OSC =12MHz) Duración=2000000? s=1? s*cuenta Duración=2000000? s=1? s*2000000 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 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 0 0 0 Temporizador/contador de 8 bits con THx. TLx actúa 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) 0 1 1 Temporizador/contador de 16 bits, con THx y TLx en cascada 1 0 Temporizador/contador de 8 bits con autorrecarga. THx contiene el valor de recarga 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 T0 /INT0 GATE TR0 OSC 1/12 C/T 0 1 1 = cerrado TL0 5 bits Contador TH0 de menor peso TF0 Interrupción M1 M0 Modo 0 0 0 Temporizador/contador de 8 bits con THx. TLx actúa como preescala de 5 bits (13 bits en 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 recarga para TLx tras cada desbordamiento 1 1 3 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. LSB 13 bits 8 bits MSB MODO 0: Contador de 13 bits TEMPORIZADORES Y CONTADORES 37

2 - T/C 0 y T/C 1 en la familia MCS-51 2.5 Modos de funcionamiento T0 /INT0 GATE TR0 OSC 1/12 C/T 0 1 1 = cerrado LSB 16 bits MSB TL0 Contador TH0 TF0 Interrupción M1 M0 Modo 0 0 0 Temporizador/contador de 8 bits con THx. TLx actúa como preescala de 5 bits (13 bits en 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 recarga para TLx tras cada desbordamiento 1 1 3 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. 8 bits 8 bits MODO 1: Contador de 16 bits TEMPORIZADORES Y CONTADORES 38

2 - T/C 0 y T/C 1 en la familia MCS-51 2.5 Modos de funcionamiento T0 /INT0 GATE TR0 OSC 1/12 C/T 0 1 1 = cerrado Contador TL0 TF0 Interrupción M1 M0 Modo 0 0 0 Temporizador/contador de 8 bits con THx. TLx actúa como preescala de 5 bits (13 bits en 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 recarga para TLx tras cada desbordamiento 1 1 3 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. 8 bits TH0 8 bits Recarga MODO 2: Contador de 8 bits con autorrecarga TEMPORIZADORES Y CONTADORES 39

2 - T/C 0 y T/C 1 en la familia MCS-51 TR1 2.5 Modos de funcionamiento OSC 1/12 TH0 8 bits TF1 Intr C/T 0 1 TL0 8 bits TF0 Intr T0 GATE INT0 TR0 MODO 3: Desdoble T/C 0 M1 M0 Modo 0 0 0 Temporizador/contador de 8 bits con THx. TLx actúa como preescala de 5 bits (13 bits en 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 recarga para TLx tras cada desbordamiento 1 1 3 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

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 - T/C 0 y T/C 1 en la familia MCS-51 2.6 Ejemplo de un contador T0 µc Cuenta 012 TEMPORIZADORES Y CONTADORES 41

Contador. Interno Modo 1. En principio podemos contar hasta 65535. 0. 2 - T/C 0 y T/C 1 en la familia MCS-51 2.6 Ejemplo de un contador Se desea contabilizar los vehículos que circulan por una carretera. NO excederán de 30.000. TH0=0x00; TL0=0x00; b7 TMOD, dir. 89h, por máscara b0 GATE C / T M1 M0 GATE C / T M1 M0 1 0 T/C 1 T/C 0 0 1 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 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. b7 TMOD, dir. 89h, por máscara b0 GATE C / T M1 M0 GATE C / T M1 M0 1 0 T/C 1 T/C 0 0 1 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 vehículos */ TMOD = 0x05; /* 0101(b => T/C 0, control sw, contador, modo 1 */ TH0=0x00; TL0=0x00; /* sigue... */ } TEMPORIZADORES Y CONTADORES 43

sfr TMOD=0x89,TCON=0x88,TH0=0x8C,TL0=0x8A; sbit TF0=TCON^5, TR0=TCON^4; void main(void) { int vehiculos; 2 - T/C 0 y T/C 1 en la familia MCS-51 2.6 Ejemplo de un contador Se desea contabilizar los vehículos que circulan por una carretera. NO excederán de 30.000. } 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; TEMPORIZADORES Y CONTADORES 44

2 - T/C 0 y T/C 1 en la familia MCS-51 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. 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.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. 2 - T/C 0 y T/C 1 en la familia MCS-51 12 Mhz 1 Ciclo Máquina?? 1? S 12 períodos 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? 2 16? cuenta? 65.536? 10.000? 55.536? D8F0h TEMPORIZADORES Y CONTADORES 46

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) 2 - T/C 0 y T/C 1 en la familia MCS-51 TH0=0xD8; TL0=0xF0; b7 TMOD, dir. 89h, por máscara b0 GATE C / T M1 M0 GATE C / T M1 M0 0 0 T/C 1 T/C 0 0 1 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 función en lenguaje C para realizar retardos de precisión del orden de milisegundos. Reloj del? C de 12 Mhz.? 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 Solución 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. Descripción Nombre Flag hab. Flag act. Núm 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 T0 /INT0 OSC 1/12 GATE TR0 C/T 0 1 1 = cerrado Contador TF0 Interrupción Bit ET0 Habilitación de interrupción. TEMPORIZADORES Y CONTADORES 51

3 Interrupciones asociadas a los T/C? Permite sacar el máximo partido? Liberan a la CPU de tener que encuestar flag de desborde Borrado automático al vectorizarse. (puesta a 0) Descripción Nombre Flag hab. Flag act. Núm 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 T0 /INT0 OSC 1/12 GATE TR0 C/T 0 1 1 = cerrado Contador TF0 Interrupción Bit TF0 Activación petición interrupción. (a 1) TEMPORIZADORES Y CONTADORES 52

3 Interrupciones asociadas a los T/C? Permite sacar el máximo partido? Liberan a la CPU de tener que encuestar flag de desborde Descripción Nombre Flag hab. Flag act. Núm 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 T0 -INT0 OSC 1/12 GATE TR0 C/T 0 1 1 = cerrado Contador TF0 Interrupción Dirección de rutina interrupción. void servicio (void)interrupt 1 { /* codigo */ } TEMPORIZADORES Y CONTADORES 53

3 Interrupciones asociadas a los T/C? Permite sacar el máximo partido? Liberan a la CPU de tener que encuestar flag de desborde Descripción Nombre Flag hab. Flag act. Núm 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 T0 /INT0 OSC 1/12 GATE TR0 C/T 0 1 1 = cerrado Contador TF0 Interrupción Se puede combinar el T/C y la interrupción externa. TEMPORIZADORES Y CONTADORES 54

3 Interrupciones asociadas a los T/C Se trata de un ejemplo típico de tarea periódica. Interesa tener desocupada la CPU para otros menesteres. Se propone que el T/C genere una interrupción transcurrido cada semiperiodo y que la rutina de servicio modifique el valor del. Ejemplo generación onda cuadrada P1.0 10 Khz Generar onda cuadrada de 10 Khz por el P1.0. Reloj del?c de 12 Mhz TEMPORIZADORES Y CONTADORES 55

3 Interrupciones asociadas a los T/C Ejemplo generación onda cuadrada Generar onda cuadrada de 10 Khz por el 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 números 1 Ciclo Máquina? 1? S T? 1 10Khz? 0,1mS? 100? S? Semiperiodo? 50? S( CM ) TEMPORIZADORES Y CONTADORES 56

3 Interrupciones asociadas a los T/C Ejemplo generación onda cuadrada Generar onda cuadrada de 10 Khz por el 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? 2 8? cuenta? 256? 50? 206 TEMPORIZADORES Y CONTADORES 57

Temporizador Interno Modo 2 206 3 Interrupciones asociadas a los T/C Ejemplo generación onda cuadrada Generar onda cuadrada de 10 Khz por el P1.0. Reloj del?c de 12 Mhz TH0=TL0=206; b7 TMOD, dir. 89h, por máscara b0 GATE C / T M1 M0 GATE C / T M1 M0 0 0 1 0 TIMER 1 TIMER 0 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 generación onda cuadrada Generar onda cuadrada de 10 Khz por el 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 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 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 señal está a nivel alto y a nivel bajo sean distintos. Solución TEMPORIZADORES Y CONTADORES 61

4 - Ejemplos de aplicación TEMPORIZADORES Y CONTADORES 62

4 - Ejemplos de aplicación 4.1 Medir el ancho de un pulso positivo 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 un inversor externo.??c? INT0 TEMPORIZADORES Y CONTADORES 63

4 - Ejemplos de aplicación 4.1 Medir el ancho de un pulso positivo Control externo,? T0 /INT0 bit GATE = 1 OSC 1/12 C/T 1 GATE 0 TR0 0 0 1 0 1 = cerrado Contador No cuenta! TF0 Interrupción TEMPORIZADORES Y CONTADORES 64

4 - Ejemplos de aplicación 4.1 Medir el ancho de un pulso positivo? T0 /INT0 OSC 1/12 C/T 1 GATE 0 TR0 1 1 0 1 1 1 = cerrado 1 Contador Si cuenta! TF0 Interrupción TEMPORIZADORES Y CONTADORES 65

4 - Ejemplos de aplicación 4.1 Medir el ancho de un pulso positivo? Aprovechar flanco de bajada para generar una interrupción externa y leer valor cuenta TR0 = 1 Termina de contar Control por HW: Comienza a contar TEMPORIZADORES Y CONTADORES 66

4 - Ejemplos de aplicación 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 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; } TEMPORIZADORES Y CONTADORES 67

4 - Ejemplos de aplicación 4.2 Medir el periodo de una señal La señal se introduce al microcontrolador mediante la entrada de interrupción externa /INT0.??C INT0 TEMPORIZADORES Y CONTADORES 68

? 4 - Ejemplos de aplicación 4.2 Medir el periodo de una señal Control por software. Bit GATE =0 Flanco bajada generar petición Interrupción externa: Comenzar cuenta Flanco bajada generar petición Interrupción externa: Parar cuenta y procesar cuenta Flanco bajada generar petición Interrupción externa: Comenzar cuenta El método puede suponer algo de perdida de precisión debido a las variaciones de latencia de la interrupción. TEMPORIZADORES Y CONTADORES 69

4 - Ejemplos de aplicación 4.2 Medir el periodo de una señal 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 aplicación 4.3 Generar un pulso Se utiliza un 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?c P2.0 TEMPORIZADORES Y CONTADORES 71

Control por software. Bit GATE = 0 P2.0 = 1 4 - Ejemplos de aplicación 4.3 Generar un pulso 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 temporizador P2.0 = 1 Inicializar temporizador y comenzar cuenta El manejador de la interrupción del T/C 0, dará por finalizado el pulso P2.0 = 0 TEMPORIZADORES Y CONTADORES 72

4 - Ejemplos de aplicación 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 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 */ } TEMPORIZADORES Y CONTADORES 73

4 - Ejemplos de aplicación 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 ; duración del pulso. MOV TL0,#LoTime SETB 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 TEMPORIZADORES Y CONTADORES 74

4 - Ejemplos de aplicación 4.4 Generar una señal PWM La precisión de este método depende de la latencia de las interrupciones del temporizador. Para generar señales de mayor frecuencia usar modo 2. Arrancar tempo. Valor 0 Arrancar tempo. Valor 1 Repetir TEMPORIZADORES Y CONTADORES 75

4 - Ejemplos de aplicación 4.4 Generar una señal PWM T0INT: CLR TR0 ;Parar el temporizador. CPL P2.0 ;Complementar valor. 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 aplicación 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 válida. ChkHigh: JB ValL.7,RTEX ;Otro caso, verificar parte baja para ver RTEX: ; si ha cambiado despúes de leer la parte ; alta original. MOV ValH,A ;Si ha cambiado, usar la segunda lectura RET ; de la parte alta TEMPORIZADORES Y CONTADORES 77

Solución actividad Generar onda cuadrada de 50 Hz por el 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 78

Solución actividad Se desea disponer de una función C para realizar retardos de precisión 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 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; 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 interrupción con cada overflow. El manejador de interrupción tendrá como única misión invertir el valor de P3.5 SOLUCIÓN: 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) { /* 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 82

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 el microcontrolador. Ed. Universidad Politécnica de Valencia, 2001. [Campelo1998] J. C. Campelo, A. Perles, F. Rodríguez. Microcontroladores Intel MCS-51. Arquitectura y programación. Ed. Universidad Polité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 familia MCS-51. Ed. Universidad Politécnica de Valencia, 2001. [Intel1994] MCS-51 Microcontroller Family User s Manual. TEMPORIZADORES Y CONTADORES 83