timer - 如何在 PIC16F1827 上同步两个定时器
问题描述
我刚开始在 Microchips MPLAB X IDE 上进行 PIC 编程。我的程序需要两个计时器。TMR4 的中断间隔为 500ms,TMR2 每秒中断一次。启动程序时,两个定时器是同步的,所以在很小的误差范围内,当TMR4第二次中断时,TMR2也执行中断代码。但是当我停止 TMR2 一段时间然后重新启动它时,两个定时器完全不同步。
有没有办法重新同步两个计时器或重新启动它们?
解决方案
你为什么要停止计时器?
发生中断时无需停止。TMR2
并且TMR4
功能相同。当中断被触发时,TMR2IF
或被TMR4IF
设置。如果也设置TMR2IE
或TMR4IE
然后触发中断。
寄存器PR2
和PR4
(也是预分频器)必须根据所需的频率进行设置。TMR2
或的值在每个时钟周期TMR4
与周期寄存器PR2
或的值进行比较。PR4
当两个值匹配时,比较器产生一个匹配信号作为定时器输出并触发中断,TMR2IF
或TMR4IF
置位。如果也设置TMR2IE
或TMR4IE
然后触发中断。该信号还将TMR2
或TMR4
计数器的值复位为 0,定时器继续运行。当你完成你的中断程序时,只需清除TMR2IF
或TMR4IF
启用下一个定时器中断。
如果您不想重新同步计时器,只需将TMR2
和TMR4
寄存器的值重置为 0。如果您不想在主程序中重新同步,则首先禁用中断清除TMR2
并TMR4
再次启用中断。
推荐阅读
- c# - 在将控制权返回给 COM 客户端之前全局捕获异常?
- ios - 从子视图中更改视图中的数组“不能在不可变值上使用变异成员:'self' 是不可变的”
- angular - 角度拦截器:如何管理重试(嵌套 next.handle())?
- javascript - 如何在 HTML/JS/CSS 的视图中实现导航效果?
- twitter-bootstrap - 页面加载时,具有类折叠的 Bootstrap 4 div 已打开
- spring-tool-suite - Spring Tools Suite 4 在一段时间后停止工作自动完成
- vue.js - 在 Ionic Vue 中仅更改 ion-page 元素的背景颜色,而不是后代元素
- java - IntelliJ 仍在使用旧的依赖项
- flutter - 颤振:如何使用 GroupedListView 按标题和子标题对项目进行分组
- css - 根据父类更改 CSS 变量 || Sass 和 Tailwind CSS