金牌会员
 
- 积分
- 1424
- 金钱
- 1424
- 注册时间
- 2011-11-27
- 在线时间
- 122 小时
|
发表于 2012-1-6 13:39:29
|
显示全部楼层
回复【4楼】kexuexyz:
回复【3楼】科科1987:
---------------------------------
科科1987 你好,您拜读了我的pdf,哥灰常感动~~~~~~~~·
(1)本例中将计数器时钟设置成了6MHz,下面又将自动重装载寄存器设置成了65535(最大值),在中断服务程序中又将捕获比较值增加60000,捕获比较寄存器的值增加后超过65536将从0开始继续加,比如,如果捕获值为65530,那么加60000后将变为59995,计数器超过65535后也将从0开始,每当计数值达到比较值时,捕获比较值就增加60000。这样计数器就一直处于追赶捕获比较值的状态,则系统每计数60000次将产生一次捕获中断,也就是IO口的翻转速度为100Hz.(PS:这就相当于一只兔子和一只乌龟赛跑围绕着一个圆形操场赛跑,每当乌龟跑到兔子地方时,兔子立马飞速往前跑一定距离然后睡觉,当乌龟来时兔子立马又往前跑一定距离,哈哈!)
(2)溢出正是本程序的巧妙所在,如果(1)理解了,你自然就懂了,不管你信不信,反正我是信了。
---------------------------------
谢谢科学男孩的耐心讲解,还是有一点不是很清楚:“如果捕获值为65530,那么加60000后将变为59995” ,我的理解是捕获寄存器的值为65530, 如果一次就增加60000不就溢出了吗? 溢出后捕获寄存器的值就是0了吧? 也就是不会再变为59995了;
但是如果是一个一个递增那就是先递增5次溢出后为0,然后再一个一个递增到59995,也即60000次了。 请问科学男孩这两种情况怎么理解呢?谢谢~~ |
|