durante el uso del temporizador, calculando un retraso de un segundo exacto

0

¿Puedes ayudarme a escribir una macro que genere un retraso de un segundo utilizando Timer1 o Timer0? En otras palabras, he intentado escribir una macro durante 1 segundo de retraso, pero no pude manejarlo. Por qué intento escribir una macro es porque usaré esa macro en varios lugares.

Si sabe más sobre el temporizador, ¿puede darme una fórmula general cuando se calcula el tiempo?

EDITAR:

pic16f8xx
4MHZ
MPLAB simulation = 5 MHZ

EDITAR:

"... [I] en realidad no solo quiero un retraso, sino que utiliza interrupciones para ejecutar una tarea más tarde cuando haya transcurrido 1 segundo mientras se hacen otras cosas mientras tanto ..."

    
pregunta user1315050

1 respuesta

2

Yo usaría el temporizador 2 para configurar una interrupción periódica. 1 ms (frecuencia de 1 kHz) suele ser un buen período de interrupción. A una frecuencia de reloj de 4 MHz, tiene una frecuencia de instrucción de 1 MHz, por lo que una interrupción de 1 ms sería cada 1000 instrucciones. Debería estar dentro y fuera de la interrupción en unos 10 segundos de instrucciones, por lo que es una pequeña carga general para el procesador.

Para obtener demoras prolongadas, configure un contador que disminuya la rutina de interrupción si no es cero. Cuando este contador llega a 0, la rutina de interrupción establece un indicador global. Si necesita una resolución de 1 ms para su tiempo de 1 s, entonces hace que este sea un contador de 16 bits. Si 5 ms es suficiente resolución, entonces se divide el tick de 1 ms en la rutina de interrupción por 5 para hacer un tick de 5 ms y se disminuye un contador de un solo byte cada 5 ms. Si realmente solo necesita un tiempo de 5 ms, entonces puede configurar la interrupción periódica para que sea de 5 ms (cada 5000 ciclos de instrucción).

Para usar el retardo, el código de fondo borra el indicador de retardo transcurrido y escribe el tiempo de retardo en unidades de 5 ms en el contador. El código de primer plano comprueba la bandera regularmente para ver si el retraso ha transcurrido. Mientras tanto, puede realizar otro procesamiento.

    
respondido por el Olin Lathrop

Lea otras preguntas en las etiquetas