Apresentação TIMER0 PIC16F877A 2016

16
1 UTFPR – Campus Curitiba Prof. Amauri Assef UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ DEPARTAMENTO ACADÊMICO DE ELETROTÉCNICA CURSO DE ENGENHARIA INDUSTRIAL ELÉTRICA – TECNOLOGIA EM AUTOMAÇÃO INDUSTRIAL Sistemas Digitais e Microcontrolados Contador/Temporizador TIMER 0 - PIC16F877A Prof. Amauri Assef [email protected]

Transcript of Apresentação TIMER0 PIC16F877A 2016

Page 1: Apresentação TIMER0 PIC16F877A 2016

1UTFPR – Campus CuritibaProf. Amauri Assef

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁDEPARTAMENTO ACADÊMICO DE ELETROTÉCNICA

CURSO DE ENGENHARIA INDUSTRIAL ELÉTRICA – TECNOLOGIA EM AUTOMAÇÃO INDUSTRIAL

Sistemas Digitais e MicrocontroladosContador/Temporizador TIMER 0 - PIC16F877A

Prof. Amauri [email protected]

Page 2: Apresentação TIMER0 PIC16F877A 2016

Contador/Temporizador Timer 0

2UTFPR – Campus CuritibaProf. Amauri Assef

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)

Page 3: Apresentação TIMER0 PIC16F877A 2016

Contador/Temporizador Timer 0

3UTFPR – Campus CuritibaProf. Amauri Assef

T0SE

PS2:PS0

T0CSPSA

PSA

PSA

Diagrama em bloco do TIMER 0

Page 4: Apresentação TIMER0 PIC16F877A 2016

Contador/Temporizador Timer 0

4UTFPR – Campus CuritibaProf. Amauri Assef

Registrador de configuração do TIMER 0 – OPTION_REG

Bit 7 - /RBPU 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

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

Page 5: Apresentação TIMER0 PIC16F877A 2016

Contador/Temporizador Timer 0

5UTFPR – Campus CuritibaProf. Amauri Assef

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 e PCLATH Limpar o bit de sinalização da interrupção, por exemplo

BCF INTCON, TMR0IF (Assembly)INTCON.TMR0IF = 0 (C) ou TMR0IF_bit = 0

Page 6: Apresentação TIMER0 PIC16F877A 2016

Contador/Temporizador Timer 0

6UTFPR – Campus CuritibaProf. Amauri Assef

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

Page 7: Apresentação TIMER0 PIC16F877A 2016

Contador/Temporizador Timer 0

7UTFPR – Campus CuritibaProf. Amauri Assef

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 TMR0IE do registro INTCON O bit TMR0IF deve ser resetado por software para habilitar nova interrupção

Page 8: Apresentação TIMER0 PIC16F877A 2016

Contador/Temporizador Timer 0

8UTFPR – Campus CuritibaProf. Amauri Assef

Contador/Temporizador Timer 0

RESUMO DOS REGISTRADORES DO TIMER 0

Page 9: Apresentação TIMER0 PIC16F877A 2016

Contador/Temporizador Timer 0

9UTFPR – Campus CuritibaProf. Amauri Assef

Exemplo 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 TESTOURO = 256 * 0,5μs = 128μs (ver prescale)

PRESCALER TEMPO

1:2 256μs

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: Apresentação TIMER0 PIC16F877A 2016

Contador/Temporizador Timer 0

10UTFPR – Campus CuritibaProf. Amauri Assef

Programa principal (Assembly):

INICIO BANK1MOVLW 0X00MOVWF TRISD ; CONFIGURA PORTD COMO SAÍDAMOVLW B'00000011‘ ; TIMER 0 -> PRESCALER DE 1:16MOVWF OPTION_REGBANK0

CLRF PORTD

TESTE BTFSS INTCON,TMR0IF ; VERIFICA SE OCORREU OVERFLOW DO T0GOTO TESTEBCF INTCON,TMR0IF ; LIMPA BIT DE OVERFLOWCOMF PORTD,F ; INVERTE O PORTD A CADA OVERFLOW DO T0GOTO TESTE

Configura o PIC16F877A

Page 11: Apresentação TIMER0 PIC16F877A 2016

Contador/Temporizador Timer 0

11UTFPR – Campus CuritibaProf. Amauri Assef

Programa principal (C) – MikroC:

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

if (INTCON.F2) // TESTA O BIT DE OVERFLOW{INTCON.F2 = 0; // LIMPA O BIT DE OVERFLOWPORTD = ~PORTD;

}}

}

Page 12: Apresentação TIMER0 PIC16F877A 2016

Contador/Temporizador Timer 0

12UTFPR – Campus CuritibaProf. Amauri Assef

Programa principal (C) – MikroC Pro:

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

if (INTCON.TMR0IF) // TESTA O BIT DE OVERFLOW{INTCON.TMR0IF = 0; // LIMPA O BIT DE OVERFLOWPORTD = ~PORTD;

}}

}

Page 13: Apresentação TIMER0 PIC16F877A 2016

Contador/Temporizador Timer 0

13UTFPR – Campus CuritibaProf. Amauri Assef

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

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

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

MOVWF INTCON

b) CINTCON = 0B10100000;

Page 14: Apresentação TIMER0 PIC16F877A 2016

Contador/Temporizador Timer 0

14UTFPR – Campus CuritibaProf. Amauri Assef

Habilitação da interrupção do TIMER0:#define LEDS PORTDvoid interrupt (){

INTCON.TMR0IF = 0; // LIMPA O BIT DE OVERFLOWLEDS = ~LEDS;

}

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

while(1) { }}

Page 15: Apresentação TIMER0 PIC16F877A 2016

Contador/Temporizador Timer 0

15UTFPR – Campus CuritibaProf. Amauri Assef

Exercício 1 A partir do exemplo anterior, desenhar o fluxograma e escrever o firmware

para piscar os LEDs com atraso de 1 segundo utilizando prescaler 1:128.

Exercício 2 Desenhar o fluxograma e escrever o firmware para executar as seguintes

funções:1. Dentro da interrupção do Timer 0, testar a chave conectada no pino RB0 a

cada 8 ms (prescaler 1:64). Considerando 2 displays de 7 segmentos do tipo catodo comum multiplexados conectado ao PORTD, escrever os caracteres Ab se chave aberta ou FE caso contrário. Obs: testar o pino de acionamento RE0 ou RE1 para a seleção do display.

2. No laço principal, escrever a função para que o Rele conectado no pino RE2 seja acionado/desacionado com atraso de 2 segundos implementado por software.

Page 16: Apresentação TIMER0 PIC16F877A 2016

Contador/Temporizador Timer 0

16UTFPR – Campus CuritibaProf. Amauri Assef

Exercício 3 Desenhar o fluxograma e escrever o firmware para executar as seguintes

funções:1. Dentro da interrupção do Timer 0, testar a chave conectada no pino RB0 a

cada 8 ms (prescaler 1:64). Considerando 2 displays de 7 segmentos do tipo catodo comum multiplexados conectado ao PORTD, escrever os caracteres S1 se chave aberta ou S2 caso contrário. Obs : testar o pino de acionamento RE0 ou RE1 para a seleção do display.

2. No laço principal, mover o motor para um dos sentidos (pinos RC0, RC3, RC4 e RC5), conforme o estado da chave. Obs: utilizar atraso de 10 ms por software.