Escolar Documentos
Profissional Documentos
Cultura Documentos
Introdução
Os “timers”, também referidos como temporizadores ou cronômetros, são na verdade
contadores digitais assíncronos. Para funcionar, eles precisam ser alimentados com pulsos de
clock. Cada pulso de clock faz o timer incrementar o seu valor de contagem. A figura 1 mostra
um contador composto de 4 flip-flops JK sensíveis à borda de descida do clock CK. A figura 2
mostra as formas de onda da entrada E e das saídas S0, S1, S2 e S3.
Os contadores além de realizarem uma contagem também tem um outro papel importante:
eles podem funcionar como divisores de frequência. Basta observar as saídas S0, S1, S2 e S3
para observar que elas correspondem a divisões por 2, por 4, por 8 e por 16 da frequência da
forma de onda de entrada E.
Os PIC possuem duas fontes primárias de clock: (1) o clock interno (fosc/4) e (2) clock
externo (sinal T0CKI, pino 6, para o timer 0 ou T1CKI, pino 15, para o timer 1). No caso de
um PIC com cristal de 8 MHz, temos um clock interno de 2 MHz que alimenta o sistema do
timer.
Os PIC possuem 3 timers chamados Timer 0, Timer 1 e Timer 2. A tabela a seguir mostra as
suas características.
T0CKI
(pino 6)
(externo) WATCHDOG
(T0SE)
TMR0IF
PRESCALER TIMER 0
fOSC/4
(T0CS) (PSA)
(interno)
(PS2...0)
Figura 3: Diagrama esquemático do Timer 0 do PIC16F877A.
Fonte: Autoria própria.
O prescaler é o divisor programável cujo fator de divisão é selecionado a partir dos bits de
configuração PS2, PS1 e PS0. Finalmente, a saída do prescaler pode ser usada para alimentar
ou o Timer 0 ou o Watchdog. Todos os bits descritos aqui fazem parte do registrador
OPTION_REG.
O bit T0CS (Timer 0 Clock Source) seleciona se o clock é interno (=0) ou externo (=1).
O bit T0SE (Timer 0 Source Edge) seleciona a borda do sinal externo. Se =0 seleciona borda
de subida, se =1 seleciona a borda de descida.
O bit PSA (Prescaler Assignment) seleciona se o prescaler será usado pelo Timer 0 (=0) ou se
será usado pelo watchdog (=1).
f CLK =8 MHz
O período do clock que vai na entrada do prescaler equivale a
4
T TMR = =0,5 s
8 MHz
Ao passar pelo prescaler, ocorre uma divisão da frequência de TTMR. Isto equivale a uma
multiplicação do período
T PRE=T TMR×DIV
DIV respresenta o fator de divisão do prescaler.
Para gerar cada estouro são necessárias 256 contagens. O período de cada estouro é
1
N EST =
T EST
Como N EST somente pode ser inteiro, existe um erro de aproximação. A tabela a seguir
demostra todos estes cálculos em função do divisor DIV escolhido.
Considerando que
INICIO BANK1
MOVLW B'00000000'
MOVWF TRISD
MOVLW B'00000110'
MOVWF OPTION_REG
BANK0
CBLOCK 0x20
CEST ; CONTADOR DE ESTOUROS
SEGUNDO_U ; UNIDADE DE SEGUNDO
SEDUNDO_D ; DEZENA DE SEGUNDO
MINUTO_U ; UNIDADE DE MINUTO
MINUTO_D ; DEZENA DE MINUTO
ENDC
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* VETOR DE RESET
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
ORG 0x00
GOTO INICIO
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* INTERRUPÇÕES
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* SALVAMENTO DO CONTEXTO
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ROTINA DE INTERRUPÇÃO
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* TIMER 0
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
#DEFINE FIM_MINUT .60
#DEFINE FIM_HORAS .24
#DEFINE FIM_DIAS .31
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* RESTAURAÇÃO DO CONTEXTO
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
FIMINT
SWAPF PCLATH_TEMP,W ; TROCA NIBBLES DE PCLATH_TEMP -> W
MOVWF PCLATH ; W -> PCLATH
SWAPF STATUS_TEMP,W ; TROCA NIBBLES DE STATUS_TEMP -> W
MOVWF STATUS ; W -> STATUS
SWAPF W_TEMP,F ; TROCA NIBBLES DE W_TEMP -> W_TEMP
SWAPF W_TEMP,W ; TROCA NIBBLES DE W_TEMP -> W
RETFIE ; FINALIZA A INTERRUPÇÃO
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* PROGRAMA PRINCIPAL
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
INICIO
BANK1
MOVLW B'00000110' ; PROGRAMA O TIMER 0 (DIVISOR 1:128)
MOVWF OPTION_REG
MOVLW B'10100000' ; HABILITA INTERRUPÇÃO DO TIMER 0
MOVWF INTCON
BANK0