单片机汇编延时程序的理解
这样,我们就可以算算这个子程序累计进行了多少个周期,然后乘以1微秒,就算出它占用的时间,也就是延时的时长了!
第一句:DELAY: MOV R7,#250 ;执行了一次,没有任何语句跳转给它,单周期。1
第二句:D1: MOV R6,#250 ;执行了250次,全部是第四句跳过来的,单周期。250
第三句:D2: DJNZ R6,D2 ;原地执行了250次,从第二句顺延(第二句执行完,没有其它跳转的话肯定要执行第三句)过来250次,也就是250*250=62500次,双周期*2。125000
第四句:DJNZ R7,D1 ; 从第三句顺延过来250次,双周期*2。500
总计:1+250+125000+500=1257501次,乘以1微秒,换算约为0.13秒。
我们可以通过调整R6、R7的数值来调整延时的长度。事实上,8位计算机中,R6之类的工作寄存器地址最大只能放下255的十进制数值,因此要通过上述程序达到更长的延时是办不到的。
那怎么办呢?
我们可以再增加一个R4,让上述的程序最多可以循环255遍,这样,0.13秒的200多倍就是30秒上下了,不够的话再增加循环,又可以扩大200多倍,当然,工作寄存器的数量是有限的,因此这个延时程序也是有限的,如果还不够用怎么办呢,就目前我所学的知识,只能在母程序里面设置循环了,也就是让这个子程序在母程序里面继续循环
评论