延时子程序详解

延时子程序详解

延时子程序(500ms)


DELAY: MOV R3,#50 ; 将立即数50载入R3寄存器中,使R3的值等于50,R3=50
D1: MOV R4,#20 将立即数20载入R4寄存器中,使R4的值等于20,R4=20
D2: MOV R5,#248 将立即数248载入R5寄存器中,使R5的值等于20,R5=248
DJNZ R5,$ 指令DJNZ R5,$的意思是:将R5的值减1,不等于零(0)则重新执行本行指令——继
续将R5减1并与0比较。

DJNZ R4,D2 指令DJNZ R4,D2的作用是:将R4的值减1,不等于零(0)则跳回标号D2处继续执行
DJNZ R3,D1 指令DJNZ R3,D2的作用是:将R3的值减1,不等于零(0)则跳回标号D1处继续执行
RET ; 返回主程序
END ; 汇编程序结束

总解:由于R4预先装入了20,所以这4条指令共花去了20*(2+2*248+2)+2=10002(个)机器周期。如果使用的是12MHZ的晶振,1个机器周期为1us(微秒),则以上这些程序所花的时间为10002*1us=10.002ms,约等于10ms.则全部又由于R3也先预先装入了50,所以这程序延时为50*10ms=500ms.

要想改变延时时间的长度,只要改变R3的预装数值即可。R3=100时,为1秒。

R3=600时,为6秒。
R3=6000时,为60秒。依此类推。。。。。。
当然,改变R4,R5的值也可以改变延时时间的长度,但要进行相应的计算。

相关文档
最新文档