单片机里的for循环延时函数怎样理解
voiddelay(unsignedintdelay_time)//延时函数{unsignedintj=0;for(delay_time>0;delay_time--){...
void delay(unsigned int delay_time) //延时函数
{
unsigned int j=0;
for(delay_time > 0;delay_time--)
{
for(j=0;j < 200;j++);
}
} 展开
{
unsigned int j=0;
for(delay_time > 0;delay_time--)
{
for(j=0;j < 200;j++);
}
} 展开
展开全部
第一个for完成对delay_time参数的控制,即共循环多少次内部循环
第二个for(简野内部循环),完成对j从0到199的控制,共循环200次。
翻译成汇编就是:烂咐晌
(R0为传递参数饥锋)
DELAY:
MOV R1,#200
DJNZ R1,$
DJNZ R0,DELAY
RET
第二个for(简野内部循环),完成对j从0到199的控制,共循环200次。
翻译成汇编就是:烂咐晌
(R0为传递参数饥锋)
DELAY:
MOV R1,#200
DJNZ R1,$
DJNZ R0,DELAY
RET
追问
那第一个for语句与第二个for语句之间是第一包含第二的关系吗?他是怎样实现延时的?
追答
是的,第一个包含第二个,至于怎么实现延时的就更好理解了,单片机每执行一步都要花费一定时间的,第二个循环里for(j=0;j < 200;j++); 共执行了200个空操作,也就是要花200*T的时间,这里的T是一次空操作需要的时间,注意这里的“空”操作与单片机的“NOP”不要等同来看,对51而言你哥“NOP”只花一个机器周期,但C的一个空循环操作则不然,至少包含一个跳转指令,所以时间要长一些。第一个循环共循环delay_time次,所以延时时间大概为:delay_time*200*T.
展开全部
第一个for完成对delay_time参数的控制,即共循环多少次内部循环
第二个for(简野内部循环),完成对j从0到199的控制,共循环200次。
翻译成汇编就是:烂咐晌
(R0为传递参数饥锋)
DELAY:
MOV R1,#200
DJNZ R1,$
DJNZ R0,DELAY
RET
第二个for(简野内部循环),完成对j从0到199的控制,共循环200次。
翻译成汇编就是:烂咐晌
(R0为传递参数饥锋)
DELAY:
MOV R1,#200
DJNZ R1,$
DJNZ R0,DELAY
RET
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的第一个for是条件语句吧for(delay_time > 0;delay_time--)!第二个forfor(j=0;j < 200;j++); 是一个计数循环!可以这么理解:j的初值为0,如果小于200,誉历告则j加一。当j=200时庆明,跳出循环。。。。。。。。烂敏。。。仅供参考
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
就是一个死等待执行完一个时间段,类似N个NOP即可
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询