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]

Timer Pic16f877a

Embed Size (px)

Citation preview

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) { }}