51单片机定时器中断为什么在主函数进来赋一次初值,进入中断之后又赋一次初值?有什么作用吗

 我来答
黄庭石锣
2019-07-31 · TA获得超过167个赞
知道小有建树答主
回答量:189
采纳率:36%
帮助的人:31.3万
展开全部
主函数中是初始化,中断服务程序中赋值,是因为溢出申请中断时,寄存器的值已经为0了,必须重新赋值才能保持定时时间。
阿维ii
2022-03-20 · 没有梦想,何必远方。
阿维ii
采纳数:0 获赞数:16

向TA提问 私信TA
展开全部

8051定时器只有方式二为自动重载,意思进中断后出去会自动重新开始计数,如果你使用的是方式二,那么就不用重新赋值。

如果你采用的是其它方式,如:方式三的16位模式。在开始时,定时器减去初始装载值然后刚好达到需要的时间便溢出(这时候已经从65535跳为0了)进入中断。

那么进入中断后TH0和TL0已经不是你在外面赋的初值了,出去计算重新从0开始,这样会大大影响精度,所以需要在中断里重新赋初始值,保证出去后以你出去后从上次的地方开始计数,这样就保证了精度。

举个例子:你有一个计数器,从0~100s的,只有归0后才会响。但是你想设置10s就响一次,那么你并不需要从0~100s这么长的时间,这个时候就需要给它一个初值了,设置从90s开始计数,达到100s后刚刚好为10s,这个时候计数器会响一次,但是响完后它已经是0了,想要重新响需要100s后才能响,所以,最好的办法就是响铃后重新给它定一个90s开始的计数,这样就能实现每10s响一次了。

定时器的原理也是如此。

欢迎关注CSDN阿维啊的博客。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式