a就是需要延迟的毫秒数(也可能是其他单位)。
就敏巧是说,执行 for(i=0i<600i++)的时间应该是一桥顷键个单位长度(可能为1ms);
这样,你在调用的时候,赋值给a多少值,实际就是延时多少毫秒。
例如,延乎颤时10ms,就用
delay(10)
延时1ms,就用
delay(1)
这是调用一个延时10毫秒的延时子程序 当然,子程序的名运裂告字可旁明以自己定 DELY1MS: 这个名字一定要与调用中出现的名字一样,否则的话,调用的就不是这个子程序了
DELAY10MS:
MOV R2,#20
DELAY10MS1:
MOV R3,#250
DJNZ R3,$
DJNZ R3,DELAY10MS1
RET
这是调用一个延时20毫秒的延时子程序 当然,子程序的名字可以自己定 DELY1MS: 这个名字一定要与调用中出现的名字一样,否则的话,调用的就不是这个子程序了
DELAY20MS:
MOV R2,#40
DELAY20MS1:
MOV R3,#250
DJNZ R3,$
DJNZ R3,DELAY20MS1
RET
RETRET的作用是子程序返回。调用一个子程序,当单片机执行到RET语句的时候,单片机就会返回到调用的地方并继续向下执行。
下面给你一个例程:
闪烁源羡灯
ORG 00H
AJMP START
ORG 30H
START:
MOV P0,#00H
LCALL DELY调用延时子程序
MOV P0,#0FFH
LCALL DELY调用延时子程序
AJMP START
DELY:
MOV R7,#250
DL1:MOV R6,#250
DJNZ R6,$
DJNZ R7,DL1
RET
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)