Sistemas integrados: temporizador / contador
UN timeres un tipo de reloj especializado que se utiliza para medir intervalos de tiempo. Un temporizador que cuenta desde cero hacia arriba para medir el tiempo transcurrido se denominastopwatch. Es un dispositivo que cuenta regresivamente desde un intervalo de tiempo específico y se usa para generar un retraso de tiempo, por ejemplo, un reloj de arena es un temporizador.
UN counteres un dispositivo que almacena (y en ocasiones muestra) la cantidad de veces que ocurrió un evento o proceso en particular, con respecto a una señal de reloj. Se utiliza para contar los eventos que ocurren fuera del microcontrolador. En electrónica, los contadores se pueden implementar con bastante facilidad utilizando circuitos de tipo registro, como un flip-flop.
Diferencia entre un temporizador y un contador
Los puntos que diferencian un temporizador de un contador son los siguientes:
Temporizador | Mostrador |
---|---|
El registro se incrementó para cada ciclo de la máquina. | El registro se incrementa considerando la transición de 1 a 0 en su correspondiente pin de entrada externa (T0, T1). |
La tasa de conteo máxima es 1/12 de la frecuencia del oscilador. | La tasa de conteo máxima es 1/24 de la frecuencia del oscilador. |
Un temporizador usa la frecuencia del reloj interno y genera un retraso. | Un contador utiliza una señal externa para contar los pulsos. |
Temporizadores de 8051 y sus registros asociados
El 8051 tiene dos temporizadores, el temporizador 0 y el temporizador 1. Se pueden utilizar como temporizadores o como contadores de eventos. Tanto el temporizador 0 como el temporizador 1 tienen un ancho de 16 bits. Dado que el 8051 sigue una arquitectura de 8 bits, se accede a cada 16 bits como dos registros separados de byte bajo y byte alto.
Temporizador 0 Registro
Se accede al registro de 16 bits del temporizador 0 como byte alto y bajo. El registro de byte bajo se llama TL0 (Timer 0 byte bajo) y el registro de byte alto se llama TH0 (Timer 0 byte alto). Se puede acceder a estos registros como a cualquier otro registro. Por ejemplo, la instrucciónMOV TL0, #4H mueve el valor al byte bajo del temporizador # 0.
Temporizador 1 Registro
Se accede al registro de 16 bits del temporizador 1 como byte alto y bajo. El registro de byte bajo se denomina TL1 (temporizador 1 byte bajo) y el registro de byte alto se llama TH1 (temporizador 1 byte alto). Se puede acceder a estos registros como a cualquier otro registro. Por ejemplo, la instrucciónMOV TL1, #4H mueve el valor al byte bajo del temporizador 1.
Registro TMOD (modo de temporizador)
Tanto el temporizador 0 como el temporizador 1 utilizan el mismo registro para configurar los distintos modos de funcionamiento del temporizador. Es un registro de 8 bits en el que los 4 bits inferiores se reservan para el temporizador 0 y los cuatro bits superiores para los temporizadores. En cada caso, los 2 bits inferiores se utilizan para configurar el modo de temporizador por adelantado y los 2 bits superiores se utilizan para especificar la ubicación.
Gate - Cuando se establece, el temporizador solo funciona mientras INT (0,1) está alto.
C/T - Bit de selección de contador / temporizador.
M1 - Modo bit 1.
M0 - Modo bit 0.
PORTÓN
Cada temporizador tiene un medio para comenzar y detenerse. Algunos temporizadores hacen esto por software, algunos por hardware y algunos tienen controles de software y hardware. Los temporizadores 8051 tienen controles de software y hardware. El inicio y la parada de un temporizador se controla mediante software mediante la instrucciónSETB TR1 y CLR TR1 para el temporizador 1, y SETB TR0 y CLR TR0 para el temporizador 0.
La instrucción SETB se utiliza para iniciarlo y la instrucción CLR lo detiene. Estas instrucciones inician y detienen los temporizadores siempre que GATE = 0 en el registro TMOD. Los temporizadores pueden ser iniciados y detenidos por una fuente externa haciendo GATE = 1 en el registro TMOD.
C / T (RELOJ / TEMPORIZADOR)
Este bit en el registro TMOD se utiliza para decidir si un temporizador se utiliza como delay generator o un event manager. Si C / T = 0, se utiliza como temporizador para la generación del retardo del temporizador. La fuente de reloj para crear el retardo de tiempo es la frecuencia del cristal del 8051. Si C / T = 0, la frecuencia del cristal adjunta al 8051 también decide la velocidad a la que el temporizador del 8051 hace tictac a intervalos regulares.
La frecuencia del temporizador es siempre 1/12 de la frecuencia del cristal conectado al 8051. Aunque varios sistemas basados en el 8051 tienen una frecuencia XTAL de 10 MHz a 40 MHz, normalmente trabajamos con la frecuencia XTAL de 11,0592 MHz. Esto se debe a que la velocidad en baudios para la comunicación en serie del 8051.XTAL = 11.0592 permite que el sistema 8051 se comunique con la PC sin errores.
M1 / M2
M1 | M2 | Modo |
---|---|---|
0 | 0 | Modo temporizador de 13 bits. |
0 | 1 | Modo de temporizador de 16 bits. |
1 | 0 | Modo de recarga automática de 8 bits. |
1 | 1 | Modo derramado. |
Diferentes modos de temporizadores
Modo 0 (modo de temporizador de 13 bits)
Tanto el temporizador 1 como el temporizador 0 en el modo 0 funcionan como contadores de 8 bits (con un preescalador de división por 32). El registro de temporizador se configura como un registro de 13 bits que consta de los 8 bits de TH1 y los 5 bits inferiores de TL1. Los 3 bits superiores de TL1 son indeterminados y deben ignorarse. Establecer la bandera de ejecución (TR1) no borra el registro. El indicador de interrupción del temporizador TF1 se establece cuando el recuento pasa de 1 a 0. El funcionamiento del modo 0 es el mismo para el temporizador 0 que para el temporizador 1.
Modo 1 (modo de temporizador de 16 bits)
El modo de temporizador "1" es un temporizador de 16 bits y es un modo de uso común. Funciona de la misma manera que el modo de 13 bits, excepto que se utilizan los 16 bits. TLx se incrementa comenzando desde 0 hasta un máximo de 255. Una vez que se alcanza el valor 255, TLx se restablece a 0 y luego THx se incrementa en 1. Como es un temporizador completo de 16 bits, el temporizador puede contener hasta 65536 valores distintos y rebosará de nuevo a 0 después de 65,536 ciclos de máquina.
Modo 2 (recarga automática de 8 bits)
Ambos registros temporizadores están configurados como contadores de 8 bits (TL1 y TL0) con recarga automática. El desbordamiento de TL1 (TL0) establece TF1 (TF0) y también recarga TL1 (TL0) con el contenido de Th1 (TH0), que está preestablecido por software. La recarga deja TH1 (TH0) sin cambios.
El beneficio del modo de recarga automática es que puede hacer que el temporizador contenga siempre un valor de 200 a 255. Si usa el modo 0 o 1, tendría que verificar el código para ver el desbordamiento y, en ese caso, restablezca el temporizador a 200. En este caso, las instrucciones preciosas verifican el valor y / o se recargan. En el modo 2, el microcontrolador se encarga de esto. Una vez que haya configurado un temporizador en el modo 2, no tiene que preocuparse por verificar si el temporizador se ha desbordado, ni tiene que preocuparse por restablecer el valor porque el hardware del microcontrolador lo hará todo por usted. El modo de recarga automática se utiliza para establecer una tasa de baudios común.
Modo 3 (modo de temporizador dividido)
El modo de temporizador "3" se conoce como split-timer mode. Cuando el temporizador 0 se coloca en el modo 3, se convierte en dos temporizadores independientes de 8 bits. El temporizador 0 es TL0 y el temporizador 1 es TH0. Ambos temporizadores cuentan de 0 a 255 y, en caso de desbordamiento, se restablecen a 0. Todos los bits del temporizador 1 ahora estarán vinculados a TH0.
Cuando el temporizador 0 está en modo dividido, el temporizador 1 real (es decir, TH1 y TL1) se puede configurar en los modos 0, 1 o 2, pero no se puede iniciar / detener ya que los bits que lo hacen ahora están vinculados a TH0. El temporizador real 1 se incrementará con cada ciclo de la máquina.
Inicializar un temporizador
Decide el modo de temporizador. Considere un temporizador de 16 bits que se ejecuta continuamente y es independiente de los pines externos.
Inicialice TMOD SFR. Use los 4 bits más bajos de TMOD y considere el temporizador 0. Mantenga los dos bits, GATE 0 y C / T 0, como 0, ya que queremos que el temporizador sea independiente de los pines externos. Como el modo de 16 bits es el modo de temporizador 1, borre T0M1 y configure T0M0. Efectivamente, el único bit para activar es el bit 0 de TMOD. Ahora ejecute la siguiente instrucción:
MOV TMOD,#01h
Ahora, el temporizador 0 está en modo de temporizador de 16 bits, pero el temporizador no está funcionando. Para iniciar el temporizador en modo de ejecución, configure el bit TR0 ejecutando la siguiente instrucción:
SETB TR0
Ahora, el temporizador 0 comenzará a contar inmediatamente, incrementándose una vez en cada ciclo de la máquina.
Leer un temporizador
Un temporizador de 16 bits se puede leer de dos formas. Lea el valor real del temporizador como un número de 16 bits o detecte cuándo se ha desbordado el temporizador.
Detección de desbordamiento del temporizador
Cuando un temporizador se desborda de su valor más alto a 0, el microcontrolador establece automáticamente el bit TFx en el registro TCON. Entonces, en lugar de verificar el valor exacto del temporizador, se puede verificar el bit TFx. Si TF0 está configurado, el temporizador 0 se ha desbordado; si TF1 está configurado, el temporizador 1 se ha desbordado.