Академический Документы
Профессиональный Документы
Культура Документы
Contador/Temporizador Timer 0
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
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
Contador/Temporizador Timer 0
Interrupo
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
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
Contador/Temporizador Timer 0
Contador/Temporizador Timer 0
RESUMO DOS REGISTRADORES DO TIMER 0
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):
FCLK = 8MHz
TTMR = 4 / 8M = 0,5s
TESTOURO = 256 * 0,5s = 128s (ver prescale)
PRESCALER
TEMPO
1:2
256s
1:4
512s
1:8
1,024ms
1:16
2,048ms
1:32
4,096ms
1:64
8,192ms
1:128
16,384ms
1:256
32,768ms
Contador/Temporizador Timer 0
Programa principal (Assembly):
INICIO
Configura o
PIC16F877A
TESTE
BANK1
MOVLW
MOVWF
MOVLW
MOVWF
BANK0
0X00
TRISD
B'00000011
OPTION_REG
CLRF
PORTD
BTFSS
GOTO
BCF
COMF
GOTO
INTCON,TMR0IF
TESTE
INTCON,TMR0IF
PORTD,F
TESTE
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
;
;
b) C
INTCON = 0xB10100000;
12
Contador/Temporizador Timer 0
Habilitao da interrupo do TIMER0:
#define LEDS PORTD
void interrupt ()
{
INTCON.TMR0IF = 0;
LEDS = ~LEDS;
}
void main() {
OPTION_REG = 0B000000011;
TRISD = 0x00;
LEDS = 0x00;
TMR0 = 0X00;
INTCON = 0B10100000;
while(1) { }
}
UTFPR Campus Curitiba
Prof. Amauri Assef
13
Contador/Temporizador Timer 0
Exerccio 1
Desenhar o fluxograma e escrever o firmware parta executar as seguintes
funes:
1.
2.
14
Contador/Temporizador Timer 0
Exerccio 2
Desenhar o fluxograma, escrever o firmware e simular as funes para piscar
o LED no pino RD0 3 vezes com atraso de 500 ms e escolher um sentido para
movimentar um motor de passo com atraso de 16 ms utilizando o Timer 0.
Exerccio 3
Desenhar o fluxograma, escrever o firmware e simular as funes para piscar
o LED no pino RD0 3 vezes com atraso de 500 ms e executar as funes:
1. Se chave aberta (RB3), movimentar o motor em um sentido;
2. Caso contrrio, movimentar o motor no sentido oposto.
Utilizar atraso de 8ms com o Timer 0.
15