找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3863|回复: 13
打印 上一主题 下一主题
收起左侧

关于单片机延时程序的小问题

  [复制链接]
跳转到指定楼层
楼主
ID:366764 发表于 2018-10-18 20:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void delay10ms(void)  
{
    unsigned char a,b,c;
    for(a=1;a>0;a--)
        for(b=38;b>0;b--)
            for(c=130;c>0;c--);

void delay10ms(void)  
{
    unsigned char a,b;
    for(a=38;a>0;a--)
        for(b=130;b>0;b--);
  求解释这俩有什么本质上的区别吗?   同样都是延时一样的时间,但这两种写法都有见过,不知道只是个人习惯上的问题,还是有什么更专业的区别。



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:213173 发表于 2018-10-19 07:40 | 只看该作者
1. T=a*b*c
2. T=a*b
回复

使用道具 举报

板凳
ID:164602 发表于 2018-10-19 08:39 | 只看该作者
其实是一样的。
第一种情况,多一个循环,但只循环一次,与第二种相差的时间可以忽略。
回复

使用道具 举报

地板
ID:155507 发表于 2018-10-19 10:57 | 只看该作者
都是软件延时,阻塞延时,就相当于CPU在空跑。

1. 新手的程序都是While大循环里,而且代码执行时间也比较短,这个时候用软件延时看不出来明显的差异。

2. 一般不建议使用软件延时,因为CPU的资源是有限的,软件延时就相当于CPU在空跑,当程序比较庞大的时候,许多程序处理不过来,根本没有多余的时间给你去延时。

3. 可以用定时器,如定时1ms,然后把程序分为1ms的任务,2ms的任务,4ms的任务,分时去操作,当你需要延时的时候,就在里边搞个计数,时间到再去执行。

回复

使用道具 举报

5#
ID:401564 发表于 2018-10-19 17:02 | 只看该作者
本质上是有区别的,就看你单片机的时钟频率了
前面一个函数用了三个变量,在编译的时候,单片机延时会用到三个地址,后面的函数用了两个变量,同理,编译时就用到两个地址。这样一来,前面一个函数就比后面的函数多用几个时钟来初始化那多出来的一个地址,至于会用到几个时钟,不知道,也许就现一两个时钟吧。
如果你晶振是MHZ级别的,那区别也就几uS或者0.几uS,对于100mS的延时来说,没有什么差别,如果你用的是KHZ级别的时钟,那相差就是0.几mS了。
只要有指令,编译器就会编译,就算是没有什么用的指令,单片机也一样的执行,一样的用上一定的时间。
回复

使用道具 举报

6#
ID:300212 发表于 2018-10-19 22:20 来自手机 | 只看该作者
没有区别,你这个延迟函数应该是软件一键生成的,这是方便一键生成而加的循环,实际上道理都是一样的
回复

使用道具 举报

7#
ID:412533 发表于 2018-10-19 23:44 | 只看该作者
其实也很简单啊,复制就行,比如这个说。
回复

使用道具 举报

8#
ID:412575 发表于 2018-10-20 08:35 | 只看该作者
第一种for循环只执行一次,写不写意义不大,只占用一个一个执行周期,理论上讲第一种比第二种延时时间长一点,用示波器可以看出两个信号的微小区别
回复

使用道具 举报

9#
ID:412601 发表于 2018-10-20 09:43 来自手机 | 只看该作者
多了一个地址出来
回复

使用道具 举报

10#
ID:357520 发表于 2018-10-20 11:29 | 只看该作者
第二种可以少写一句话,看着也舒服
回复

使用道具 举报

11#
ID:412662 发表于 2018-10-20 11:52 | 只看该作者
几乎没有差别
回复

使用道具 举报

12#
ID:412694 发表于 2018-10-20 13:40 | 只看该作者
没有区别,都是通过来执行这些for循环来占用时间,从而达到一定延时的效果
回复

使用道具 举报

13#
ID:147024 发表于 2018-10-20 23:04 | 只看该作者
1*38*130与38*130的区别,你说有区别没有
回复

使用道具 举报

14#
ID:412964 发表于 2018-10-21 08:31 | 只看该作者
为啥写这么复杂,写i<N  不是更好么?简单。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表