Programa contador de frecuencias - Temporizadores en 8051

1.MOV TMOD,#15H
2.SETB P3.4
3.MOV R1,#28
4.MOV TL0,#00H
5.MOV TH0,#00H
6.MOV TL1,#00H
7.MOV TH1,#00H
8.SETB TR0
9.HERE2: SETB TR1
10.HERE: JNB TF1, HERE
11.CLR TF1
12.CLR TR1
13.DJNZ R1, HERE2
14.CLR TR0
15.CLR TR1
 

Este programa escrito arriba es para contar la frecuencia del pulso que está presente en el pin p3.4. Estamos usando el temporizador 0 como contador y el temporizador 1 como temporizador normal. En la línea 10, el control desperdicia alrededor de 35,75 ms, por lo que para activar el temporizador 0 durante aproximadamente 1 segundo, estamos usando la línea 10 28 veces.

ingrese la descripción de la imagen aquí

Pero aquí en la imagen en la línea 14 hicieron referencia al DJNZ a la línea 8, ¿por qué? ¿Cuál es el punto de volver a llenar el registro con 00? Podrían simplemente haber borrado el TF1 para iniciar el temporizador nuevamente desde 00, en lugar de eso, están deteniendo el temporizador en la línea 13 y reiniciándolo nuevamente después de llenarlo con 00.

¿Cuál es la necesidad de detener el temporizador y volver a llenarlo con 00? ¿El simple hecho de borrar el TF1 (mientras se mantiene TR1) no hará que el temporizador vuelva a empezar a contar desde 00? Dado que el valor de rollover ya es 00 y se carga en el temporizador después del desbordamiento. Entonces, ¿no es que el primer programa funcionará mejor en términos de precisión?

La larga cadena de comentarios ha excedido lo razonable para los comentarios. Por lo tanto, se ha movido al chat y debe continuar allí (enlace a continuación). --- Como este movimiento masivo de comentarios al chat solo se puede hacer una vez por pregunta, cualquier otro comentario publicado aquí que intente discutir la pregunta podría eliminarse sin previo aviso. ¡Mantenlo en el chat, por favor! Cuando alguien tenga suficiente información del chat para publicar una respuesta, hágalo. Cualquier mejora/actualización a la pregunta que se decida durante el chat, debe realizarse mediante una edición de la pregunta, como de costumbre. Gracias.
Los comentarios no son para una discusión extensa; esta conversación se ha movido a chat .

Respuestas (1)

Depende de cuál sea la intención del usuario con el temporizador.

Si la intención del usuario era implementar un temporizador de 16 bits que simplemente se ejecuta desde 0x0hasta 0xFFFF, se desborda y luego vuelve a pasar (por ejemplo, para realizar alguna tarea periódica):

SÍ, no tuvo que detener el temporizador después del desbordamiento y luego volver a cargar con 0x0. Dado que TR1todavía está configurado, el temporizador de todos modos después del desbordamiento, comienza 0x0y aumenta nuevamente. En este caso, la limpieza TF1sería suficiente.

Tenga en cuenta que : borrar TF1no es restablecer/recargar el temporizador.