set_timer0(131+get_timer0())

Enviado:
09 Set 2009 15:13
por fernandor
pessoal...alguem poderia explicar como funciona esta instrucao?
sobre o timer funcionando como contador de tempo ja consegui entender. Nao estou entendendo esta instrucao
Obrigado
Fernando

Enviado:
09 Set 2009 16:52
por tcpipchip
Seta o tiver atual com o TICK mais aquele valor...
Algo do tipo 255-131 para inicializar o timer para triggar uma INTERRUPT, por exemplo...
timer0

Enviado:
09 Set 2009 18:45
por fernandor
tcpi...seria como uma especie de ajuste fino para minha interrupcao. Tipo escolho um valor entre 0 e 255 para iniciar o timer0 e depois uso uma variavel para incrementar a cada overflow, ex.: cont++ e depois comparo com um valor por exemplo cont==234. seria isso mais ou menos?
Tenho visto alguns programas que ao inves de usarem esta funcao usam simplesmente set_timer0(0). Qual a diferenca???
obrigado
Re: timer0

Enviado:
09 Set 2009 23:40
por Renie
Olá Fernando,
Esta instrução serve para manter a frequência correta da interrupção
pois sua rotina que irá atender a interrupção também consome tempo,
e nisso, o timer continua contando após o overflow , é usada para
aumentar a precisão da interrupção, principalmente em circuitos de
relógios.
[]'s
Renie
timer0

Enviado:
10 Set 2009 13:45
por fernandor
Muito obrigado Rennie pelo esclarecimento.
Qual a diferenca de usar somente set_timer0(131) e set_timer0(131+get_timer0())
Valeu
Fernando
Re: timer0

Enviado:
10 Set 2009 14:43
por fabim
fernandor escreveu:Muito obrigado Rennie pelo esclarecimento.
Qual a diferenca de usar somente set_timer0(131) e set_timer0(131+get_timer0())
Valeu
Fernando
set_timer0(131)// escreve 131 no TMR0
set_timer0(131+get_timer0())
// pega o valor atual do timer0, soma 131 e escreva no timer0 novamente.
Como timer0, dependendo do uC é de 8 bit´s
Suponha que leu 168, e somou 131
(168 + 131)- 256 = novo valor a ser escrito no TMR0.
Pode parecer sem nexo, mais como o tio renie disse, dependendo do que esta sendo feito, tem N utilizades.
Fabim
timer0

Enviado:
10 Set 2009 14:57
por fernandor
supondo que timer0 leu 256 e somou 131. O que vai acontecer? pois como timer0 é de 8 bits so vai ate 256.
obrigado
fernando

Enviado:
10 Set 2009 15:38
por xultz
Fernandor, o timer 0 estoura quando ultrapassar de 255, ele volta para zero.
E se a int estiver setada, ele gera uma interrupção e desvia para a ISR.
A questão é a seguinte, suponha que você queira que ele gera uma interrupção exatamente a cada período de tempo (por exemplo, a cada 1ms exatamente) porque você quer fazer um relógio (ou seja, a cada 1000 vezes que entrar na ISR se passou exatamente 1 segundo).
Suponha que para o clock do teu PIC, você configura um prescaler e chega À conclusão que o timer 0 vai contar 125 vezes. Assim, se você setar o timer 0 com o valor 131, ele vai contar 125 vezes até estourar o valor (ou seja, passar de 255 para 0, já que 256-125=131).
Daí você liga o timer zero, seta ele com 131 e espera. Ele vai contar, e quando passar de 255 para 0 vai para a ISR, e se passou exatamente 1ms. O problema é que agora ele só vai estourar de novo após contar 256 vezes, o que dará pouco mais de 2ms. Então, a primeira coisa que você vai fazer na ISR é setar ele com 131, assim ele vai contar mais 125 vezes até cair na ISR de novo.
Assim, teoricamente ele vai cair na ISR a cada 1ms.
Porém, entre ele entrar na ISR e você setar ele com 131 vai ter passado um tempo, afinal desviar para a ISR toma dois ciclos de clock, salvar o contexto mais alguns, e assim por diante. Daí, em vez de levar 1ms ele vai levar 1ms e mais um tiquinho a cada interrupção, e teu relógio já não tem mais a precisão de um Big Ben. Então, o macete é ler quanto o timer0 contou desde que entrou na ISR até você decidir setar o valor dele, e somar este valor com os 131 que você quer. Note que quanto mais você adiciona aos 131, menos tempo o timer 0 leva para gerar interrupção. Se você ler quanto ele contou e somar aos 131 vai descontar exatamente o tempo gasto para tratar a ISR.
Me fiz entender?
Re: timer0

Enviado:
10 Set 2009 16:19
por fabim
fernandor escreveu:supondo que timer0 leu 256 e somou 131. O que vai acontecer? pois como timer0 é de 8 bits so vai ate 256.
obrigado
fernando
assim ó.
unsigned 1byte meu_byte
o valor máximo que cabe dentro de um byte é 255...
só que o 0 tambem é um valor, por isso diz-se 256...
0,1,2,3,255 = 256 possiveis valores.
Suponha que, isso to falando de compilador idiota ou em ASM.
meu_byte = 255 + 131
Meu_byte = 131...
255+ 131 = 386. só que dentro de um byte cabe apenas o peso 255, então o valor resultante é a diferença de 255 para o valor montante.
assim como o xultz lhe explicou, existem mais N utilizades.
Cada caso, é uma sentença..
Fabim