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.