你网上找的和你师傅给的肯定不是一个时间,不然两者计算的值是一样的。
你网上找的是定时器溢出一次是1ms,你师傅给的是定时器溢出一次是50ma,两者是不一样的。
本质上,计数器变化一次是1us的时间,你要想定义溢出一次是1ms,那么需要变化1000个值,16位定时器的溢出值是65536,要想变化1000个值,那么就要从65536-1000变化到65536。这个值是65535-1000=6453664536你用计算器十进制转换为16进制(用电脑自带的计算器算)就是FC18,FC是高位,18是地位,那么TH0=0xFC,TL0=0x18;这是直接赋值的算法。你网上查到的就是这样的赋值。
如果要用到实时计算,以你师傅讲的为例,计数器变化一次是1us的时间,想要定时50ms溢出,那么需要变化50000个值,那就是要从65536-50000开始变化到65536,这个值就是65536-50000,那么如何把他变为16进制数放到高低两个字节中呢,很简单,高字节对256取商,低字节对256取余即可。放到代码中就是TH0=(65536-50000)/256;TL0=(65536-50000)%256;
需要注意的是,计数器变化一次是1us的时间,这个是以定时器的主频为1Mhz来算的,如果主频变了,这个值也需要跟着变化。