找回密码
 立即注册

QQ登录

只需一步,快速开始

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

有段单片机延时代码,请大神指导是如何计算时间的?

[复制链接]
跳转到指定楼层
楼主
20黑币
各位大神:小弟初接触单片机,以下一段代码,其中的i:及j: 及K:是怎么算出来的?求计算方法,或求专门的计算软件,谢谢。


void Delay100ms()                //@11.0592MHz
{
        unsigned char i, j, k;

        i = 5;
        j = 52;
        k = 195;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}



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

使用道具 举报

沙发
ID:161164 发表于 2021-8-31 16:50 | 只看该作者
可用STC_ISP自动生成代码


评分

参与人数 1黑币 +20 收起 理由
szbadd + 20

查看全部评分

回复

使用道具 举报

板凳
ID:624769 发表于 2021-8-31 19:04 | 只看该作者
没有计算方法,C语言你就不要考虑了,除非你懂汇编。
然后查询该单片机的手册,查到DJNZ的机器周期,MOV的机器周期,然后根据晶振速率,算出需要多少个机器周期,然后算出用多少个DJNZ, 要精准的话,还要算上 MOV时间, RET时间, 和 CALL的时间。
回复

使用道具 举报

地板
ID:624769 发表于 2021-8-31 19:08 | 只看该作者
STC的单片机,你可以用他的下载器自带的工具生成,其他的单片机,你能你把在KEIL上,加载该MCU的信息后,写一个大概的延时,然后DEBUG跑一下看看多少时间,在调整调整到你需要的时间。
回复

使用道具 举报

5#
ID:883242 发表于 2021-8-31 20:08 | 只看该作者
这个不是算出来的,而是测出来的。
回复

使用道具 举报

6#
ID:401564 发表于 2021-8-31 20:49 | 只看该作者
不同的单片机环境有不同的办法
如果是8051,在STC下载器那有现成的,选择好单片机型号和晶振,复制就可以了
PIC就有专门的uS,mS延时函数,程序开始的时候设定好晶振频率,直接调用函数就行,这比较省事
回复

使用道具 举报

7#
ID:624769 发表于 2021-8-31 20:53 | 只看该作者
Hephaestus 发表于 2021-8-31 20:08
这个不是算出来的,而是测出来的。

你还真说错了,这个就是算出来的。根据不同型号的芯片,while 语句所对应的汇编代码 DJNZ的周期数,然后计算出来的数值。
回复

使用道具 举报

8#
ID:86450 发表于 2021-8-31 21:19 | 只看该作者
一般我是测出来
回复

使用道具 举报

9#
ID:824397 发表于 2021-8-31 21:32 | 只看该作者
lkc8210 发表于 2021-8-31 16:50
可用STC_ISP自动生成代码

大神,我明白,原来是这样算出来的,太感谢了,
回复

使用道具 举报

10#
ID:824397 发表于 2021-8-31 21:33 | 只看该作者
188610329 发表于 2021-8-31 19:04
没有计算方法,C语言你就不要考虑了,除非你懂汇编。
然后查询该单片机的手册,查到DJNZ的机器周期,MOV的 ...

谢谢你的回复,论坛有你更精采
回复

使用道具 举报

11#
ID:824397 发表于 2021-8-31 21:34 | 只看该作者
188610329 发表于 2021-8-31 19:08
STC的单片机,你可以用他的下载器自带的工具生成,其他的单片机,你能你把在KEIL上,加载该MCU的信息后,写 ...

是的,谢谢你的回复,论坛有你更精采
回复

使用道具 举报

12#
ID:824397 发表于 2021-8-31 21:34 | 只看该作者
Hephaestus 发表于 2021-8-31 20:08
这个不是算出来的,而是测出来的。

谢谢你,已解决
回复

使用道具 举报

13#
ID:824397 发表于 2021-8-31 21:35 | 只看该作者
Y_G_G 发表于 2021-8-31 20:49
不同的单片机环境有不同的办法
如果是8051,在STC下载器那有现成的,选择好单片机型号和晶振,复制就可以了
...

嗯,你这个计算出来没有K值,谢谢你
回复

使用道具 举报

14#
ID:824397 发表于 2021-8-31 21:36 | 只看该作者
188610329 发表于 2021-8-31 20:53
你还真说错了,这个就是算出来的。根据不同型号的芯片,while 语句所对应的汇编代码 DJNZ的周期数,然后 ...

谢谢你的参与
回复

使用道具 举报

15#
ID:824397 发表于 2021-8-31 21:39 | 只看该作者
已解决,谢谢各位
回复

使用道具 举报

16#
ID:390416 发表于 2021-9-1 08:19 | 只看该作者
真正搞工程项目设计的,压根就不去计算这种参数的。理由如下:
1、假设在同一个硬件上做测试,单片机CPU指令周期是一致的。那么 变量i、K,存放在data跟存放在XDATA,读写速度能一样?精确计算有意义吗?
2、假设都存放在data,延迟1ms只需要char类型的变量即可完成,但是,延迟100ms必须16位变量,那么执行时间还能照着公式去套算?
3、假设上述条件都一样,计算好的延迟时间是1ms并且误差1%,打开中断之后,延迟时间变成了5毫秒了。误差500%了,精确计算有意义吗?
4、假设上述条件不影响延迟时间,那么,编译器呢?谁敢说编译器不同的优化等级不影响delay的延迟时间?
5、还有硬件不同的情况,就需要重新计算了。比如晶振频率不同,CPU内核速度不同,STC8H单片机就比STC15快了很多了比89系列快了十几倍了。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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