请帮忙解释下这段汇编语言的意思: DELAY:MOV R7,#250 D1:MOV R6,#250 D2:DJNZ R6,D2 DJNZ R7,D1 RET

请帮忙解释下这段汇编语言的意思: DELAY:MOV R7,#250 D1:MOV R6,#250 D2:DJNZ R6,D2 DJNZ R7,D1 RET,第1张

以上汇和亏编转化为C语言为:

void delay() {

for(R7=250R7>0R7--)

for(R6=250R6>0R6--)

}

这是执行一段延时。原卜棚型理是:

执行一个语句需要消耗1到2个机器时间,除法的更长;型猜

1个机器时间和晶振频率有关,一般单片机都是t=12/f,比如当晶振频率是12MHz的时候,1个机器时间是t=12/12MHz=1us

然后看循环R7*R6=62500次,

对于MOV R6,#250共执行250次,DJNZ R6,D2执行62500次,DJNZ R7,D1执行250次,则每句消耗2个机器时间有:

T=(250+62500+250)*2=126000us=126ms=0.126s

故延时越0.126秒

push cx先把cx推进栈以保存cx原来简首的中咐改值。然后用mov cx,0ffh赋值,卖判loop循环每执行一次cx自减一,到cx为0为止,此时循环共执行0ffh次即255次。再将栈中cx原来的值d出给cx寄存器。

如果CUP主频为40mHz,则时钟周期为1/40=0.025微秒

在808X中,一条LOOP指令如果实现跳转的话需要18个时钟周期,退出时需要5个时钟周期。所以这个延时子程序循环部分的延时(0.025*18*255+5)微秒,其他语句的延时基本可以忽略


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12314334.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存