Você está na página 1de 14

O Microcontrolador 8051

NOTAS DE AULA 06 MICROCONTROLADOR 8051 VOL. 03


SUMRIO 8 TIMER/COUNTER

8 TIMER/COUNTER O 8051 possui 2 Timers/Counters. So usados como temporizadores para gerar um tempo de atraso ou como um contador para contar eventos.

8.1 Programando os timers do 8051 O 8051 possui 2 timers: timer 0 e o timer 1. Podem ser utilizados como timers ou como contadores de eventos. Ambos os timers so registros de 16 bits, sendo acessados por byte alto e byte baixo (separadamente).

7-D0) e TH0 (Timer 0 byte alto: D15-D8). Esses Timer 0: TL0 (Timer 0 byte baixo: D registros so acessados como quaisquer outro registro, tais como, A, B, R0, R1, etc. Por exemplo, a instruo MOV TL0, #4FH, move o valor 4FH para TL0 (byte baixo do timer 0). Tambm vlido instrues do tipo: MOV R5,TH0. Timer 1: TL1 (Timer 1 byte baixo: D7-D0) e TH1 (Timer 1 byte alto: D15-D8). Acessados da mesma maneira que o timer 0.
Notas de Aula do Prof. Alexandre Balbinot ABALBINOT@UOL.COM.BR 75

O Microcontrolador 8051

Parte dos Registros de Funes Especiais e seus endereos.


Smbolo Nome ... TMOD TCON* T2CON* T2MOD TH0 TL0 TH1 TL1 TH2 TL2 Controle do modo timer/counter Controle do timer/counter Controle 2 do timer/counter Controle do modo timer/counter Byte alto do timer/counter 0 Byte baixo timer/counter 0 Byte alto timer/counter 1 Byte baixo timer/counter 1 Byte alto timer/counter 2 Byte baixo timer/counter 2 ... 89H 88H 0C8H 0C9H 8CH 8AH 8DH 8BH 0CDH 0CCH Endereo

*BIT ENDEREVEL. Registro TMOD (Timer Mode): usado por ambos os timers. Este registro, como o prprio nome deixa claro usado para determinar os vrio s modos de operao dos timers. um registro de 8 bits, onde os 4 bits menos significativos esto relacionados ao timer 0 e os 4 bits mais significativos ao timer 1. Considerando cada nibble, os 2 bits menos significativos servem para determinar o modo do timer e o nibble mais significativo para determinar a operao. Da INTEL temos:

Notas de Aula do Prof. Alexandre Balbinot ABALBINOT@UOL.COM.BR

76

O Microcontrolador 8051

M1, M0: seleo do modo do timer. Como pode-se verificar, existem trs modos: 0, 1 e 2 (modo 0: um timer de 13 bits, o modo 1 um timer de 16 bits e o modo 2 um time r de 8 bits). C/T (Clock/Timer): usado para indicar quando o timer usado como um gerador de atraso ou um contador de evento. Se C/T = 0, usado como um gerador de atraso (a fonte de clock para o tempo de clock a freqncia do cristal, como j visto). Exemplo: indicar que modo e que timer esto selecionados para cada uma das seguintes instrues: (a) MOV TMOD, #01H (b) MOV TMOD, #20H (c) MOV TMOD, #12H Soluo: (a) TMOD = 0000 0001 modo 1 do timer 0 (b) TMOD = 0010 0000 modo 2 do timer 1 (c) TMOD = 0001 0010 modo 2 do timer 0 e modo 1 do timer 1.

Como anteriormente j visto, se C/T = 0, a freqncia do cristal conectado ao 8051 a fonte de clock para o timer. Relembrando, a freqncia para o timer sempre cristal (j visto): oscilador XTAL 12. Exemplo: para um cristal de 12MHz, temos: 1/12 x 12MHz = 1MHz e T = 1/f = 1/1 MHz = 1s. GATE: cada timer precisa iniciar e parar. Alguns timers fazem isto por software ou por hardware, mas o 8051 realiza estas operaes por software e por hardware. O start e o stop dos timers so controlados por software pelos bits TR (Timer Start) TR0 e TR1.Utilizando-se as instrues SETB TR0, CLR TR0 para o timer 0 e SETB TR1 e CLR TR1 para o timer 1.A instruo SETB inicia e parado pela instruo CLR. Essas instrues de iniciar e parar os timers quando GATE = 0 (nenhuma fonte externa necessria para iniciar ou parar os timers). O uso de hardware para parar ou iniciar os timers atravs de uma fonte externa ativado por
Notas de Aula do Prof. Alexandre Balbinot ABALBINOT@UOL.COM.BR 77

1 a freqncia do 12

O Microcontrolador 8051

GATE = 1. Utilizando-se software para iniciar e parar os timers necessrio usar as instrues SETB TRx e CLR TRx (o uso de GATE =1 discutido no tpico referente s interrupes).

Programando o modo 1 O modo 1 se caracteriza por: 1. timer de 16 bits (0000H a FFFFH podem ser carregados nos registros de timer TL e TH); 2. aps TL e TH serem carregados com o valor inicial de 16 bits, o timer precisa ser iniciado. Isto realizado pela instruo SETB TR0 para o timer 0 e por SETB TR1 para o timer 1; 3. aps o timer ter sido inicializado, iniciado a contagem at chegar a 0000H. Quando termina a contagem o flag TF (Timer Flag) vai para 1 (este flag pode ser monitorado para saber quando a contagem terminou): TF0 para o timer 0 e TF1 para o timer 1. Perceba que o timer pode ser finaliza do usando as instrues CLR TR0 ou CLR TR1. Da INTEL temos;

4. aps o timer chegar ao seu limite e se for desejo repetir o processo, os registros TH e TL precisam ser recarregados com o valor original e TF resetado.

Dicas para programar o timer no modo 1, para gerar um atraso: 1. carregar o TMOD indicando que timer (0 ou 1) ser usado e que modo (0 ou 1); 2. carregar os registros TL e TH com os valores iniciais do contador; 3. iniciar o timer; 4. ficar monitorando o TF (Timer Flag) com a instruo JNB TFx, rtulo; 5. parar o timer; 6. limpar o registro TF para a prxima contagem; 7. retornar ao passo 2 para carregar TL e TH novamente.
Notas de Aula do Prof. Alexandre Balbinot ABALBINOT@UOL.COM.BR 78

O Microcontrolador 8051

Exemplos:

(1) o cdigo abaixo cria uma onda quadrada no pino P1.5. O timer 0 usado para gerar o tempo de atraso. Analise este programa. ... MOV TMOD, #01 ; timer 0, modo 1 (16 bits) AQUI: MOV TL0, #0F2H ; TL0 = F2H byte baixo MOV TH0, #0FFH ; TH0 = FFH byte alto CPL P1.5 ACALL ATRASO SJMP AQUI ; atraso (delay) usando o timer 0 ATRASO: SETB TR0 ; inicia o timer 0 SALTO: JNB TF0, SALTO ; monitora o flag CLR TR0 ; para o timer 0 CLR TF0 ; limpa o flag RET A contagem de: FFFF2 FFF3 FFF4 ... FFFFH 0000H TF = 0 TF = 0 TF = 0 TF = 0 TF = 1

(2) no exemplo anterior calcule o tempo de atraso gerado pela sub-rotina (usar oscilador com freqncia de 11,0592MMHz). Soluo: 11,0592MHz / 12 = 921,6kHz T = 1/f = 1,085 s. Ou seja, o timer 0 em cada 1,085 s conta gerando um atraso de ATRASO = Nmero de contagem x 1,085s. No exemplo, FFFFH FFF2H = 0DH (13 decimal), porm adicione 1 ao clock extra necessrio quando ocorre a transio de FFFF a 0 para o flag TF. Logo, temos 14 x 1,085s = 15,19s para meio pulso. Para um perodo T = 2 x 15,19s = 30,38s o tempo de delay gerado pelo timer.

Notas de Aula do Prof. Alexandre Balbinot ABALBINOT@UOL.COM.BR

79

O Microcontrolador 8051

(3) calcule a freqncia da onda quadrada gerada no pino P1.5 CICLOS AQUI: MOV TL0, #0F2H 2 MOV TH0, #0FFH 2 CPL P1.5 1 ACALL ATRASO 2 SJMP AQUI 2 ; atraso (delay) usando o timer 0 ATRASO: SETB TR0 1 SALTO: JNB TF0, SALTO 14 CLR TR0 1 CLR TF0 1 RET 1 Somando, temos: 27 T = 2 x 27 x 1,085 s = 58,59s f = 1/T = 17067,75Hz. Dica usar a seguinte frmula para modo 1 e com cristal em XTAL = 11,0592MHz: (FFFF YYXX + 1) x 1,085 s, onde YYXX esto em TH e TL. (4) encontrar o atraso gerado pelo timer 0 no seguinte cdigo. CLR MOV MOV MOV SETB SETB JNB CLR CLR CLR P2.3 TMOD, #01 TL0, #3EH TH0, #0B8H P2.3 TR0 TF0, SALTO TR0 TF0 P2.3

AQUI:

SALTO:

Soluo: (FFFF B83E + 1) = 47C2H = 18370decimal 18370 x 1,085s = 19,93145ms.

Programando o modo 0 exatamente da mesma forma que no modo 1, exceto que o timer de 13bits: 0000 at 1FFFH em TH e TL.

Notas de Aula do Prof. Alexandre Balbinot ABALBINOT@UOL.COM.BR

80

O Microcontrolador 8051

Programando o modo 2 O modo 2 possui as seguintes caractersticas: 1. um timer de 8 bits, portanto, permite somente valores de 00H a FFH para serem carregados no registro timer TH; 2. aps TH ser carregado com o valor de 8 bits, o 8051 o copia para TL. Ento o timer precisa ser iniciado o que feito pela instruo SETB TR0 para o timer 0 e SETB TR1 para o timer 1; 3. aps o timer ser inicializado, iniciado a contagem pelo incremento do registro TL. Conta at o limite seu limite FFH. Quando passa de FFH para 00H, setado para alto o timer flag (TF): para o timer 0, TF0 vai para nvel alto; para o timer 1, TF1 vai para nvel alto;

Da Intel temos:

4. Quando o registro TL passa de FFH para 00H e TF setado (TF = 1), TL recarregado automaticamente com o valor original mantido pelo registro TH. Para repetir o processo, precisamos simplesmente limpar (cle ar) TF e no existe necessidade de qualquer programao para recarregar o valor original. Desta forma, o modo 2 auto-carregvel em contraste ao modo 1 em que o programador precisa recarregar TH e TL.

Notas de Aula do Prof. Alexandre Balbinot ABALBINOT@UOL.COM.BR

81

O Microcontrolador 8051

Passos para programar o modo 2: 1. carregar o registro TMOD indicando que timer ser usado (timer 0 ou timer 1) e o modo do timer (neste caso o modo 2 deve ser selecionado); 2. carregar os registros TH com o valor inicial da contagem; 3. iniciar o timer;

4. ficar monitorando o timer flag (TF) com a instruo JNB TFx, rtulo; 5. limpar o flag TF; 6. voltar para o passo 4, pois o modo 2 auto-carregvel.

Exemplo_1: Assumindo que XTAL = 11,0592MHz, encontrar (a) a freqncia da onda quadrada gerada no pino P1.0 no seguinte cdigo: MOV MOV SETB JNB CPL CLR SJMP TMOD, #20H TH1, #5 TR1 TF1, VOLTA P1.0 TF1 VOLTA ; modo 2 8 bits auto-carregvel ; TH1 = 5 ; incio do timer 1 ; monitora o flag timer ; complementa (C1) P1.0 ; limpa o TF1 ; modo 2 auto-carregvel

VOLTA:

; (FFH 05) (256 05 ) x 1,085s = 272,33 s a poro alta do pulso ; T = 2 x 272,33 s = 544,67s e a freqncia = 1,83597KHz

Exemplo_2: para diminuir a freqncia o que poderia ser feito em termos do timer?

Simplesmente aumentar o T (perodo) fazendo com que a contagem comece, por exemplo, em 00 (TH = 00). Neste caso, T = 2 x 256 x 1,085s = 555,52 s e a freqncia = 1,8KHz.

Notas de Aula do Prof. Alexandre Balbinot ABALBINOT@UOL.COM.BR

82

O Microcontrolador 8051

Exemplo_3: Encontrar a freqncia da onda quadrada gerada no pino P1.0, considerando o cdigo fornecido abaixo:

VOLTA:

ATRASO: RETORNO:

MOV TMOD, #2H MOV TH0, #0 MOV R5, #250 ACALL ATRASO CPL P1.0 SJMP VOLTA SETB TR0 JNB TF0, RETORNO CLR TR0 CLR TF0 DJNZ R5, ATRASO RET

; timer 0 modo 2 ; TH0 = 0 ; contador para o atraso

; iniciar o timer ; para o timer 0 ; limpa TF para o prximo round

Soluo: T = 2 (250 x 256 x 1,085 s) = 138,88ms e freqncia = 72Hz.

Notas de Aula do Prof. Alexandre Balbinot ABALBINOT@UOL.COM.BR

83

O Microcontrolador 8051

8.2 Programando os contadores do 8051

Na introduo do 8051, foi comentado que os timers/contadores podem ser usados para gerar atrasos (visto anteriormente) ou para contar eventos. As idias anteriores de programao dos timers tambm so utilizados nos contadores, com exceo da fonte de freqncia (no caso dos timers usado a freqncia do cristal como fonte de freqncia). Porm, quando utilizado como contador, um pulso externo ao 8051 que incrementa os registros TH e TL. Observe que no modo contador, os registros TMOD, TH e TL so os mesmos que os timers discutidos anteriormente.

Registro TMOD e se bit C/T: se C/T = 0 o timer usado como timer (pulsos em funo do cristal); se C/T = 1 o timer usado como contador (pulsos externos ao 8051 nos pinos 14 e 15 do 8051).

Pino 14 15

Porta P3.4 P3.5

Funo T0 T1

Descrio Timer/contador 0 entrada externa Timer/contador 1 entrada externa

Notas de Aula do Prof. Alexandre Balbinot ABALBINOT@UOL.COM.BR

84

O Microcontrolador 8051

Exemplo_1: assumir que um pulso de clock gerado no pino T1 (P3.5), escrever uma rotina para o contador 1 no modo 2 contar os pulsos e exibir o estado de TL1 em P2.

Soluo: MOV MOV SETB SETB MOV MOV JNB CLR CLR SJMP TMOD, #0110 0000B ; contador 1, modo 2, C/T = 1 TH1, #0 ; limpar TH1 P3.5 ; torna T1 entrada (setar para porta ser entrada) TR1 ; iniciar o contador A, TL1 ; copiar para TL1 P2, A ; exibir na porta 2 TF1, VOLTA_2 ; monitorao do TF TR1 ; parar o contador TF1 ; reset do TF = 0 VOLTA ; volta

VOLTA: VOLTA_2:

Relembrando o registro TMOD:

Observe que no exemplo acima o contador est sendo utilizado para contar pulso de uma entrada externa, mas poderia, por exemplo, ser utilizado para contar o nmero de pessoas passando por uma entrada ou qualquer aplicao que gere pulsos.
Notas de Aula do Prof. Alexandre Balbinot ABALBINOT@UOL.COM.BR 85

O Microcontrolador 8051

Exemplo_2: assumir um pulso de freqncia de 1Hz conectado a entrada P3.4. Escrever uma rotina para exibir o contador 0 em um LCD. Iniciar TH0 com 60.

ACALL LCD MOV TMOD, #000110B MOV TH0, #-60 SETB P3.4 VOLTA: SETB TR0 VOLTA_2: MOV A, TL0 ACALL CONVERTE ACALL EXIBE JNB TF0, VOLTA_2 CLR TR0 CLR TF0 SJMP VOLTA ; converso de 8 bits para ASCII CONVERTE: MOV B, #10 DIV AB MOV R2, B MOV B, #10 DIV AB ORL A, #30H MOV R4, A MOV A, B ORL A, #30H MOV R3, A MOV A, R2 ORL A, #30H MOV R2, A RET ; a sub-rotina para exibir o cdigo ASCII no display ser vista mais tarde, porm ; basta verificar no material de estudo do 80x86 e modificar aquela sub-rotina para o 8051 ; no RESET TL0 = 0 cuidado na rotina acima, no seria interessante carrega TL0 com ; -60 no incio deste programa?
Notas de Aula do Prof. Alexandre Balbinot ABALBINOT@UOL.COM.BR 86

O Microcontrolador 8051

Observao: 1. at o presente momento, usamos a instruo JNB TFx, rtulo para monitorar o flag timer (TF), porm no a nica maneira, pois pode-se usar interrupes para monitorar eventos assunto tratado mais tarde. Da Intel:

Entrada externa (modo 1) timer 0 e timer 1.

Entrada externa (modo 2) timer 0 e timer 1.

Registro TCON (Timer Control Register) Equivalncia de instrues para o TCON Timer 0 SETB TR0 CLR TR0 SETB TF0 CLR TF0 SETB TCON.4 CLR TCON.4 SETB TCON.5 CLR TCON.5 Timer 1 SETB TR1 CLR TR1 SETB TF1 CLR TF1 SETB TCON.6 CLR TCON.6 SETB TCON.7 CLR TCON.7

Nos exemplos anteriores (timers e contadores) usamos os registros TR0 e TR1 para iniciar ou finalizar os timers. Esses bits so parte do registro TCON (bit enderevel).
Notas de Aula do Prof. Alexandre Balbinot ABALBINOT@UOL.COM.BR 87

O Microcontrolador 8051

GATE = 1 no registro TMOD

Como visto anteriormente, quando o GATE = 0 , o timer iniciado com a instruo SETB TR0 e SETB TR1 para os timers 0 e 1, respectivamente. A questo o que ocorre com GATE = 1?

As figuras abaixo, mostram que quando GATE = 1, o incio e o fim do timer realizado externamente atravs dos pinos P3.2 e P3.3 para os timers 0 e 1, respectivamente (usado na comunicao serial ou outras aplicaes). Da Intel:

T/C 0.

T/C 1.

Notas de Aula do Prof. Alexandre Balbinot ABALBINOT@UOL.COM.BR

88

Você também pode gostar