• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

关于延迟代码解释

猫Sin 2016-10-13 浏览量:1872
小白学习单片机中,再看教程的时候,看到这个代码:

void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i++)//i=xms 即延时约xms毫秒
for(j=110;j>0;j--)
}



在主程序中调用了延时命令。

delayms(500)

然后看到上面定义的时候,想不通为什么需要使用两个for循环来定义延时。


请大神解惑!
1 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 然后看到上面定义的时候,想不通为什么需要使用两个for循环来定义延时。
    如果你使用一个循环,那你传入500MS,那不是只空转500次,500次肯定是不够500ms的,
    两次循环,相当于500*110,也就是说单片机空转110次,约等于1ms
    • 发布于 2016-10-13
    • 举报
    • 评论 0
    • 1
    • 0

其他答案 数量:9
  • 单片机的延时,都是通过让单片机一直执行某些“无用的”代码,比如,i++,每条指令的执行都会占用CPU的一段时间(具体多少时间,就看你的指令转换为汇编后,指令周期是多少)
    • 发布于2016-10-13
    • 举报
    • 评论 0
    • 1
    • 0

  • 猫Sin 发表于 2016-10-13 16:22
    换句话说 ,第二个for循环仅仅是做一个时间参照,然后再与第一个for结合来确定最终的延时时间?

    这样理 ...

    嗯嗯,是这么理解的~
    • 发布于2016-10-13
    • 举报
    • 评论 0
    • 1
    • 0

  • Eagleson 发表于 2016-10-13 16:03
    单片机的延时,都是通过让单片机一直执行某些“无用的”代码,比如,i++,每条指令的执行都会占用CPU的一段 ...

    换句话说 ,第二个for循环仅仅是做一个时间参照,然后再与第一个for结合来确定最终的延时时间?

    这样理解?
    • 发布于2016-10-13
    • 举报
    • 评论 0
    • 0
    • 0

  • 你仔细看看for语句的用法,这种就是在第一for语句成立的时候执行第二个for语句,第二个执行完后,再执行一次第一个看看条件是否成立,如果成立就再执行一次第二个for循环,这个就是说第二个for要执行500次,第二个for循环自己j--循环110次,那就是说要执行500个110次的自减减。
    • 发布于2016-10-13
    • 举报
    • 评论 0
    • 0
    • 0

  • [postbg]bg3.png[/postbg]不用讲这两个for是怎么运行的吧,相信你一写是了解的,内部的for执行xms次,也就是延时x ms了。

    可以看到你使用的函数名是delayms,也就是延时1ms的函数,函数的参数是延时的毫秒数,为了这个目的,一个for用于延时1ms,一个for 用来控制延时几个ms。

    for或是while的延时函数与单片机使用的晶振、PLL是有直接的关系的,其计算方法也是有关系密切的。

    这里你可以看到内部for循环使用的是 i - - 的方式,如果看汇编的话,你会看到 - - 操作相比于++操作多余的指令更少,对于延时的精度更高。

    for延时原理就是让单片机进行空运算,其实这种方式是比较浪费单片机资源的,最好的方法还是用定时器。
    • 发布于2016-10-13
    • 举报
    • 评论 0
    • 0
    • 0

  • 其实说白了就是通过两个for循环浪费CPU的执行时间。j变量代表1ms需要CPU循环j次,i代表设置的循环ms数。
    • 发布于2016-10-14
    • 举报
    • 评论 0
    • 0
    • 0

  • 我学习时也遇到这种问题,楼上的回答重新学习了
    • 发布于2016-10-14
    • 举报
    • 评论 0
    • 0
    • 0

  • for循环就是在哪儿不停地对变量赋值累加,占据时间,达到延时的目的~
    • 发布于2016-10-16
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

关于延迟代码解释