永发信息网

下列51单片机延时程序中的#250,这个250是怎么来的?哪位给详细解释下?

答案:3  悬赏:0  手机版
解决时间 2021-04-20 16:24
  • 提问者网友:爱唱彩虹
  • 2021-04-20 04:13
下列51单片机延时程序中的#250,这个250是怎么来的?哪位给详细解释下?
最佳答案
  • 五星知识达人网友:走死在岁月里
  • 2021-04-20 04:40
DELAY:MOV R7,#250;
D1:MOV R6,#250;
D2:DJNZ R6,D2; 250减1,直到等于0,执行下一条
DJNZ R7,D1; 250减1,直到等于0,转D1执行
RET

以16M晶振为例,每个机器周期为1us ,因为DJNZ Rx,rel 为2字节指令,执行时间2us 。
忽略MOV 指令的耗时, 这个延时循环为2*250*250=125000us=125ms
全部回答
  • 1楼网友:十鸦
  • 2021-04-20 06:06
这个参数纯粹是想当然。此延时程序无法得到非常准确的延时。
  • 2楼网友:行路难
  • 2021-04-20 05:45
你好,这是一个延时程序,按这个程序来看是进行了两次循环。D2里面的是第一次循环,D1是第二次循环。整体的循环顺序如下:
先将R6里面的数减一,看是否为0,如果为0就顺序执行,如果不为0就继续减1看是否为0(也就是指令DJNZ的作用)。当R6中的数减为0以后,执行下一个DJNZ指令,这个就是一个大循环了。请仔细观察,当R7减1不为0时,程序又会给R6从新给250的数,那么就又会执行小循环。
也就是说,R7数每减少一次,就会完全的执行一次R6的循环。所以次数为255*255次。
关于时间的计算:如果晶振是12MHZ的话,那么没执行一条语句的时间就是1us,那么时间就是255*255us。其他不同晶振自然时间也就不一样。
最后的RET就用于返回主函数的,因为标准的程序是都要模块化的,主程序其实是很简单的。
不知道您听懂了没有,若是我说的话有错误的话请大家指出,谢谢!
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯