完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
第一个:
dlynum=100; while((sgn==0)&&(dlynum>0)) { dlynum--; DelayMs(1); //一个延时0.14ms的子函数 } 第二个: dlynum=1000; while((sgn==0)&&(dlynum--)); 目的是当sgn==0一直不变的话,超过10ms以上便跳出while语句,防止程序卡死。第一个是别人写的,可用,而且延时的效果就是0.14ms*100;第二个是我自己写的,在keil调试的时候运行完这段需要12ms,可是运行在单片机里却没有延时作用,我调试的时候晶振频率已经改成开发板的晶振了。。。 现在我很不理解啊,第一个在执行while等语句的时候难道不耗时间吗?如果说while等语句执行的时间很少,可以忽略,那为什么第二个在调试的时候sec长达12ms?望高人指点 |
|
相关推荐
10个回答
|
|
1000次那个,while执行一次是12us,1000次刚好是12ms啊。。。
|
|
|
|
|
|
|
|
我要求的延时只要10ms以上就可以了。可是1000次那个写入单片机后却没有延时效果。。
|
|
|
|
我就是在keil调试的。我要求的延时只要10ms以上就可以了,所以谁长谁短无所谓,只要到10ms就可以。可是第二个写入单片机后却没有延时效果。。。。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
可以用for语句 嵌套
如下void delay1ms(void) //误差 0us { unsigned char a,b,c; for(c=1;c>0;c--) for(b=142;b>0;b--) for(a=2;a>0;a--); } |
|
|
|
你的dlynum是什么数据类型?
|
|
|
|
你第二个程序dlynum和第一个程序dlynum的数据类型是不是一样的,如果你第一个程序的dlynum是CHAR类型,第二个是long int 类型,也就是说一个是8位,一个是16位。51是8位的,那C语言汇编时,WHILE语句生成的代码是不一样的,很显然第二个WHILE执行时间比第一个长很多。如果你两个都是CHAR类型,那第二个数据实际上dlynum=1000%256,烧到单片机里,延时时间就很短了,几乎没有延时。如果如果你两个都是long int 类型,你第一个程序延时绝对不止14ms
|
|
|
|
只有小组成员才能发言,加入小组>>
690 浏览 0 评论
1105 浏览 1 评论
2473 浏览 5 评论
2807 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2644 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
652浏览 9评论
648浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
779浏览 6评论
627浏览 5评论
668浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 01:47 , Processed in 1.250634 second(s), Total 99, Slave 79 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号