PIC16F877A ¿Problema de retraso del temporizador0?

0

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 !!

    
pregunta Jithin

2 respuestas

1

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)

    
respondido por el Scott Seidman
0

¿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.

    
respondido por el Sergei_Grishin

Lea otras preguntas en las etiquetas