Moderadores: andre_luis, 51, guest2003, Renie
0.010S /dividivo/ 0.000256 = 39,0625
tempo desejado Tempo do prescaler
Bom eu achei o valor 39,0625 8 bits apenas inteiro, como o valor após a virgula não passou de 0.5, então arredonda-se o valor para o inteiro "39".
Bom eu sei que com a formula.
Prescaler *(1/( Fcristal/4)).
Eu descubro qual o tempo que leva para o prescaler rodando com cristal do pic, leva para incrementar 1 valor a mais no TIMER0.
Assim, suponha que o TMR0 esta com um valor 101, .....256uS,102,......256uS,103 sucessivo. quanto o TIMER0 chegar a 255, ele esta cheio certo ? mas o flag que indica estouro, ou a interrupção acontece quando ocorrer + 1 incremento e o timer passar de 255 para 0, "por isso diz-se que 8 bits tem 256 valores, de "0 a 255=256.
Bom intendido.
Quando eu uso o prescaler para tempos maiores, eu preciso descobrir qual o tempo de incremento do prescaler, depois descobrir quantos incrementos cabem dentro do tempo que eu escolhi.
Agora vem sua dúvida, ..
TIMER0 menos valor achado a cima = 39 "pres 256"
pre-carga = 256 - ( T / (((1/Fosc) * 4)* prescaler).
256 - 39 = 217 << 217 é a dita pré carga.
217 ......256uS, 218.....256uS, 219......256uS.....255 encheu.....256uS estourou.
Pronto.. bizóia só.
Eu descobri quantos 256uS cabém dentro do tempo que eu preciso"isso com prescaler setado para 256*", subtrai esse calor de 256, que é o maximo valor do TMR0, o resultado da subtração eu escrevo no TMR0.
E um abraço.
Es a aca n o a tinta.
void Delay_ms( unsigned int MSec)
{
unsigned int delay_aux = MSec;
// Timer 1 Prescaler 1:1
T1CONbits.TON = 1;
do
{
IFS0bits.T1IF = 0; // Flag Status...
PR1 = 20000; // 1ms a 80MHz;
while (IFS0bits.T1IF == 0);
delay_aux --;
}
while (delay_aux > 0);
T1CONbits.TON = 0; // Desliga Timer 1...
return;
}
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante