Seguinte, estou tentando utilizar o timer 0 no PIC 16f506 (que não possui interrupçaõ!). Minha intenção é que ele fique contando enquanto rodo o loop do meu porgrama, que tb fica verificando o registrador para analisar se a contagem chegou ao seu final (estouro).
No datasheet do PIC existe duas maneiras para setar a contagem, a primeira utiliza o TOCKI pin para incrementar o timer0 (o que não me interessa porque tenho que usar este pino como uma IO). Já a segunda maneira utiliza a saida do comparador para incrementar o timer 0.
Nesta segunda maneira, alguns registradores precisam ser alterados (ver pg.39 do datasheet). Com isso, segue o código:
- Código: Selecionar todos
#asm
MOVLW 11100111
OPTION //carrega W no reg. OPTION
BCF 0x08,6 //altera o reg.CM1CON0.C1OUTEN
BCF 0x08,4 //altera o reg.CM1CON0.C1TOSC
#endasm
E abaixo segue o meu código que analisa (no loop do meu programa) o estouro da contagem do timer 0:
- Código: Selecionar todos
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256); //Clock 4MHz interno
set_timer0(238);
...
while(true){
...
verificaEstouroTimer0();
...
}
...
verificaEstouroTimer0(){
if(get_timer0()>=238){ //Verifica se estorou a contagem do timer0(4ms)
isT4ms = true;
ccontTDadoBarramento ++;
if(ccontTDadoBarramento==18){//Conta um periodo de aprox.:64.512ms
isT65ms = true;
ccontTDadoBarramento = 0;
}
set_timer0(238);
}
}
Feita as configurações acima, ao inves de contar 65.5ms, ele esta contando aproximadamente 1ms...
Minhas dúvidas:
- A configuraçaõ feita por mim está correta?
- Poderei utilizar o pino do comparador como um IO?
- Existe uma maneira mais facil e funcional de realizar a contagem por timer0 utilizando este PIC?
Desde já agradeço a todos!!!