如何在PIC​​16F1827上同步两个定时器

问题描述

我刚开始在microchip MPLAB X IDE上进行PIC编程。我的程序需要两个计时器。 TMR4的中断间隔为500ms,TMR2每秒中断一次。启动程序时,两个定时器同步,因此在很小的误差范围内,当TMR4第二次中断时,TMR2也执行中断代码。但是当我停止TMR2一段时间然后再次启动它时,两个计时器完全不同步。

是否可以重新同步两个计时器或重新启动它们?

解决方法

您为什么要停止计时器?

中断发生时无需停止。 TMR2TMR4在功能上相同。触发中断时,将设置TMR2IFTMR4IF。如果还设置了TMR2IETMR4IE,则会触发中断。

必须根据所需的频率设置寄存器PR2PR4(也是预分频器)。将TMR2TMR4的值与周期寄存器PR2PR4的值进行比较, 每个时钟周期。当两个值匹配时,比较器将生成一个匹配信号作为定时器输出并触发中断,TMR2IFTMR4IF被置位。如果还设置了TMR2IETMR4IE,则触发中断。此信号还将TMR2TMR4计数器的值重置为0,并且计时器继续运行。完成中断程序后,只需清除TMR2IFTMR4IF即可启用下一个定时器中断。

如果您不想重新同步计时器,则只需将TMR2TMR4寄存器的值重置为0。如果您不想在主程序中重新同步,则首先禁用中断,清除TMR2和{ {1}},然后再次启用中断。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...