找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机延时函数疑问

[复制链接]
跳转到指定楼层
楼主
ID:1065550 发表于 2023-4-17 13:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.void delay(uint x)           //延时函数
{
     uint i,j;
         for(i=x;i>0;i--)
            for(j=0;j<110;j++);  
}
2.void Delay(unsigned int k)                //@11.0592MHz
{
        unsigned char i, j;

for(;k>0;k--)
        i = 2;
        j = 103;
                do
                {
         while (--j);
        } while (--i);
}
想问问for循环和do循环有什么区别,下面一个是stc里面的延时函数。
同时问问为什么第二个能延时1ms?i和j都代表什么?

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

使用道具 举报

沙发
ID:883242 发表于 2023-4-17 15:26 | 只看该作者
具体到你的代码,for和while循环没有区别。i和j代表延迟时间。
回复

使用道具 举报

板凳
ID:584814 发表于 2023-4-17 16:06 | 只看该作者
实际上这些所谓的延时就是让系统空转,由于不同的芯片在不同的主频下速度不同,如果要非常精确的延时你懂的(通常用外接晶振+示波器辅助)。
两者最直观的区别是:for循环是先判断后执行,do循环是先执行后判断。
回复

使用道具 举报

地板
ID:1065550 发表于 2023-4-18 13:04 | 只看该作者
man1234567 发表于 2023-4-17 16:06
实际上这些所谓的延时就是让系统空转,由于不同的芯片在不同的主频下速度不同,如果要非常精确的延时你懂的 ...

明白了
回复

使用道具 举报

5#
ID:1065550 发表于 2023-4-18 13:07 | 只看该作者
Hephaestus 发表于 2023-4-17 15:26
具体到你的代码,for和while循环没有区别。i和j代表延迟时间。

那他这个i和j怎么算出来延时1ms的呢?
回复

使用道具 举报

6#
ID:883242 发表于 2023-4-18 13:24 | 只看该作者
Mang0 发表于 2023-4-18 13:07
那他这个i和j怎么算出来延时1ms的呢?

不用算,实测就行了。
回复

使用道具 举报

7#
ID:291668 发表于 2023-4-18 13:46 | 只看该作者
仿真的时候看一下下边运行时间,执行每条语句应该有时间显示,从而估算变量的数值
回复

使用道具 举报

8#
ID:155507 发表于 2023-4-18 14:33 | 只看该作者
毫秒级延时直接用定时器
看性能需要,性能高要求的用中断吧,别让他傻等,本来51性能就不好,傻等的话更没效率了
还有硬件不同的情况,就需要重新实测了。比如晶振频率不同,CPU内核速度不同,STC8H单片机就比STC15快了很多了比89系列快了十几倍了。
回复

使用道具 举报

9#
ID:1045628 发表于 2023-4-18 14:53 | 只看该作者
强制延时不可靠,不同单片机频率不一样这个i,j的值就会不一样,一般可以用示波器测量翻转的IO口来测出i,j的值,还有一个风险点,强制延时可能会被中断干扰,精确延时应该用定时器进行延时
回复

使用道具 举报

10#
ID:401564 发表于 2023-4-18 22:09 | 只看该作者
1,长延时不要用软件来进行延时,要学会用定时器
2,如果是简单程序,不想折腾,可以直接复制STC下载器的代码,那个很准确的
3,就算是一样品牌的单片机,就像STC,不同型号单片机之间,一样的C代码,延时的时间都是不一样的
4,C语言的循环和实际的延时时间没有什么对等的关系,不存在"怎么计算延时"这一说法,除非是单片机公司专用的编译环境提供的延时函数,像PIC这样的,它就有专用的延时函数
回复

使用道具 举报

11#
ID:633522 发表于 2023-4-19 01:21 来自手机 | 只看该作者
并没有什么区别
回复

使用道具 举报

12#
ID:10193 发表于 2023-4-19 08:59 | 只看该作者
机器周期、指令周期、时钟周期这些了解一下,你就明白了
回复

使用道具 举报

13#
ID:587810 发表于 2023-4-19 10:35 | 只看该作者
for是知道循环次数的情况下使用,while是不知道循环次数的情况下用,for是执行完循环继续执行其他指令,while是不满足循环条件才退出执行,如果满足循环条件则一直执行循环
回复

使用道具 举报

14#
ID:1065550 发表于 2023-4-19 15:19 | 只看该作者
谢谢各位的解答,统一表达一下谢意
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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