找回密码
 立即注册

QQ登录

只需一步,快速开始

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

请问如何确定一个单片机延时程序的延时时间呢?

[复制链接]
跳转到指定楼层
楼主
ID:796670 发表于 2020-12-29 10:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问如何确定一个晶振12M的单片机程序中延时程序延时的时间呢?
比如说12M晶振,晶振周期1/12微妙,一个机器周期包含12个晶振周期,所以12M晶振时机器周期=12x(1/12)微秒=1微秒。
那么1MS的延时程序为:
void delay(uint z)//延时函数1ms
{
        uint x,y;
        for(x=z;x>0;x--);
                for(y=110;y>0;y--);
}


请问这个y=110里这个110是怎么来的?
谢谢大家指点
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:332444 发表于 2020-12-29 11:35 | 只看该作者
这种延时不需钻牛角,受其他执行影响非常大。
回复

使用道具 举报

板凳
ID:743654 发表于 2020-12-29 11:42 | 只看该作者
110是自己定的,for循环110次,如果要延时1ms=1000us,就是两个for循环总共要循环1000次(110*9)左右,调用延时函数时形参z取9,delay(9);精确的延时需要用到定时器。
回复

使用道具 举报

地板
ID:390416 发表于 2020-12-29 11:52 | 只看该作者
一、不同晶振频率,延迟时间不同。这种计算无意义
二、不同单片机内核,延迟时间不同。这种计算无意义
三、不同的变量长度,延迟时间不同。这种计算无意义
四、变量在不同的存放空间,延迟时间不同。这种计算无意义
五、中断开多开少,延迟时间不同。这种计算无意义
六、工作中调试程序, 肯定不会出现这种计算要求的。
七、看《人人学会单片机》视频教程,学习框架式编程方式,提高你的代码执行效率,让单片机能够更快的执行最多的任务。这才是你们该学的。
回复

使用道具 举报

5#
ID:280000 发表于 2020-12-29 14:52 | 只看该作者
利用单片机的定时器延时就可以
回复

使用道具 举报

6#
ID:809671 发表于 2020-12-29 16:16 | 只看该作者
學而時習之 不亦說乎
回复

使用道具 举报

7#
ID:743992 发表于 2020-12-29 18:14 | 只看该作者
四楼说的很对了,这种延时没必要精确计算。需要精确延时的话用定时器,这种循环延时是初学者比较低端的做法。
回复

使用道具 举报

8#
ID:68468 发表于 2020-12-29 22:42 | 只看该作者
可以先在KEIL中进行软件仿真,模拟运行,看这段延时程序的延时时间。
回复

使用道具 举报

9#
ID:420836 发表于 2020-12-29 23:20 | 只看该作者
不同晶振频率,延迟时间不同
应该使用单片机库提供的延迟子例程。
回复

使用道具 举报

10#
ID:638887 发表于 2020-12-30 16:12 | 只看该作者
要精确延时,用中断定时器,听说工程实例中不会让CPU去干这种太长时间的软件延时。
回复

使用道具 举报

11#
ID:871291 发表于 2020-12-31 00:39 | 只看该作者
单片机还是很有意义的,多研究
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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