Upload
renata-oliveira
View
60
Download
1
Embed Size (px)
Citation preview
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
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)
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
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
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
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
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
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
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’
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
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;
}
}
}
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;
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) { }}