Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
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
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
}