找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 11507|回复: 33
收起左侧

单片机延时函数为什么要用两个变量i ;j来循环?

  [复制链接]
ID:233951 发表于 2017-9-18 20:11 | 显示全部楼层 |阅读模式
51单片机延时函数
delay(uchar t)
{
   uchar i,j;
   for(i=0;i<t;i++)
   for(j=0;j<t;j++);
}
为什么要用两个变量i ;j来循环?
回复

使用道具 举报

ID:232956 发表于 2017-9-19 00:00 | 显示全部楼层
这里只是你写的延时函数,这样写就这样用。

评分

参与人数 1黑币 +10 收起 理由
admin + 10 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:232956 发表于 2017-9-19 00:03 | 显示全部楼层
这里只是你写的延时函数而已,这样写就这样用。
你也可以这样写延时函数:
typedef unsigned int u8;
void delay(u8 i)
{
      while(i--);
}

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:170536 发表于 2017-9-19 08:06 | 显示全部楼层
一个外循环一个内循环,为了增加延时呀
回复

使用道具 举报

ID:164602 发表于 2017-9-19 08:11 | 显示全部楼层
第一:循环变量是unsigned char型的,一次循环不够时间
第二:可以调节变量的值,形成不同的延时时间
第三:还可以再加循环的,谁说只能是两个变量?
回复

使用道具 举报

ID:193818 发表于 2017-9-19 08:49 | 显示全部楼层
你试试用一个能不能控制到你想要的延时时间
回复

使用道具 举报

ID:234038 发表于 2017-9-19 09:36 | 显示全部楼层
一个变量延时太短  再加一个延时更长
回复

使用道具 举报

ID:234051 发表于 2017-9-19 10:09 | 显示全部楼层
不一定非要用i,  j  也可以用x、y来循环
回复

使用道具 举报

ID:234057 发表于 2017-9-19 10:20 | 显示全部楼层
可以写成不同的延时时间吧
回复

使用道具 举报

ID:231508 发表于 2017-9-19 10:22 | 显示全部楼层
与你的主频和延时时长有关。不是一定要i,j的。延时时间短完全可以只要一个i或j(单个变量)。还可以用定时器来定时。
回复

使用道具 举报

ID:230239 发表于 2017-9-19 14:04 | 显示全部楼层
增加延时用
回复

使用道具 举报

ID:234114 发表于 2017-9-19 14:51 | 显示全部楼层
只是例程习惯,一般不去深究
回复

使用道具 举报

ID:234145 发表于 2017-9-19 16:05 | 显示全部楼层
时间短的话,一个变量循环也可以。
回复

使用道具 举报

ID:85241 发表于 2017-9-19 20:56 | 显示全部楼层
经验延时,循环嵌套是为了次数更多
回复

使用道具 举报

ID:223400 发表于 2017-9-19 22:14 | 显示全部楼层
你这样写代表延时t*t微秒,是你输入的平方。
回复

使用道具 举报

ID:223400 发表于 2017-9-19 22:17 | 显示全部楼层
你的函数延时t*t微秒,如果只有一个函数是延时t微秒。
回复

使用道具 举报

ID:421998 发表于 2018-12-2 11:41 | 显示全部楼层
增加延时时间,i*j这样时间就更长了,效果都是一样的
回复

使用道具 举报

ID:437643 发表于 2018-12-2 14:16 | 显示全部楼层
可以只用一个啊,时间段一些
回复

使用道具 举报

ID:437246 发表于 2018-12-2 15:50 | 显示全部楼层
i,j,两者互乘,增加延时
回复

使用道具 举报

ID:229016 发表于 2018-12-2 16:55 | 显示全部楼层
这个延时涉及到执行for循环占用机器周期的问题,你也可以不这样写,另外你也可以用stc-isp设定好晶振频率自动生成延时函数
回复

使用道具 举报

ID:437745 发表于 2018-12-2 17:11 | 显示全部楼层
首先,你必须搞清楚延时函数的原理,它实际上只是仅仅执行一些,没有实质性影响的所谓“无意义指令”。两重for的作用:简单的说,就像高中数学中的“乘法原理”一样,这样可以很轻易的迅速增加上述“无意义指令”的数目。这么解释,不知道你看明白了没。 
回复

使用道具 举报

ID:437780 发表于 2018-12-2 17:22 | 显示全部楼层
延时时长=循环的指令时间*循环次数
回复

使用道具 举报

ID:81420 发表于 2018-12-2 19:00 | 显示全部楼层
两重循环可以使延迟的实践大为增加,但也要消耗大量的CPU时间,建议用定时器。
回复

使用道具 举报

ID:81420 发表于 2018-12-2 19:01 | 显示全部楼层
循环可以使延迟的实践大为增加,但也要消耗大量的CPU时间,建议用定时器。
回复

使用道具 举报

ID:428638 发表于 2018-12-2 19:13 | 显示全部楼层
习惯问题
回复

使用道具 举报

ID:403593 发表于 2018-12-2 19:21 | 显示全部楼层
这两个参数名字随便起,a,b,c,d,l,m,n,x,y都可以,这只是个名字而已
回复

使用道具 举报

ID:436189 发表于 2018-12-2 20:07 | 显示全部楼层
增加延时
回复

使用道具 举报

ID:336652 发表于 2018-12-2 23:29 | 显示全部楼层
效要和一个别一样的
回复

使用道具 举报

ID:345562 发表于 2018-12-3 08:28 | 显示全部楼层
就两个名字而以,什么都行,只要不是关键字。
回复

使用道具 举报

ID:429805 发表于 2018-12-3 14:04 | 显示全部楼层
双重循环增加时间的效果
回复

使用道具 举报

ID:438665 发表于 2018-12-3 19:59 | 显示全部楼层
i和j在C语言中常用作循环变量;单片机程序用C语言编写,故也用这i和j循环;
回复

使用道具 举报

ID:438665 发表于 2018-12-3 20:01 | 显示全部楼层
i和j是C语言常用的循环变量;单片机程序用C语言编写,故也用这两个变量循环;两个循环为了增加时间
回复

使用道具 举报

ID:790170 发表于 2020-6-28 07:24 | 显示全部楼层
alex_wendell 发表于 2018-12-2 17:11
首先,你必须搞清楚延时函数的原理,它实际上只是仅仅执行一些,没有实质性影响的所谓“无意义指令”。两重 ...

谢谢解释,理解了!
回复

使用道具 举报

ID:748788 发表于 2020-6-28 15:58 | 显示全部楼层
每个程序员都有自己的编程习惯。写这个延时函数的程序员恰好不愿意写大数。另外大数容易写错,拆成两个数可以避免出错,是个不错的编程习惯
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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