Para obtener un mínimo de 5 ms de onda cuadrada. Elegí prescalar como 1:32 (el reloj interno dado a 4Mhz), ¿cuál será el valor del registro TMR0? ¡¡Es 0x64 o 0x63 !!
Para obtener un mínimo de 5 ms de onda cuadrada. Elegí prescalar como 1:32 (el reloj interno dado a 4Mhz), ¿cuál será el valor del registro TMR0? ¡¡Es 0x64 o 0x63 !!
Por mis cálculos, con un reloj del sistema de 4MHz, y un reloj con temporizador de 1MHz, y un prescaler de 32, es una frecuencia de marca de 31250 Hz. Su tiempo de tick es de 32 microsegundos. Para contar a 0.005 segundos, necesita 156.25 tics de reloj. Redondear a 0x9D.
Por lo tanto, puedes configurar el temporizador en 0, esperar hasta que llegue a 0x9D, alternar tu bit y luego restablecer a 0.
Otra forma de hacer esto sería preajustar el temporizador a 0xFF-0x9D, y habilitar la interrupción. La interrupción, que se activa cuando el temporizador pasa de 0xFF a 0x00, cambiará su bit y restablecerá el temporizador a 0xFF-0x9D. (o más exactamente, 0xFF-0x9D + el valor actual del temporizador, que no se ha detenido durante la interrupción)
¿Cuál es su frecuencia de reloj principal? Si es 20MHz, para obtener .5ms con una preescala de 32, debe contar hasta 313. Sugeriría una preescala de 64 y buscar que el valor de TMR0 exceda de 0x9C, por lo que no necesita contar el desbordamiento.
Esto es cómo hacer el cálculo, es simple:
Reloj temporizador (Hz) = Frecuencia de reloj / Escala previa
Señal del temporizador (segundos) = 1 / Reloj del temporizador
Se necesitan marcas de tiempo (entero) = .5ms / Marca de tiempo
--- EDITAR después de la frecuencia proporcionada
Busque el valor de registro que exceda 0x3F si desea .504ms, y 0x3E si desea .496ms. Eso es tan preciso como se obtiene con su configuración.
Lea otras preguntas en las etiquetas microcontroller pic embedded timer microchip