单片机中断程序中为什么要重新赋值?

如题所述

这个太好理解啦,就像你用一只桶来装水,你知道这只桶能装10公斤水就会溢出。你如果想往桶里装2公斤水想让他溢出,你就得先给它装进8公斤水。溢出以后你知道装了2公斤他满啦(满了以后会自动全部倒掉,是空的啦),下次如果还是需要装2公斤就让他溢出,你不是还得先装进8公斤水吗?不然2公斤水怎么会溢出呢?呵呵,简单吧!
按计数寄存器的原理也是一样的,一般每秒到65535才会溢出,如果你的单片机根据晶振频率和预分频的结果是每秒15625,那么你就得给计数寄存器先赋值49910,也就是C2F6。溢出后(计数寄存器的数值会自动清0),下次中断产生也需要在15625的时候,这个时候如果是没有预先的49910,就不能达到65535的溢出条件,就不会产生中断,所以每次执行玩这个中断程序都要给计数寄存器赋值。除非你只用一次溢出中断,可以不用再赋值。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-08-05
在工作方式2时是自动重装初值的,不需要给TH0/TL0重新赋值;在其他工作方式下需要。定时器工作时其TH/TL的值是一直加,直到溢出得到中断。工作方式2是8位定时/计数器,其高8位被用来保存初值,来中断后就自动把保存在其中的初值付给定时计数器,而方式0方式1是13位、16位定时/计数器,2个寄存器都使用掉了,硬件不能保存初值,需要软件每次在中断中赋初值。
第2个回答  推荐于2017-12-15
进中断后 TH0和TL0是一直在执行自己加一的操作,直到溢出,这个时候TH0和TL0已经不是你幅的初值了,所以需要重新写入初值本回答被提问者和网友采纳
第3个回答  2012-08-04
记得要保护现场 和恢复现场 最好使用栈保存数据追问

这个我知道,但是就是使用定时器计数的时候已经给TH0.TL0赋过值了,为什么还要在中断程序中在赋一次值?

追答

你在什么时候中断的 ?能不能求全部的 。。。 代码?

相似回答