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)
T0SE T0CS
PSA
PS2:PS0
PSA
PSA
Interrupo
Pode ser causada por evento interno ou externo:
Mudana de estado no pino
Overflow do timer
Converso do A/D
Endereo de retorno salvo na pilha
Vetor de interrupo no endereo 0x04
Retorno da interrupo com a instruo RETFIE
Salvamento de contexto
W, STATUS e PCLATH
Limpar o bit de sinalizao da interrupo, por exemplo
BCF INTCON, TMR0IF (Assembly)
INTCON.TMR0IF = 0 (C) ou TMR0IF_bit = 0
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
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
CLRF PORTD
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
11
Prof. Amauri Assef
Contador/Temporizador Timer 0
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.TMR0IF) // TESTA O BIT DE OVERFLOW
{
INTCON.TMR0IF = 0; // LIMPA O BIT DE OVERFLOW
PORTD = ~PORTD;
}
}
}
UTFPR Campus Curitiba
12
Prof. Amauri Assef
Contador/Temporizador Timer 0
a) Assembly
MOVLW B10100000' ; TIMER 0 -> PRESCALER DE 1:16
; ||| ---------> HABILITA A INTERRUPO DO TIMER0
; | ---------> HABILITA A INTERRUPO GLOBAL
MOVWF INTCON
b) C
INTCON = 0B10100000;
void main() {
OPTION_REG = 0B000000011; // ATRIBUIO DO PRESCALER PARA TIMER0
TRISD = 0x00; // PORTD COMO SADA
LEDS = 0x00; // VALOR INICIAL = 00
TMR0 = 0X00; // LIMPA TMR0
INTCON = 0B10100000; // INT DO TIMER0 HABILITADA
while(1) { }
}
Exerccio 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.
Exerccio 2
Desenhar o fluxograma e escrever o firmware para executar as seguintes
funes:
1. Dentro da interrupo 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 contrrio. Obs: testar o pino de acionamento
RE0 ou RE1 para a seleo do display.
2. No lao principal, escrever a funo para que o Rele conectado no pino RE2
seja acionado/desacionado com atraso de 2 segundos implementado por
software.
UTFPR Campus Curitiba
15
Prof. Amauri Assef
Contador/Temporizador Timer 0
Exerccio 3
Desenhar o fluxograma e escrever o firmware para executar as seguintes
funes:
1. Dentro da interrupo 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 contrrio. Obs : testar o pino de acionamento
RE0 ou RE1 para a seleo do display.
2. No lao 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.