Estoy usando PIC16F1947 para un proyecto. El proyecto requiere un seguimiento en tiempo real para que un cristal estable de 32768 Hz esté conectado con el oscilador Timer1. El circuito del oscilador Timer1 y el cristal proporcionarán un reloj estable para nuestro proyecto.
El temporizador 1 solo puede proporcionar interrupción cuando el contador del temporizador se desborda. Es un contador de 16 bits, por lo que se dará una interrupción cada vez que el contador se desplace a 0x0000 desde 0xFFFF.
Dado que el temporizador se utilizará para mantener el tiempo desde el principio hasta el final del producto, Timer1 no se puede detener. Además, debe ejecutarse mientras el procesador está inactivo. Así que necesitamos usarlo en modo asíncrono.
En nuestro proyecto también necesitamos interrupciones cada 0.5 segundos. Así que planeamos inicializar el contador Timer1 a 0xC000 y luego iniciarlo. Cada vez que se dará una interrupción, planeamos bit a bit o 0xC0 para el byte alto del registro.
Según la hoja de datos:
Leyendo TMR1H o TMR1L mientras el temporizador se está ejecutando desde un externo reloj asíncrono asegurará una válida leer (cuidado en hardware). Sin embargo, el usuario debe tener en cuenta que leer el temporizador de 16 bits en dos Los valores de 8 bits en sí, plantea ciertos problemas, ya que el temporizador puede desbordar entre las lecturas.
Para las escrituras, es recomienda que el usuario simplemente se detenga el temporizador y escriba el deseado valores. Puede producirse una disputa de escritura escribiendo a los registros del temporizador, mientras que el registro se está incrementando. Esto puede producir un impredecible. valor en el registro TMR1H: TMR1L par.
¿Está bien en modo bit a bit O 0xC0 con el byte alto mientras el temporizador está funcionando? ¿O deberíamos usar otro temporizador para una interrupción de 0,5 segundos?
Gracias.