51单片机定时器中断为什么在主函数进来赋一次初值,进入中断之后又赋一次初值?有什么作用吗
2个回答
展开全部
8051定时器只有方式二为自动重载,意思进中断后出去会自动重新开始计数,如果你使用的是方式二,那么就不用重新赋值。
如果你采用的是其它方式,如:方式三的16位模式。在开始时,定时器减去初始装载值然后刚好达到需要的时间便溢出(这时候已经从65535跳为0了)进入中断。
那么进入中断后TH0和TL0已经不是你在外面赋的初值了,出去计算重新从0开始,这样会大大影响精度,所以需要在中断里重新赋初始值,保证出去后以你出去后从上次的地方开始计数,这样就保证了精度。
举个例子:你有一个计数器,从0~100s的,只有归0后才会响。但是你想设置10s就响一次,那么你并不需要从0~100s这么长的时间,这个时候就需要给它一个初值了,设置从90s开始计数,达到100s后刚刚好为10s,这个时候计数器会响一次,但是响完后它已经是0了,想要重新响需要100s后才能响,所以,最好的办法就是响铃后重新给它定一个90s开始的计数,这样就能实现每10s响一次了。
定时器的原理也是如此。
欢迎关注CSDN阿维啊的博客。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询