Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

Avisos
Vaciar todo

Temporizar con el Timer

2 Respuestas
2 Usuarios
0 Reactions
1,439 Visitas
superprp
Respuestas: 203
Topic starter
(@superprp)
Estimable Member
Registrado: hace 18 años

Buenas,

¿Como puedo hacer para que me desborde el Timer cada 0.5seg? porque he hecho las cuentas y creo que me desborda (con el maximo de cuenta) unas 16 veces
Estoy trabajando con un XT de 8Mhz
una solución sería ponerle un cristal de 4Mhz pero aun así me desbordaría 8 veces

Temporización = Ciclo de instrucción * (255-TMR0) * Divisor de Frecuencia
Divisor de Frecuencia = 256 (prescaler max con PS2:PS1:PS0 =111)
Temporización = 0.5seg = 500 ms = 500.000 us
Ciclo de instrucción = Fosc/4

255-TMR0 = 3906.25 ciclos
2906.25/255 = 15 desbordamientos de buffer con el TMR a 0 (maxima cuenta)

¿las cuentas se hacen así, verdad? corregirme si me equivoco y si podeis ayudarme con una solucíon...lo agradecería

gracias

Responder
1 respuesta
heli
Respuestas: 748
 Heli
(@heli)
Ardero
Registrado: hace 19 años

Cuando el temporizador interno no da para más, o se quieren hacer varias temporizaciones distintas, hay que usar un poco de código adicional en la interrupción, parecido a este:

#int_TIMER0 // interrupción cada 4ms 250 Hz
TIMER0_isr()
{
static byte Tmr4; // Contador para 4 milisegundos 1/400 seg 250 Hz
static byte Tmr100; // Contador para 100 milisegundos 1/10 seg 10 Hz
static word TmrMin; // Contador para 1 minuto: 600 milisegundos

// Procesos cada 4ms
// Poner aqui el código que se ejecuta cada 4ms

// Cuenta 25 interrupciones de 4ms = 100ms
if (++Tmr100<25) return; // no ha llegado a 100ms 10 Hz
Tmr100=0; // Reinicia la cuenta
// Procesos cada 100 ms
// Poner aqui el código que se ejecuta cada 100ms

// Cuenta 600 interrupciones de 100ms = 1 minuto
if (++TmrMin<600) return; // no ha llegado a un minuto 600 milisegundos
TmrMin=0; // Reinicia la cuenta
// Procesos cada minuto
// Poner aqui el código que se ejecuta cada minuto

}

Responder
Compartir: