8254 - Temporizador/Contador programável de intervalos

Como bem sabemos, absolutamente tudo o que é relacionado aos microprocessadores e suas operações, envolve períodos de tempo (intervalos ou ciclos). As coisas não funcionam de modo contínuo ou aleatoriamente.

O microprocessador Intel 8086, e seus sucessores como 8088, não poderiam ser diferentes.
Se utilizam de clocks para realizar suas rápidas operações, e uma maneira de controlar essas funções, é através do 8254, objeto de estudo desse artigo de nosso curso de microprocessadores.


Temporização e pinagem do 8086/8088

0 8254 é um dispositivo programável, constituído de três contadores de 16 bits, que podem ser programados para criar intervalos de temporização, seja contagem binária ou BCD (binary-coded decimal), contadores estes capazes de trabalhar com até 10 mega hertz (uma verdadeira potência e velocidade para a época, que é uma versão melhorada e mais rápida do 8253).

Como podem ver no datasheet do 8254, ele possui 3 pinos de clock (CLK 0, CLK 1 e CLK 2), um para cada contador.

Obviamente, o 8254 funciona usando um contador de cada vez, e a seleção de qual contador vai ser utilizado é feita através das entradas:
$$A_0 , A_1$$

Ou seja, para:
$$A_0=0 , A_1=0 -> contador 0$$
$$A_0=1 , A_1=0 -> contador 1$$
$$A_0=0 , A_1=1 -> contador 2$$
$$A_0=1 , A_1=1 -> palavra de controle$$

O pino G é a porta (gate), que vai controlar o modo de operação de cada contador.
E o sinal gerado por cada contador sai pelo pino OUT.

O 8254 também possui os pinos de leitura (RD) e escrita (RW), que são conectados ao IORC e ao IOWC, respectivamente, além dos pinos GND (ground ou terra), o Vcc (de 5 volts) e o CS (chip select, que vai habilitar o 8254 quando ele for usado), como de praxe.

Como programar o 8254 - Pinagem

A grande vantagem do temporizador 8254, é o fato de ser possível programá-lo ao modo que quisermos, fazendo dele um contador extremamente poderoso, versátil e flexível.

Sempre que formos usar o 8254, temos que definir se vamos usá-lo para operação de leitura (RD) ou escrita (WR), seu modo de operação e qual contador vamos usar. Isso é feito através das palavras de controle (control word).
Existem 8 palavras de controle, que vamos estudar agora.

BCD
Se BCD=0, a contagem é feita de forma binária. Caso BCD=1, a contagem é do tipo BCD.
Cada contador pode contar de 1 até FFFFH, onde o 0 é FFFFH + 1, que equivale a 10000 em BCD.

Existem 6 modos de operação dos temporizadores do 8254 (modo 0, modo 1, modo 2, modo 3, modo 4 e modo 5).
Portanto, para selecionar cada um deles é necessário ter no mínimo 3 bits, daí a existência do M0, M1 e M2.
No próximo tópico desse artigo, entraremos em detalhes sobres os modos de operação do 8254.

Há dois bits que vão determinar se vamos ler ou escrever, do contador ou para o contador, que são o RW0 e o RW1, além dos dois bits que vão selecionar o contador, que já havíamos discutido, que são os SC0 e SC1.

No controle de leitura e escrita (RD/WR), se tivermos:
00 -> comando para o contador de latch
01 -> leitura/escrita somente do byte menos significativo
10 -> leitura/escrita somente do byte mais significativo
11 -> leitura/escrita do byte menos significativo primeiro, depois o byte mais significativo

Modos de operação do 8254

Vamos agora descrever os mais variados tipos de operação que podemos fazer com cada um dos 3 contadores do 8254, através dos pinos M0, M1 e M2.

Modo 0

Neste modo, o 8254 é um contador de eventos, em que a saída terá valor lógico 0 quando a palavra de controle for escrita, e assim permanece até que uma sequência de X valores ocorra, onde nós escolhemos esse X.
Esse contagem só ocorre enquanto G=1.

Modo 1 

Nesse modo, o 8254 é um monoestável retrigável multivibrador (one-shot).
Através da entrada G, o contador é trigado e pulsa na saída, que se terá valor lógico 0 até o fim da contagem.
Ou seja, podemos fazer com que a saída permaneça em estado baixo durante X valores de clock quando houver um trigger na entrada.

Modo 2 

O contador criar uma série de pulsos de duração de um clock, e o tempo entre os pulsos de clock é escolhida pelo contador.
Por exemplo, se o contador for 5, durante 4 clocks o pulso será alto (valor lógico 1) e será baixo durante 1 período de clock.
Se G=1, a série de pulsos continua indefinidamente.

Modo 3 

É modo gerador de ondas quadradas no pino de saída (OUT), sempre que G=1.
Se o contador tiver um valor par, metade da contagem será com valor alto e metade com valor baixo.
Se o contador armazenar um valor ímpar, saíra um valor alto durante um clock à mais que o número de clocks que estará no valor baixo.
Por exemplo, se o contagem for de 7, a saída será alta durante 4 clocks e baixa durante 3.

Modo 4

Nesse modo, o 8254 produz um pulso único na saída OUT.
Se escolhermos um valor de contagem X, durante X clocks o pulso será alto e depois será baixo por 1 clock (pulso único).
Ou seja, é um one-shot trigger totalmente flexível e manipulável ao bel prazer do programador Assembly.

Modo 5

Exatamente como o modo 4, mas o pulso é gerado através do pino G e não através de programação.

Blog Widget by LinkWithin