Você está na página 1de 13

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN DEPARTAMENTO ACADMICO DE ELETROTCNICA CURSO DE ENGENHARIA INDUSTRIAL ELTRICA

Disciplina de Sistemas Microcontrolados


Contador/Temporizador Contador/ Temporizador TIMER 0 - PIC16F877A Prof. Amauri Assef amauriassef@utfpr.edu.br
UTFPR Campus Curitiba Prof. Amauri Assef 1

Contador/Temporizador Timer 0 Contador/Temporizador Contador/ Temporizador Timer 0


CARACTERSTICAS Contador binrio de 8 bits (0x00 0xFF) Prescaler programvel (divisor de frequncia) Seleo de clock interno ou externo Interrupo de overflow de 0xFF para 0x00 Seleo de borda para clock externo (subida ou descida) Registro de contagem TMR0 (endereo 0x01 banco 0) FUNES BSICAS Contagem de eventos externos (clock de entrada no pino RA4/T0CKI) Temporizao (contagem de tempo) para clock interno (fclk / 4)
UTFPR Campus Curitiba Prof. Amauri Assef

Contador/Temporizador Timer 0 Diagrama em bloco do TIMER 0

T0SE

T0CS

PSA

PS2:PS0 PSA PSA

UTFPR Campus Curitiba Prof. Amauri Assef

Contador/Temporizador Timer 0 Registrador de configurao do TIMER 0 OPTION_REG

Bit 7 - /RBPU Bit 6 INTEDG Bit 5 T0CS: Bit de seleo da fonte de clock do TIMER 0 0 Interno 1 Transio do pino T0CKI Bit 4 T0SE: Bit de seleo da borda do TMR0 0 Incrementa na transio 1 para 0 do pino T0CKI 1 Incrementa na transio 0 para 1 do pino T0CKI Bit 3 PSA: Bit de atribuio do prescaler 0 Prescaler para o TIMER 0 1 Prescaler para p WDT

Bit 2-0 PS2:PS0: Bits de seleo da taxa do prescaler

O registro OPTION_REG fica no BANCO 1, endereo 0x81


UTFPR Campus Curitiba Prof. Amauri Assef 4

Contador/Temporizador Timer 0 Interrupo


Pode ser causada por evento interno ou externo: Mudana de estado no pino Overflow do timer Converso do A/D Endereo de retorno salvo na pilha Vetor de interrupo no endereo 0x04 Retorno da interrupo com a instruo RETFIE Salvamento de contexto W STATUS PCLATH Limpar o bit de sinalizao da interrupo, por exemplo BCF INTCON, TMR0IF
UTFPR Campus Curitiba Prof. Amauri Assef 5

Contador/Temporizador Timer 0 Registro de Interrupo - INTCON

Bit 7 GIE: Bit Global Interrupt Enable Habilitao global das interrupes 0 Desabilita todas as interrupes 1 Habilita todas as interrupes desmascaradas Bit 5 TMR0IE: Bit de habilitao da interrupo de overflow do TIMER0 0 Desabilita a interrupo do TMR0 1 Habilita a interrupo do TMR0 Bit 2 TMR0IF: Bit de sinalizao da interrupo de overflow do TIMER0 0 TIMER0 sem overflow 1 TIMER0 com overflow

UTFPR Campus Curitiba Prof. Amauri Assef

Contador/Temporizador Timer 0 Interrupo do Timer 0

DESCRIO A interrupo 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 interrupo pode ser mascarada resetando o bit TMR0IE do registro INTCON O bit TMR0IF deve ser resetado por software para habilitar nova interrupo

UTFPR Campus Curitiba Prof. Amauri Assef

Contador/Temporizador Timer 0 Contador/Temporizador Contador/ Temporizador Timer 0


RESUMO DOS REGISTRADORES DO TIMER 0

UTFPR Campus Curitiba Prof. Amauri Assef

Contador/Temporizador Timer 0 Exemplo de clculo para o TIMER 0


Utilizando o TIMER 0, escrever um programa para inverter o contedo do PORTD a cada 2ms (clock de 8MHz):
PRESCALER 1:2 1:4 1:8 1:16 1:32 1:64 1:128 1:256 OPTION_REG <= B0000 0011
UTFPR Campus Curitiba Prof. Amauri Assef 9

TEMPO 256s 512s

FCLK = 8MHz TTMR = 4 / 8M = 0,5s TESTOURO = 256 * 0,5s = 128s (ver prescale)

1,024ms 2,048ms 4,096ms 8,192ms 16,384ms 32,768ms

Contador/Temporizador Timer 0 Programa principal (Assembly (Assembly): ):


INICIO
Configura o PIC16F877A

BANK1 MOVLW MOVWF MOVLW MOVWF BANK0 CLRF

0X00 TRISD B'00000011 OPTION_REG

; CONFIGURA PORTD COMO SADA ; TIMER 0 -> PRESCALER DE 1:16

PORTD INTCON,TMR0IF TESTE INTCON,TMR0IF PORTD,F TESTE ; VERIFICA SE OCORREU OVERFLOW DO T0 ; LIMPA BIT DE OVERFLOW ; INVERTE O PORTD A CADA OVERFLOW DO T0

TESTE

BTFSS GOTO BCF COMF GOTO

UTFPR Campus Curitiba Prof. Amauri Assef

10

Contador/Temporizador Timer 0 Programa principal (C):


void main() { OPTION_REG = 0B000000011; // ATRIBUIO DO PRESCALER PARA TIMER0 TRISD = 0x00; // PORTB COMO SADA PORTD = 0x00; // VALOR INICIAL = 00 TMR0 = 0X00; // LIMPA TMR0 while(1) { if (INTCON.F2) // TESTA O BIT DE OVERFLOW { INTCON.F2 = 0; // LIMPA O BIT DE OVERFLOW PORTD = ~PORTD; } } }
UTFPR Campus Curitiba Prof. Amauri Assef 11

Contador/Temporizador Timer 0 Habilitao da interrupo do TIMER0:


a) Assembly
; ; MOVLW B10100000' ||| ---------> | ---------> MOVWF INTCON ; TIMER 0 -> PRESCALER DE 1:16 HABILITA A INTERRUPO DO TIMER0 HABILITA A INTERRUPO GLOBAL

b) C
INTCON = 0xB10100000;

UTFPR Campus Curitiba Prof. Amauri Assef

12

Contador/Temporizador Timer 0 Habilitao da interrupo do TIMER0:


void interrupt () { INTCON.F2 = 0; PORTD = ~PORTD; } void main() { OPTION_REG = 0B000000011; TRISD = 0x00; PORTD = 0x00; TMR0 = 0X00; INTCON = 0B10100000; while(1) { } }
UTFPR Campus Curitiba Prof. Amauri Assef 13

// LIMPA O BIT DE OVERFLOW

// ATRIBUIO DO PRESCALER PARA TIMER0 // PORTB COMO SADA // VALOR INICIAL = 00 // LIMPA TMR0 // INT DO TIMER0 HABILITADA