Você está na página 1de 15

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

DEPARTAMENTO ACADMICO DE ELETROTCNICA


CURSO DE ENGENHARIA INDUSTRIAL ELTRICA TECNOLOGIA
EM AUTOMAO INDUSTRIAL

Sistemas Digitais e Microcontrolados


Contador/Temporizador TIMER 0 - PIC16F877A
Prof. Amauri Assef
amauriassef@utfpr.edu.br
UTFPR Campus Curitiba
Prof. Amauri Assef

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

UTFPR Campus Curitiba


Prof. Amauri Assef

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

Bit 2-0 PS2:PS0: Bits de seleo da taxa do prescaler

O registro OPTION_REG fica no BANCO 1, endereo 0x81


UTFPR Campus Curitiba
Prof. Amauri Assef

Contador/Temporizador Timer 0
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
PCLATH
Limpar o bit de sinalizao da interrupo, por exemplo
BCF INTCON, TMR0IF
UTFPR Campus Curitiba
Prof. Amauri Assef

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

UTFPR Campus Curitiba


Prof. Amauri Assef

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

UTFPR Campus Curitiba


Prof. Amauri Assef

Contador/Temporizador Timer 0
Contador/Temporizador Timer 0
RESUMO DOS REGISTRADORES DO TIMER 0

UTFPR Campus Curitiba


Prof. Amauri Assef

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

OPTION_REG <= B0000 0011


UTFPR Campus Curitiba
Prof. Amauri Assef

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

UTFPR Campus Curitiba


Prof. Amauri Assef

; CONFIGURA PORTD COMO SADA


; TIMER 0 -> PRESCALER DE 1:16

; VERIFICA SE OCORREU OVERFLOW DO T0


; LIMPA BIT DE OVERFLOW
; INVERTE O PORTD A CADA OVERFLOW DO T0

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

;
;

; TIMER 0 -> PRESCALER DE 1:16


HABILITA A INTERRUPO DO TIMER0
HABILITA A INTERRUPO GLOBAL

b) C
INTCON = 0xB10100000;

UTFPR Campus Curitiba


Prof. Amauri Assef

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;

// LIMPA O BIT DE OVERFLOW

// ATRIBUIO DO PRESCALER PARA TIMER0


// PORTD COMO SADA
// VALOR INICIAL = 00
// LIMPA TMR0
// INT DO TIMER0 HABILITADA

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.

Dentro da interrupo do Timer 0, testar a chave conectada no pino RB2 a


cada 32 ms. Considerando um display de 7 segmentos do tipo catodo
comum conectado ao PORTD, escrever o caractere A se chave aberta ou F
caso contrrio;
No lao principal, escrever a funo para que o LED conectado no pino RB0
pisque com atraso de 500 ms implementado por software.

UTFPR Campus Curitiba


Prof. Amauri Assef

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.

UTFPR Campus Curitiba


Prof. Amauri Assef

15

Você também pode gostar