void delay() {
for(R7=250R7>0R7--)
for(R6=250R6>0R6--)
}
这是执行一段延时。原卜棚型理是:
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)微秒,其他语句的延时基本可以忽略
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)