求助,51单片机定时器初值设定问题

求大神翻译一下这两个指令:
MOV TH0 ,#(65536-5000)/256
MOV TL0,#(65536-5000)MOD 256
这两句是啥意思啊?尤其是为什么除256,这两个指令执行后的结果是什么啊?

1、假设定时的要求是5000个计时脉冲。那么我们希望T0的16位计数模式初值为X=65536-5000。
2、T0计数初值X的高8位,将X除以256,或X右移8位得到。给TH0。
3、T0计数初值X的低8位,将X取余256,或者X&0x00ff,或者左移8位右移8位得到。给TL0。
4、采用常量表达式交给编译器完成计算过程,程序可读性更好。方便阅读,改写,效果与实际定时值写法完全一致。追问

嗯,那就是X=1000,1000除以256给TH0,1000取余256给TL0,是吗?那么这个定时器设定的定时时间是多少啊?

追答

【1】程序中,定时计数5000个脉冲后中断。初值X=65536-5000=60536。填入初值计数器中的值为:TH0=0xEC(236),TL0=0x78(120)。T0从60536开始加计数,加5000次后TH0,TL0均为0,溢出产生中断请求。
【2】具体时间看T0的时钟源——晶振的12分频。如果是12MHz晶振,时钟源为1MHz,5000个脉冲计数时长是5mS。每5mS将会发出T0中断请求。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-03
第一句就是将,(65536-5000)的高八位赋值给TH0
第二句就是将,(65536-5000)的低八位赋值给TL0
256就是2的8次方,一个数除以256相当于右移8位。MOD是求模的意思。追问

嗯,那请问这个定时器的计时时间是多长啊?

追答

计时时间与晶振有关,比如12M晶振,计时1次是1 us,如你的参数,在12M晶振下定时时间是5ms。

第2个回答  2013-05-04
65536-5000的结果为16位,结果的高8位整数送到TH0(定时器高八位),结果的低8位送到TL0(定时器低八位),#(65536-5000)/256就是求结果高8位,#(65536-5000)MOD 256就是求结果低,8位。
第3个回答  2013-05-03
因为定时器分高8位和低8位,所以TH0取的是65536-5000的转换成16进制的高8位,TL0取低8位!