51单片机的定时器初值到底是TH0 = (65536-x) /256;还是TH0 = (65535-x) /256;
一个无符号整形数不是从0~65535吗?怎么会有一个65536做了被减数?为什么要以65536进行相减?虽然定时差别不大,但是这个真实的被减数值到底是65536还是655...
一个无符号整形数不是从0~65535吗? 怎么会有一个65536做了被减数?
为什么要以65536进行相减?虽然定时差别不大,但是这个真实的被减数值到底是65536还是65535呢? 展开
为什么要以65536进行相减?虽然定时差别不大,但是这个真实的被减数值到底是65536还是65535呢? 展开
展开全部
应该是65536减去定时脉冲个数
16位计数器,最大可写入65535 若定时1US(假设频率是12M),即来一个脉冲就溢出了,就该写入65535 刚好65536-1=65535
(65536-x) /256是正确的 因既然要用定时器,定时时间不可能是0,所以 (65536-x) /256结果不会是256 小于256的数都是可以装入的 对于TL0同样不会是256,因256的倍数除256余数是0
其实 不管是65535还65536对TH0写入的结果是一样的
但对于TL0(或整个计数器来说)理论上有一个脉冲的差别,若定时1US的话,写入65535或65534,都不会是准确的
假设写入65535,定时器一打开,脉冲立即来到,可能不到1US,,写入65534,需两个脉冲才会溢出 时间肯定大于1US
用这种方法来实现这么小的定时,肯定是不准确的 还有中断响应时间,主程序响应时间都要考虑
而对于长时间定时,这个误差又可以忽略的
要想减小误差,就要提高晶振或系统时钟的频率,当定时脉冲个数多时,就不必纠结这一个脉冲的误差了,同时中断响应时间和中断程序处理的时间也减小了,大多数情况下是可忽略的
16位计数器,最大可写入65535 若定时1US(假设频率是12M),即来一个脉冲就溢出了,就该写入65535 刚好65536-1=65535
(65536-x) /256是正确的 因既然要用定时器,定时时间不可能是0,所以 (65536-x) /256结果不会是256 小于256的数都是可以装入的 对于TL0同样不会是256,因256的倍数除256余数是0
其实 不管是65535还65536对TH0写入的结果是一样的
但对于TL0(或整个计数器来说)理论上有一个脉冲的差别,若定时1US的话,写入65535或65534,都不会是准确的
假设写入65535,定时器一打开,脉冲立即来到,可能不到1US,,写入65534,需两个脉冲才会溢出 时间肯定大于1US
用这种方法来实现这么小的定时,肯定是不准确的 还有中断响应时间,主程序响应时间都要考虑
而对于长时间定时,这个误差又可以忽略的
要想减小误差,就要提高晶振或系统时钟的频率,当定时脉冲个数多时,就不必纠结这一个脉冲的误差了,同时中断响应时间和中断程序处理的时间也减小了,大多数情况下是可忽略的
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询