Sistemas Embarcados - Temporizador / Contador
UMA timeré um tipo especializado de relógio usado para medir intervalos de tempo. Um cronômetro que conta de zero para cima para medir o tempo decorrido é freqüentemente chamado destopwatch. É um dispositivo que faz a contagem regressiva a partir de um intervalo de tempo especificado e usado para gerar um atraso de tempo, por exemplo, uma ampulheta é um cronômetro.
UMA counteré um dispositivo que armazena (e às vezes exibe) o número de vezes que um determinado evento ou processo ocorreu, em relação a um sinal de clock. É usado para contar os eventos que acontecem fora do microcontrolador. Em eletrônica, os contadores podem ser implementados facilmente usando circuitos do tipo registrador, como um flip-flop.
Diferença entre um cronômetro e um contador
Os pontos que diferenciam um cronômetro de um contador são os seguintes -
Cronômetro | Contador |
---|---|
O registro é incrementado a cada ciclo da máquina. | O registro é incrementado considerando a transição de 1 para 0 em seu correspondente a um pino de entrada externa (T0, T1). |
A taxa de contagem máxima é 1/12 da frequência do oscilador. | A taxa máxima de contagem é 1/24 da frequência do oscilador. |
Um cronômetro usa a frequência do relógio interno e gera atraso. | Um contador usa um sinal externo para contar os pulsos. |
Timers de 8051 e seus registros associados
O 8051 tem dois temporizadores, Timer 0 e Timer 1. Eles podem ser usados como temporizadores ou como contadores de eventos. Tanto o Timer 0 quanto o Timer 1 têm largura de 16 bits. Como o 8051 segue uma arquitetura de 8 bits, cada 16 bits é acessado como dois registradores separados de byte baixo e byte alto.
Registro do cronômetro 0
O registro de 16 bits do Timer 0 é acessado como byte alto e baixo. O registro de byte baixo é chamado TL0 (byte baixo do temporizador 0) e o registro de byte alto é chamado de TH0 (byte alto do temporizador 0). Esses registros podem ser acessados como qualquer outro registro. Por exemplo, a instruçãoMOV TL0, #4H move o valor para o byte inferior do Timer # 0.
Registro do cronômetro 1
O registro de 16 bits do Timer 1 é acessado como byte alto e baixo. O registro de byte baixo é chamado TL1 (byte baixo do temporizador 1) e o registro de byte alto é chamado TH1 (byte alto do temporizador 1). Esses registros podem ser acessados como qualquer outro registro. Por exemplo, a instruçãoMOV TL1, #4H move o valor para o byte inferior do temporizador 1.
Registro TMOD (modo temporizador)
Tanto o Timer 0 quanto o Timer 1 usam o mesmo registro para definir os vários modos de operação do timer. É um registro de 8 bits em que os 4 bits inferiores são reservados para o Timer 0 e os quatro bits superiores para os Timers. Em cada caso, os 2 bits inferiores são usados para definir o modo do temporizador antecipadamente e os 2 bits superiores são usados para especificar a localização.
Gate - Quando definido, o cronômetro só funciona enquanto INT (0,1) está alto.
C/T - Bit de seleção do contador / temporizador.
M1 - Bit de modo 1.
M0 - Bit de modo 0.
PORTÃO
Cada cronômetro tem um meio de iniciar e parar. Alguns temporizadores fazem isso por software, alguns por hardware e alguns têm controles de software e hardware. Os temporizadores 8051 têm controles de software e hardware. O início e a parada de um cronômetro são controlados por software usando a instruçãoSETB TR1 e CLR TR1 para o temporizador 1, e SETB TR0 e CLR TR0 para o temporizador 0.
A instrução SETB é usada para iniciá-lo e é interrompida pela instrução CLR. Estas instruções iniciam e param os temporizadores enquanto GATE = 0 no registro TMOD. Os temporizadores podem ser iniciados e interrompidos por uma fonte externa fazendo GATE = 1 no registro TMOD.
C / T (RELÓGIO / TEMPORIZADOR)
Este bit no registro TMOD é usado para decidir se um temporizador é usado como um delay generator ou um event manager. Se C / T = 0, é usado como um temporizador para geração de atraso do temporizador. A fonte do relógio para criar o retardo de tempo é a frequência do cristal do 8051. Se C / T = 0, a frequência do cristal conectada ao 8051 também decide a velocidade na qual o temporizador do 8051 tique em um intervalo regular.
A frequência do temporizador é sempre 1/12 da frequência do cristal conectado ao 8051. Embora vários sistemas baseados no 8051 tenham uma frequência XTAL de 10 MHz a 40 MHz, normalmente trabalhamos com a frequência XTAL de 11,0592 MHz. É porque a taxa de transmissão para comunicação serial do 8051.XTAL = 11,0592 permite que o sistema 8051 se comunique com o PC sem erros.
M1 / M2
M1 | M2 | Modo |
---|---|---|
0 | 0 | Modo de cronômetro de 13 bits. |
0 | 1 | Modo 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 temporizador de 13 bits)
Tanto o Timer 1 quanto o Timer 0 no Modo 0 operam como contadores de 8 bits (com um prescaler dividido por 32). O registro do temporizador é configurado como um registro de 13 bits que consiste em todos os 8 bits de TH1 e os 5 bits inferiores de TL1. Os 3 bits superiores de TL1 são indeterminados e devem ser ignorados. Definir o sinalizador de execução (TR1) não limpa o registro. O sinalizador de interrupção do temporizador TF1 é definido quando a contagem passa de todos os 1s para todos os 0s. A operação do modo 0 é igual para o temporizador 0 e para o temporizador 1.
Modo 1 (modo temporizador de 16 bits)
O modo de temporizador "1" é um temporizador de 16 bits e é um modo comumente usado. Ele funciona da mesma maneira que o modo de 13 bits, exceto que todos os 16 bits são usados. TLx é incrementado começando de 0 a um máximo de 255. Uma vez que o valor 255 é atingido, TLx é redefinido para 0 e THx é incrementado em 1. Como sendo um temporizador de 16 bits completo, o temporizador pode conter até 65536 valores distintos e irá estourar de volta para 0 após 65.536 ciclos da máquina.
Modo 2 (recarga automática de 8 bits)
Ambos os registros do temporizador são configurados como contadores de 8 bits (TL1 e TL0) com recarga automática. Overflow de TL1 (TL0) define TF1 (TF0) e também recarrega TL1 (TL0) com o conteúdo de Th1 (TH0), que é predefinido pelo software. A recarga deixa TH1 (TH0) inalterado.
A vantagem do modo de recarregamento automático é que você pode fazer com que o cronômetro sempre contenha um valor de 200 a 255. Se você usar o modo 0 ou 1, terá que verificar o código para ver o estouro e, nesse caso, reajuste o cronômetro para 200. Nesse caso, instruções preciosas verificam o valor e / ou são recarregadas. No modo 2, o microcontrolador cuida disso. Depois de configurar um temporizador no modo 2, você não precisa se preocupar em verificar se o temporizador transbordou, nem se preocupar em redefinir o valor porque o hardware do microcontrolador fará tudo para você. O modo de recarga automática é usado para estabelecer uma taxa de transmissão comum.
Modo 3 (modo Split Timer)
O modo temporizador "3" é conhecido como split-timer mode. Quando o temporizador 0 é colocado no modo 3, ele se torna dois temporizadores de 8 bits separados. O temporizador 0 é TL0 e o temporizador 1 é TH0. Ambos os temporizadores contam de 0 a 255 e em caso de estouro, redefinir para 0. Todos os bits que são do temporizador 1 agora serão vinculados a TH0.
Quando o temporizador 0 está no modo dividido, o temporizador 1 real (ou seja, TH1 e TL1) pode ser definido nos modos 0, 1 ou 2, mas não pode ser iniciado / interrompido porque os bits que o fazem agora estão vinculados a TH0. O cronômetro real 1 será incrementado a cada ciclo da máquina.
Inicializando um cronômetro
Decida o modo do temporizador. Considere um temporizador de 16 bits que funciona continuamente e é independente de quaisquer pinos externos.
Inicialize o TMOD SFR. Use os 4 bits mais baixos do TMOD e considere o Timer 0. Mantenha os dois bits, GATE 0 e C / T 0, como 0, pois queremos que o timer seja independente dos pinos externos. Como o modo de 16 bits é o modo do temporizador 1, desmarque T0M1 e defina T0M0. Efetivamente, o único bit a ligar é o bit 0 do TMOD. Agora execute a seguinte instrução -
MOV TMOD,#01h
Agora, o Timer 0 está no modo de timer de 16 bits, mas não está funcionando. Para iniciar o temporizador no modo de execução, defina o bit TR0 executando a seguinte instrução -
SETB TR0
Agora, o Timer 0 começará a contar imediatamente, sendo incrementado uma vez a cada ciclo da máquina.
Lendo um cronômetro
Um cronômetro de 16 bits pode ser lido de duas maneiras. Leia o valor real do temporizador como um número de 16 bits ou detecta quando o temporizador transbordou.
Detectando Estouro do Timer
Quando um temporizador ultrapassa seu valor mais alto para 0, o microcontrolador define automaticamente o bit TFx no registro TCON. Portanto, em vez de verificar o valor exato do temporizador, o bit TFx pode ser verificado. Se TF0 estiver definido, o temporizador 0 estourou; se TF1 estiver definido, o temporizador 1 transbordou.