关于单片机中断程序的定时器0和定时器1
对于定时器赋值有两种方法,一种是直接给高八位和低八位赋值,另一种是用类似于:TH0=(65536-50000)/256;进行赋值。
我想问:1,这两种方法到底有什么区别。
2,如果用直接赋值的方法,(也就是第一种直接给高八位低八位)要设定一个50毫秒,30毫秒,或20毫秒的中断服务应该怎么赋值。 展开
首先,你所说的两种赋值方法,实际上是一种,就是就是寄存器的高8为位个低8位赋值。你说的第二种(TH0=(65536-50000)/256)所赋的值是经过计算(=(65536-50000)/256)得到的,你知道定时计数器的工作原理就清楚了。
其次,赋值大小要根据你的晶振以及单片机工作模式确定机器周期,然后才能确定需要赋多大的值,11.0592MHz的晶振能产生与时钟周期更吻合的波形,12MHz的更利于计算,如果需要更精确的时钟,建议使用时钟芯片。TH0=(65536-50000)/256、TL0=(65536-50000)%256的中断时间为50毫秒(单片机全速运行,晶振12MHz),这只是一种估计的赋值,时间误差很大。
如果觉得手工计算很麻烦,可以使用工具帮忙,只要选择你的参数就能出结果,见附件。
最后,如果你不想计算,给你枚举一些:
晶振:11.0592MHz,单片机模式:12T
20毫秒:TH0 = 0xB8;TL0 = 0x00;
30毫秒:TH0 = 0x94; TL0 = 0x00;
50毫秒:TH0 = 0x4C; TL0 = 0x00;
晶振:12MHz,单片机模式:12T
20毫秒:TH0 = 0xB1;TL0 = 0xE0;
30毫秒:TH0 = 0x8A;TL0 = 0xD0;
50毫秒:TH0 = 0x3C; TL0 = 0xB0;