求助,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位!

关于51单片机定时\/计数器装入初值的问题
这个有什么看不懂得呢 第一种 是吧十进制化成十六机制的方法 第二种呢 就是单纯的十进制 这样跟你说吧 因为th0只有一个字节 那就只能放下8位2进制 于是第一种表示就是把一个大于一个字节小于两个字节的数据转化成两个字节高八位和第八位的分离形式 第二种就简单了 0x9c就是65536-100的十六...

51单片机 定时时间 和TMOD设定 的问题
1、工作方式1为16位的定时\/计数器,其分为两个8位的高、低位定时器(TH1、TL1)2、TL0溢出后,再往TH0进一位,即如果给定时器赋初值257,超过256后,往TH1进一位 其中 256=2^8 3、按题意,要求赋初值为2^16-2000,将它分配到两个定时\/计数器中,即为TL1=(65536-2000)%256; TH1=(6553...

一个关于单片机定时器的问题
定时器的初值跟设置的模式有关,就拿定时器0的模式1(即16位模式)来说 ,由于51系列单片机是8位的,所以需要2个寄存器,高8位称为TH0,低8为称为TL0。定时器的工作原理是输入一个脉冲,寄存器计数+1,等到2个寄存器计数到全部位为1(即11111111 11111111,10进制就是65536),这时,再来一个脉冲,...

51单片机的定时器初始化可以带参数吗 例如:void timer_init(uchar...
1、定时器初始化通常在51程序的开始设置。一般情况下,不需要。因为函数只调用一次就累赘了。2、当定时器需要反复设定,在程序运行过程中,需要重复修改时。利用函数的模块化思想,当然代码效率更高、可读性、维护管理升级都是有益的。3、函数设计时,局部变量标识符的取名应该更贴近该参数的含义。4、语...

51单片机定时问题,为什么程序那儿要加一个while(1);
main函数中while(1)之前的代码是赋初值操作,是为中断调用使用的。之所以有while(1)是为了使得程序一直在运行,所以才有中断操作的不断执行,否则程序只运行一次就终止啦。

C51单片机定时器1以方式1定时1秒如何设置?
1、先打开我们熟悉的单片机c51编程软件——keil,先把主方法写好。2、然后,我们要定义两个变量。3、接着,设定好定时器的工作方式。4、设置中断发生的机制。5、最后,我们要加进这几行代码进行初值的重装。6、最后,把if语句补充完毕就可以了。

单片机定时器初值计算时,是用毫秒还是用微秒做单位?
根据你提供的数据,一个时钟周期=1\/12MHz,一个机器周期=12*时钟周期,定时器,一个时钟周期加一,也就是说定时器从0加到2^13,用时2^13\/1MHz=0.008192s,根据定时器设定不同初值,可以让定时器定时在0.008190s~0s之间,要想定时1s的话,就写判断语句让定时器多工作几次在进入程序 ...

51单片机用定时器中断让LED流转间隔为400ms,500ms,600ms,一直到1200m...
关于led转速的问题,我给个思路:按键按下后,关闭定时器,重新设定定时器初值,再开启定时器。至于定时器处置如何实现按一下按键增加100ms,以下思路给你参考,1、计算法:用公式去实现,每按一下按键程序中计算一下初值。2、查表法:将初值先计算好,放到只读数组中,按一次按键根据索引查一次表。定...

关于单片机定时器溢出值的设定
有些定时器是递减计数的,有些单片机的定时器则是递增计数的,还有可以设定计数方式的,51单片机的定时器就是递增的,所以它溢出的时间不是你设定的初值本身代表的机器周期数,而是初值与65536的差值,所以程序中使用了负号来对SYSCLK求补。比如你需要的定时时间是4个机器周期(SYSCLK),那么你就必须装入...

关于C51单片机单片机的几个问题
--如果,你不写 RETI,中断后,单片机就永远处于中断程序之内。2、在方式0定时器T0的初值为1E0CH,则TH0,TL0的初值分别为()这题答案给的居然是F0H、0CH,我觉得分明是1EH、0CH啊,是不是答案错了 --写成二进制:1E0CH = 0001 1110 0000 1100B --取其低 13 位,写成高八位、低...

相似回答