找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

单片机for延时程序 大神问个初学问题

查看数: 7515 | 评论数: 28 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2023-8-22 18:46

正文摘要:

51单片机void delay (void) {uint i; for(i=0;i<25530;i++;); } 能一条条解释下吗?感谢!! 是什么意思

回复

ID:517951 发表于 2023-8-31 07:18
for(i=0;i<25530;i++;) ;这条语句里i++;多了一个;
ID:1092275 发表于 2023-8-30 15:13

延时的for循环就是对设定的计数进行计数,直到计数完毕。
ID:1088383 发表于 2023-8-30 10:28
we199999 发表于 2023-8-23 00:28
还有这个麻烦您了。为啥写的这个流水灯只有一个灯亮?就在图片蓝色行delay那里就结束了。进行不了下一步 ...

这个可能是delay函数出问题了吧
ID:1040201 发表于 2023-8-28 16:34
还是买个开发板  我看看教程
ID:1092048 发表于 2023-8-27 21:35
// 使用for循环来实现延迟 for(i=0; i<25530; i++) // 循环次数为25530次 {     // 空循环,不执行任何操作 }
ID:1092048 发表于 2023-8-27 21:34
定义1个无符号的整型变量i,
ID:1064915 发表于 2023-8-25 14:32
51单片机利用for语句嵌套实现简单的延时1s功能

名词解释:

(1)时钟周期。定义为时钟频率的倒数,本例使用12MHz的时钟频率,它的时钟周期大约就是1/12μs。

(2)机器周期。单片机的基本操作周期,STC89C51系列的单片机来说,一个机器周期由12个时钟周期组成,也就是1μs。

(3)指令周期。指的是单片机执行一条指令需要的时间,一个指令周期需要1~4个机器周期。一个for循环需要8个指令周期。

假设单片机采用了12MHz的时钟频率,利用for语句嵌套实现简单的延时1s功能。

unsigned int i;

Unsigned char j; //定义两个循环变量i、j

for (i = 1000; i > 0; i--) //外层循环1000次

for (j = 124; j > 0; j--) ; //内层循环124次

内层循环代码含义:

在12MHz的时钟频率下,for循环124次所消耗的时间ntime是:

ntime= 124次 × 8个指令周期 × 1μs = 992μs

也就是内循环延时大概为1ms。

那么,全部执行完成花费的总时间T大约是:

T = 1000 × ( ntime + 8 × 1 ) = 1000 ms=1s,基本上达到延时1s的功能。这个延时程序中外层循环的变量是多少,整个for嵌套语句就延时大约多少毫秒,在以后的应用当中,会经常用到这个程序进行不需要精确时间的延时。

比如,要实现4s的延时,就把i=1000修改为i=4000就可以了。
ID:420836 发表于 2023-8-25 07:03
延时的for循环就是对设定的计数进行计数,直到计数完毕。
ID:1091757 发表于 2023-8-24 17:13
sttt300 发表于 2023-8-24 09:23
这不可能,可能中间有这个delay函数,你再看看是不是看漏了
或者编译一下,有没有报错
我感觉你不是来 ...

刚学,我看了是进行宏定义了
ID:596109 发表于 2023-8-24 15:08
we199999 发表于 2023-8-23 11:42
我看有的教程只有声明,没有定义是怎么做到实现效果呢

这种也有延时效果的
ID:596109 发表于 2023-8-24 15:07
we199999 发表于 2023-8-23 00:28
还有这个麻烦您了。为啥写的这个流水灯只有一个灯亮?就在图片蓝色行delay那里就结束了。进行不了下一步 ...

第12行有问题,会影响后面的代码
ID:647261 发表于 2023-8-24 09:23
we199999 发表于 2023-8-23 18:16
有的只有声明没定义咋也能运行呢?也没看到宏定义

这不可能,可能中间有这个delay函数,你再看看是不是看漏了
或者编译一下,有没有报错
我感觉你不是来问问题的,是来找老师的吧?这也太基础了吧,连入门都不算
ID:592807 发表于 2023-8-24 09:04
cnfloatleaf 发表于 2023-8-22 23:24
void delay (void)    //定义一个子程序, void 没有返回值
{uint i;                  // 定义一个变量, ...

你就宠着她吧,符号都错了 ++   和 +  +能一样吗

51hei截图_20230824090326.png (17.92 KB, 下载次数: 52)

51hei截图_20230824090326.png
ID:1091796 发表于 2023-8-23 11:57
基本定义/主要内容:该代码段是一个名为"delay"的函数,它没有返回值(void)。函数中包含一个循环,使用一个无符号整数变量i进行计数,循环的次数为25530次。
ID:1091757 发表于 2023-8-23 11:44
mengzhixinheng 发表于 2023-8-23 07:21
n被不断被初始化了,你这样也不是流水灯的效果

可以的,就是延时我换了个方法就出问题,之前是能实现效果
ID:1091757 发表于 2023-8-23 11:42
201936010427 发表于 2023-8-23 10:21
延时函数有问题,延时函数就是为了让单片机在那里空运行,你现在只定义了一个延时函数,却没有定义延时函 ...

我看有的教程只有声明,没有定义是怎么做到实现效果呢
ID:1084825 发表于 2023-8-23 10:21
we199999 发表于 2023-8-23 00:28
还有这个麻烦您了。为啥写的这个流水灯只有一个灯亮?就在图片蓝色行delay那里就结束了。进行不了下一步 ...

延时函数有问题,延时函数就是为了让单片机在那里空运行,你现在只定义了一个延时函数,却没有定义延时函数中的循环内容,void delay (void)
{uint i;
for(i=0;i<25530;i++;);
}
ID:899081 发表于 2023-8-23 08:27
we199999 发表于 2023-8-23 00:28
还有这个麻烦您了。为啥写的这个流水灯只有一个灯亮?就在图片蓝色行delay那里就结束了。进行不了下一步 ...

你的delay函数里面都是空的没内容。
void   delay  (uint  ms)
{
unsigned char i, j,m;
   m=ms;
     while(m--)
      {
        _nop_();
        _nop_();
        _nop_();
        i = 11;
        j = 190;
        do
        {
                while (--j);
        } while (--i);
    }
}
ID:1061404 发表于 2023-8-23 08:26
猜测是delay()函数有问题,把delay函数贴出来看看吧
ID:89515 发表于 2023-8-23 07:30
看错了,不好意思
ID:89515 发表于 2023-8-23 07:21
n被不断被初始化了,你这样也不是流水灯的效果
ID:1091757 发表于 2023-8-23 00:26
cnfloatleaf 发表于 2023-8-22 23:24
void delay (void)    //定义一个子程序, void 没有返回值
{uint i;                  // 定义一个变量, ...

多谢大佬
ID:1085441 发表于 2023-8-22 23:24
void delay (void)    //定义一个子程序, void 没有返回值
{uint i;                  // 定义一个变量,无符号整形数
for(i=0;i<25530;i++;);//一个循环语句,i从0一直加到25530,结束循环
}
ID:1091757 发表于 2023-8-22 22:34
Hephaestus 发表于 2023-8-22 21:31
这已经是最最最基础的c语言问题,连这个都看不懂实在是没有讲解的必要了。

今天刚学哈哈
ID:883242 发表于 2023-8-22 21:31
这已经是最最最基础的c语言问题,连这个都看不懂实在是没有讲解的必要了。
ID:276663 发表于 2023-8-22 21:26
for延时
上面的文章讲的很详细

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

Powered by 单片机教程网

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