Apresentacao TIMER0 PIC16F877A
Apresentacao TIMER0 PIC16F877A
Apresentacao TIMER0 PIC16F877A
1
Contador/Temporizador Timer 0
CARACTERÍSTICAS
Contador binário de 8 bits (0x00 – 0xFF)
Prescaler programável (divisor de frequência)
Seleção de clock interno ou externo
Interrupção de overflow de 0xFF para 0x00
Seleção de borda para clock externo (subida ou descida)
Registro de contagem TMR0 (endereço 0x01 – banco 0)
FUNÇÕES BÁSICAS
Contagem de eventos externos (clock de entrada no pino RA4/T0CKI)
Temporização (contagem de tempo) para clock interno (fclk / 4)
2
Diagrama em bloco do TIMER 0
T0SE T0CS
PSA
PS2:PS0
PSA
PSA
3
Registrador de configuração do TIMER 0 – OPTION_REG
4
Interrupção
Pode ser causada por evento interno ou externo:
Mudança de estado no pino
Overflow do timer
Conversão do A/D
Endereço de retorno salvo na pilha
Vetor de interrupção no endereço 0x04
Retorno da interrupção com a instrução RETFIE
Salvamento de contexto
W
STATUS
PCLATCH
Limpar o bit de sinalização da interrupção, por exemplo
BCF INTCON, TMR0IF
5
Registro de Interrupção - INTCON
Bit 7 – GIE: Bit Global Interrupt Enable – Habilitação global das interrupções
0 – Desabilita todas as interrupções
1 – Habilita todas as interrupções desmascaradas
Bit 5 – TMR0IE: Bit de habilitação da interrupção de overflow do TIMER0
0 – Desabilita a interrupção do TMR0
1 – Habilita a interrupção do TMR0
Bit 2 – TMR0IF: Bit de sinalização da interrupção de overflow do TIMER0
0 – TIMER0 sem overflow
1 – TIMER0 com overflow
6
Interrupção do Timer 0
DESCRIÇÃO
A interrupção do TIMER 0 é gerada quando o registro TMR0 transborda (overflow)
de 0xFF para 0x00
O overflow seta o bit TMR0IF (timer 0 interrupt flag) do registro INTCON
A interrupção pode ser mascarada resetando o bit TMR0IF do registro INTCON
O bit TMR0IF deve ser resetado por software para habilitar nova interrupção
7
Contador/Temporizador Timer 0
RESUMO DOS REGISTRADORES DO TIMER 0
8
Exemplo de cálculo para o TIMER 0
Utilizando o TIMER 0, escrever um programa para incrementar o PORTD a cada
2ms (clock de 8MHz):
PRESCALER TEMPO
1:2 256μs
FCLK = 8MHz
TTMR = 4 / 8M = 0,5μs 1:4 512μs
TESTOURO = 256 * 0,5μs = 128μs 1:8 1,024ms
1:16 2,048ms
1:32 4,096ms
1:64 8,192ms
1:128 16,384ms
1:256 32,768ms
9
Programa principal:
INICIO BANK1
MOVLW 0X00
Configura o MOVWF TRISD ; CONFIGURA PORTD COMO SAÍDA
PIC16F877A MOVLW B'00000011' ; TIMER 0 -> PRESCALER DE 1:16
MOVWF OPTION_REG
BANK0
CLRF PORTD
10
Habilitação da interrupção do TIMER0:
MOVLW B‘10100000' ; TIMER 0 -> PRESCALER DE 1:16
; ||| ---------> HABILITA A INTERRUPÇÃO DO TIMER0
; | ---------> HABILITA A INTERRUPÇÃO GLOBAL
MOVWF INTCON
11