Manipulação de Timers No PIC18F4520
Manipulação de Timers No PIC18F4520
Manipulação de Timers No PIC18F4520
Enable bit: São sufixos IE (Interrupt Enable) para representar um bit que
pode hablitar ou não o atendimento a uma interrupção.
◦ Ex: Se TMR0IE =1 está habilitado atendimento a interrupção
de timer0 ;
Flag Bit: Estes bits que são setados automaticamente quando ocorre a
condição de atendimento a interrupção.
◦ Ex: Se TMR0IF = 1, indica estouro do tempo do timer 0.
Priority Bit: Existe 2 níveis de prioridades no atendimento a interrupções.
◦ Ex: TMR0IP = 1, indica que esta interrupção tem prioridade
máxima no atendimento (pula p/ end. 0x0008).
TIMER0
O Timer0 funciona similar aos pics da linha PIC16, exceto que pode operar com 8 ou
16 bits:
8 ou 16 bits
8 bits de prescaler (divisões do tempo)
Fonte de clock pode ser interna ou externa (funciona como contador de eventos)
Gera uma interrupção no overflow (estouro de contagem)
Na aba Timers, devemos configurar o(s) timer(s) a ser escolhido(s). No caso timer0
devemos escolher o valor de overflow, ou o valor que indica o tempo de quando deve
ocorrer o atendimento a interrupção. Durante a escolha do tempo de overflow pode-se
mudar os valores de prescaler a direita, como também habilitar 8 ou 16 bits até obter o
tempo de overflow desejado.
Feito isso o compilar CCS automaticamente calcula e gera linhas de códigos que
aparecem no arquivo com o código fonte, conforme ilustrado no exemplo abaixo:
ENABLE_INTERRUPTS(M1); M1 é o valor a ser gravado no registrador INTCON (GIE=1, TMR0IE=1) end. 0xFF2
Exemplo: M1 = GLOBAL | INT_TIMER0
SETUP_TIMER_0(M2); M2 é o valor a ser gravado no registrador T0CON (End. 0xFD5)
Exemplo: M2 = RTCC_INTERNAL | RTCC_DIV_16 |RTCC_8_BIT
SET_TIMER0(M3); M3 é o valor de contagem inicial a ser gravado no registrador TMR0 (End. 0xFD6 e 0xFD7)
Exemplo: M3 = 100
A primeira linha habilita o atendimento ao pedido de interrupção em decorrência do
estouro de contagem ou overflow. A segunda linha configura o modo de atuação do
timer0: 8 ou 16 bits e o valor do prescaler. A terceira linha atualiza o valor inicial da
contagem em TMR0: No caso de 8 bits atualiza o TMR0L e no caso de 16 bits atualiza
os registradores TMR0L e TMR0H.
#define RTCC_INTERNAL 0
#define RTCC_EXT_L_TO_H 32
#define RTCC_EXT_H_TO_L 48
#define RTCC_DIV_1 8
#define RTCC_DIV_2 0
#define RTCC_DIV_4 1
#define RTCC_DIV_8 2
#define RTCC_DIV_16 3
#define RTCC_DIV_32 4
#define RTCC_DIV_64 5
#define RTCC_DIV_128 6
#define RTCC_DIV_256 7
#define RTCC_OFF 0x80
#define RTCC_8_BIT 0x40
Onde:
Prescaler é o valor para divisão do clock {1, 2, 4, 8, 16, 32, 64, 128, 256}
Tmax é o valor final de contagem: 256 para 8 bits e 65536 para 16 bits
TMR0 é o valor de inicio de contagem (qdo 16 bits, utiliza-se 2 registradores TMR0L e TMR0H)
Na figura 3 é apresentada a tela que aparece no PIC CCS para escolha do overflow do
timer0. Optando-se por um dos divisores da direita ou prescaler, e escolhendo
contagem com 8 ou 16 bits, pode-se obter até 16 valores diferentes para overflow.
Neste caso, valores exatos.
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
3 – Situação 2: overflow com valor não exato (TRM0 ≠ 0) ou com casas decimais
TIMER1
O timer2 é um temporizador de 8 bits com operação bem diferente dos demais. Este
timer foi projetado para viabilizar a geração de sinais PWM em conjunto com os
módulos CCP e opcionalmente pode funcionar como clock para o módulo MSSP
(quando opera no modo SPI), além de poder também ser utilizado como temporizador
para uso geral. Na Figura 7 estão ilustrados os registradores que o timer2 trabalha.
Bit 7 x
Onde: