完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
小白学习单片机中,再看教程的时候,看到这个代码:
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循环来定义延时。 请大神解惑! |
|
相关推荐
9个回答
|
|
云汉达人
单片机的延时,都是通过让单片机一直执行某些“无用的”代码,比如,i++,每条指令的执行都会占用CPU的一段时间(具体多少时间,就看你的指令转换为汇编后,指令周期是多少) |
|
|
|
云汉达人
猫Sin 发表于 2016-10-13 16:22 嗯嗯,是这么理解的~ |
|
|
|
Eagleson 发表于 2016-10-13 16:03 换句话说 ,第二个for循环仅仅是做一个时间参照,然后再与第一个for结合来确定最终的延时时间? 这样理解? |
|
|
|
你仔细看看for语句的用法,这种就是在第一for语句成立的时候执行第二个for语句,第二个执行完后,再执行一次第一个看看条件是否成立,如果成立就再执行一次第二个for循环,这个就是说第二个for要执行500次,第二个for循环自己j--循环110次,那就是说要执行500个110次的自减减。
|
|
|
|
|
|
|
|
云汉达人
不用讲这两个for是怎么运行的吧,相信你一写是了解的,内部的for执行xms次,也就是延时x ms了。 可以看到你使用的函数名是delayms,也就是延时1ms的函数,函数的参数是延时的毫秒数,为了这个目的,一个for用于延时1ms,一个for 用来控制延时几个ms。 for或是while的延时函数与单片机使用的晶振、PLL是有直接的关系的,其计算方法也是有关系密切的。 这里你可以看到内部for循环使用的是 i - - 的方式,如果看汇编的话,你会看到 - - 操作相比于++操作多余的指令更少,对于延时的精度更高。 for延时原理就是让单片机进行空运算,其实这种方式是比较浪费单片机资源的,最好的方法还是用定时器。 |
|
|
|
其实说白了就是通过两个for循环浪费CPU的执行时间。j变量代表1ms需要CPU循环j次,i代表设置的循环ms数。
|
|
|
|
我学习时也遇到这种问题,楼上的回答重新学习了
|
|
|
|
for循环就是在哪儿不停地对变量赋值累加,占据时间,达到延时的目的~
|
|
|
|
只有小组成员才能发言,加入小组>>
709 浏览 0 评论
1116 浏览 1 评论
2494 浏览 5 评论
2833 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2675 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
661浏览 9评论
672浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
789浏览 6评论
634浏览 5评论
679浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 12:28 , Processed in 1.451555 second(s), Total 89, Slave 79 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号