Timer Pic16f877a

13
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ DEPARTAMENTO ACADÊMICO DE ELETROTÉCNICA DEPARTAMENTO ACADÊMICO DE ELETROTÉCNICA CURSO DE ENGENHARIA INDUSTRIAL ELÉTRICA CURSO DE ENGENHARIA INDUSTRIAL ELÉTRICA 1 UTFPR – Campus Curitiba Prof. Amauri Assef Disciplina de Sistemas Microcontrolados Disciplina de Sistemas Microcontrolados Contador/ Contador/Temporizador TemporizadorTIMER 0 TIMER 0 - PIC16F877A PIC16F877A Prof. Amauri Assef Prof. Amauri Assef [email protected] [email protected]

Transcript of Timer Pic16f877a

Page 1: Timer Pic16f877a

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁUNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

DEPARTAMENTO ACADÊMICO DE ELETROTÉCNICADEPARTAMENTO ACADÊMICO DE ELETROTÉCNICA

CURSO DE ENGENHARIA INDUSTRIAL ELÉTRICACURSO DE ENGENHARIA INDUSTRIAL ELÉTRICA

1UTFPR – Campus Curitiba

Prof. Amauri Assef

Disciplina de Sistemas MicrocontroladosDisciplina de Sistemas Microcontrolados

Contador/Contador/TemporizadorTemporizador TIMER 0 TIMER 0 -- PIC16F877APIC16F877A

Prof. Amauri AssefProf. Amauri Assef

[email protected]@utfpr.edu.br

Page 2: Timer Pic16f877a

Contador/Temporizador Timer 0Contador/Temporizador Timer 0

Contador/Contador/TemporizadorTemporizador Timer 0 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

2UTFPR – Campus Curitiba

Prof. Amauri Assef

� 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)

Page 3: Timer Pic16f877a

Contador/Temporizador Timer 0Contador/Temporizador Timer 0

T0SE T0CSPSA

Diagrama em bloco do TIMER 0Diagrama em bloco do TIMER 0

3UTFPR – Campus Curitiba

Prof. Amauri Assef

PS2:PS0

T0CSPSA

PSA

PSA

Page 4: Timer Pic16f877a

Contador/Temporizador Timer 0Contador/Temporizador Timer 0

Registrador de configuração do TIMER 0 Registrador de configuração do TIMER 0 –– OPTION_REGOPTION_REG

� Bit 7 - /RBPU � Bit 2-0 – PS2:PS0: Bits de seleção da taxa do prescaler

4UTFPR – Campus Curitiba

Prof. Amauri Assef

� Bit 6 – INTEDG

� Bit 5 – T0CS: Bit de seleção da fonte de clock do TIMER 0

� 0 – Interno

� 1 – Transição do pino T0CKI

� Bit 4 – T0SE: Bit de seleção da borda do TMR0

� 0 – Incrementa na transição 1 para 0 do pino T0CKI

� 1 – Incrementa na transição 0 para 1 do pino T0CKI

� Bit 3 – PSA: Bit de atribuição do prescaler

� 0 – Prescaler para o TIMER 0

� 1 – Prescaler para p WDT

O registro OPTION_REG fica no BANCO 1, endereço 0x81

Page 5: Timer Pic16f877a

Contador/Temporizador Timer 0Contador/Temporizador Timer 0

InterrupçãoInterrupção

� Pode ser causada por evento interno ou externo:

� Mudança de estado no pino

� Overflow do timer

� Conversão do A/D

5UTFPR – Campus Curitiba

Prof. Amauri Assef

� 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

� PCLATH

� Limpar o bit de sinalização da interrupção, por exemplo

BCF INTCON, TMR0IF

Page 6: Timer Pic16f877a

Contador/Temporizador Timer 0Contador/Temporizador Timer 0

Registro de Interrupção Registro de Interrupção -- INTCONINTCON

� Bit 7 – GIE: Bit Global Interrupt Enable – Habilitação global das interrupções

6UTFPR – Campus Curitiba

Prof. Amauri Assef

� 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

Page 7: Timer Pic16f877a

Contador/Temporizador Timer 0Contador/Temporizador Timer 0

Interrupção do Timer 0 Interrupção do Timer 0

DESCRIÇÃO

7UTFPR – Campus Curitiba

Prof. Amauri Assef

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 TMR0IE do registro INTCON

� O bit TMR0IF deve ser resetado por software para habilitar nova interrupção

Page 8: Timer Pic16f877a

Contador/Temporizador Timer 0Contador/Temporizador Timer 0

Contador/Contador/TemporizadorTemporizador Timer 0 Timer 0

RESUMO DOS REGISTRADORES DO TIMER 0

8UTFPR – Campus Curitiba

Prof. Amauri Assef

Page 9: Timer Pic16f877a

Contador/Temporizador Timer 0Contador/Temporizador Timer 0

Exemplo de cálculo para o TIMER 0Exemplo de cálculo para o TIMER 0� Utilizando o TIMER 0, escrever um programa para inverter o conteúdo do PORTD

a cada 2ms (clock de 8MHz):

� FCLK = 8MHz

� TTMR = 4 / 8M = 0,5μs

PRESCALER TEMPO

1:2 256μs

1:4 512μs

9UTFPR – Campus Curitiba

Prof. Amauri Assef

� TTMR = 4 / 8M = 0,5μs

� TESTOURO = 256 * 0,5μs = 128μs (ver prescale)

1:4 512μ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

OPTION_REG <= B’0000 0011’

Page 10: Timer Pic16f877a

Contador/Temporizador Timer 0Contador/Temporizador Timer 0

Programa principal (Programa principal (AssemblyAssembly):):

INICIO BANK1

MOVLW 0X00

MOVWF TRISD ; CONFIGURA PORTD COMO SAÍDA

MOVLW B'00000011‘ ; TIMER 0 -> PRESCALER DE 1:16

MOVWF OPTION_REG

Configura o PIC16F877A

10UTFPR – Campus Curitiba

Prof. Amauri Assef

MOVWF OPTION_REG

BANK0

CLRF PORTD

TESTE BTFSS INTCON,TMR0IF ; VERIFICA SE OCORREU OVERFLOW DO T0

GOTO TESTE

BCF INTCON,TMR0IF ; LIMPA BIT DE OVERFLOW

COMF PORTD,F ; INVERTE O PORTD A CADA OVERFLOW DO T0

GOTO TESTE

Page 11: Timer Pic16f877a

Contador/Temporizador Timer 0Contador/Temporizador Timer 0

Programa principal (C):Programa principal (C):

void main() {

OPTION_REG = 0B000000011; // ATRIBUIÇÃO DO PRESCALER PARA TIMER0

TRISD = 0x00; // PORTB COMO SAÍDA

PORTD = 0x00; // VALOR INICIAL = 00

11UTFPR – Campus Curitiba

Prof. Amauri Assef

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;

}

}

}

Page 12: Timer Pic16f877a

Contador/Temporizador Timer 0Contador/Temporizador Timer 0

Habilitação da interrupção do TIMER0:Habilitação da interrupção do TIMER0:

a) a) AssemblyAssemblyMOVLW B‘10100000' ; TIMER 0 -> PRESCALER DE 1:16

; ||| ---------> HABILITA A INTERRUPÇÃO DO TIMER0

; | ---------> HABILITA A INTERRUPÇÃO GLOBAL

12UTFPR – Campus Curitiba

Prof. Amauri Assef

; | ---------> HABILITA A INTERRUPÇÃO GLOBAL

MOVWF INTCON

b) CINTCON = 0xB10100000;

Page 13: Timer Pic16f877a

Contador/Temporizador Timer 0Contador/Temporizador Timer 0

Habilitação da interrupção do TIMER0:Habilitação da interrupção do TIMER0:

void interrupt (){

INTCON.F2 = 0; // LIMPA O BIT DE OVERFLOWPORTD = ~PORTD;

}

13UTFPR – Campus Curitiba

Prof. Amauri Assef

void main() {OPTION_REG = 0B000000011; // ATRIBUIÇÃO DO PRESCALER PARA TIMER0TRISD = 0x00; // PORTB COMO SAÍDAPORTD = 0x00; // VALOR INICIAL = 00TMR0 = 0X00; // LIMPA TMR0INTCON = 0B10100000; // INT DO TIMER0 HABILITADA

while(1) { }}