找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2383|回复: 1
打印 上一主题 下一主题
收起左侧

单片机PCA模块软件16位定时器的步进值问题

[复制链接]
跳转到指定楼层
楼主
ID:391717 发表于 2019-3-2 09:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  STC的PCA模块16位定时器,当[CH,CL]计数到跟[CCAPH,CCAPL]里的数值"匹配"时,若设置了中断允许,将发生比较匹配中断.在中断处理函数里,要求给
CCAPH,CCAPL赋一个不断增加的固定的值,才能实现定时,这跟普通的T0,T1定时器不同.我的疑问是,当[CCAPH,CCAPL]增大到65536时,就变0了,怎么还能有固定的"步进"呢?[CH,CL]要等于越来越大的[CCAPH,CCAPL],计数所需时间会越来越长,怎么会定时?请对此有研究的老师指教一二,谢谢!

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:391717 发表于 2019-3-3 10:28 | 只看该作者
最近查了些资料,将新认识补上,请指正!单片机T0,T1等计数/定时器,必须[TH,TL]计数到65536时才发生
溢出中断,因此如果希望计数1000次就发生中断,必须在[TH,TL]里预置一个固定值64536。有PCA组件的单片机用其16位计数器功能时,若允许比较匹配中断,则[CH,CL]计数到等于[CCAPnH,CCAPnL]里预设的值时,即能发生中断,但并未溢出!中断后[CH,CL]一刻不停继续计数。因计数值超过[CCAPnH,CCAPnL]后,在0--
65536范围内不可能再次发生比较匹配,因此每一轮0--65536循环计数只能有一次比较匹配中断,显然这并不符合各种计数/定时要求。只有在发生中断时在中断服务程序里给[CCAPnH,CCAPnL]增加一个步进值,才可能发生下一次比较匹配中断。例如,我们希望计数1000次就中断一次,则第一次匹配中断发生时令[CCAPnH,CCAPnL]=1000+1000,则[CH,CL]从1001,1002...计数到2000时就能再次发生比较匹配中断。
  若比较匹配中断发生时,令[CH,CL]=0,从头开始计数,则[CCAPnH,CCAPnL]l里就可以放一个固定步进值了,有的程序就是这样做的。不过由于PCA组件有几个模块,它们共用[CH,CL]计数器。当模块0用于16位计数时,也许模块1正用其PWM功能,所以在中断处理函数中令[CH,CL]=0的做法只适合仅使用一个模块作16位计数/定时的情况。

评分

参与人数 1黑币 +100 收起 理由
admin + 100 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表