void delay ()
{
int x;
char y;
for(x=1000;x>0;x--)
{ for(y=100;y>0;y--)};
}
x每减一次,y减100次,x一共减少1000次
这个子程序的延时时间是:
1000100=100ms(默认时间是us)
如果想更精确的话,可以用软件进行调试
for语句下面的{}还可以省略
有不清的可以多交流MOV R2,#0AH 执行了1次 每次需要1个机器周期 共需要11个机器周期
MOV R3,#0FFH执行了10次个 1 101
DJNZ R3,D3执行了25510次 2 25502
DJNZ R2,D2执行了1次 2 102
RET 执行一次 2 12
一共需要5133个机器周期,如果用12M晶振 则执行一个机器周期需要1US,那么一共需要5133US
还有不用算的方法,运行一下,编译环境下有记时的,将光标放到程序后,运行到光标处;按12M晶振普通51
;TOTAL=200000t,1t=1us,T=02s
DELAY: ;LCALL 调用 2
MOV R3,#4 ;1
DELAY1:
MOV R4,#101 ;14
DELAY2:
MOV R5,#246 ;11014
DJNZ R5,$ ;22461014
DJNZ R4,DELAY2 ;21014
DJNZ R3,DELAY1 ;24
NOP ;1
NOP ;1
NOP ;1
RET ;2
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)