Silvio51 escreveu:MorAl...
não é possível LER o valor do prescaler diretamente
Não entendo o por quê de alguém querer ler o "prescaler" do timer... se não somos nós que configuramos ele ? nós que o programamos... para que ler o prescaler ?
Será que está confundindo com o registro de período/contagem ?
Não sei se o VALOR do prescaler do TIMER0 pode ser lido nos PICs18F. Nos 16F o VALOR que ele adquire com a entrada de pulsos (não é o valor programado do divisor 1:, 1:2, 1:4, ...) não pode ser lido.
Ex.:
Digamos que você deseja conhecer a frequência de um trem de pulsos (ou o número de pulsos de um evento).
Você decide usar o TIMER0. Para isso você programa o prescaler para dividir os pulsos que entram (1:256).
Zera o TIMER0, que além de fazer TMR0 = 0, faz também prescaler = 0 (o valor programado "divide por 256" se mantém).
Após um período estipulado por você (e programado no firmware), você quer interromper a contagem do TIMER0 para obter os valores armazenados no prescaler e em TMR0.
Nos PICs16F não dá para interromper a contagem do TIMER0. Você usa um artifício. Coloca um pino conectado a RA4. Para habilitar a contagem, você faz esse outro pino ser ENTRADA. Para desabilitar a contagem, você faz esse outro pino virar SAÍDA (em '1' ou '0'). Para não queimar esse pino tem que haver um resistor entre o sinal de entrada e este pino.
Agora que você interrompeu a contagem, precisa conhecer o valor de prescaler e o de TMR0.
O do TMR0 é só ler diretamente, mas o valor contido em prescaler não está disponível para leitura.
Para conhecer este valor você aplica pulsos de entrada via este outro pino, configurado como saída, que está conectado ao pino RA4. Para cada pulso aplicado você incrementa um registro de propósito geral (GPR) e monitora o valor do TMR0. Quando o valor do TMR0 se altera, significa que o valor do prescaler atingiu 256 ou zero, o valor do registro GPR vai conter o complemento (a 256) do valor original desejado, do prescaler.
O TIMER0 virou um contador de dois bytes, porque você usou o registro prescaler como um dos bytes.
Aí você diz:
"Pô! eu poderia usar outro timer para isso e nem precisaria do segundo pino para interromper a contagem!"
Correto, mas a entrada via RA4 consegue ler pulsos com uma taxa de até uns 40 ou 50MHz.
MOR_AL