9
Timers/Counters
Um Timer é um periférico acionado indiretamente pelo cristal ligado ao microcontrolador, só que esse clock é dividido por 12 antes de entrar nos Timers (entenda esta divisão no capítulo 2.6). Se, por exemplo, o clock do microcontrolador é de 12MHz, dividindo por 12, teremos o clock do Timer de 1MHz, ou seja, um temporizador que conta o tempo a cada 1 microssegundo.
Para a família 8051 temos dois Timers/Counters. Entretanto, o modelo AT89S52 dispõe de 3 destes periféricos completamente independentes.
Para programá-los temos dois registradores de funções especiais chamados TMOD e TCON.
Os Timers (timer0, timer1 e timer2) podem ser programados em quatro modos de trabalho:
MODO 0: Contador com capacidade máxima de 13 bits (é uma herança da antiga família MCS-48).
MODO 1: Contador com capacidade máxima de 16 bits (mais utilizado).
MODO 2: Contador com capacidade máxima de 8 bits e auto-reload (mais utilizado na comunicação serial).
MODO 3: Contador misto, para aplicações especiais (pouco utilizado).
Devido a extensão deste assunto, o livro abordará apenas o Timer0 e Timer1 no MODO 1, tendo em vista a semelhança para utilização dos demais Timers.
Nota
Os Timers 0, 1 e 2 possuem dois registradores de funções especiais associados a eles, conforme definido no arquivo AT89x52.H:
/* BYTE addressable registers */ registradores com BYTES
endereçáveis
sfr at 0x88 TCON ;
sfr at 0x89 TMOD ;
sfr at 0x8A TL0 ;
sfr at 0x8C TH0 ;
sfr at 0x8B TL1 ;
sfr at 0x8D TH1 ;
sfr at 0xCC TL2 ;
sfr at 0xCD TH2 ;
Para cada timer temos dois registradores especiais. Isto ocorre por que para alcançar contagens de 16 bits num microcontrolador de 8 bits, são necessários dois registradores de 8 bits ligados em cascata.
Estrutura do Timer0
Este pode atuar como temporizador, com base de tempo no cristal oscilador, ou como contador por meio do pino P3.4 com capacidade máxima de 16 bits (65.536 contagens) através do bit intitulado C/T (Counter/Timer) no registrador especial TMOD. Os registradores TL0 e TH0 formam um único registrador de 16 bits e armazenam a contagem dos Timers. Quando a contagem do Timer exceder o valor máximo suportado (65.536+1), ocorrerá o “estouro”, mais conhecido como overflow, que será sinalizado pelo flag (bandeira) TF0 (Timer Flow) do Timer. A figura 9.1 ilustra a estrutura do Timer 0:
Figura 9.1 – Estrutura do Timer 0 no modo 1 (16 bits).
Compartilhe com seus amigos: |