找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3141|回复: 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是怎么来的?
谢谢大家指点
回复

使用道具 举报

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 | 显示全部楼层
一、不同晶振频率,延迟时间不同。这种计算无意义
二、不同单片机内核,延迟时间不同。这种计算无意义
三、不同的变量长度,延迟时间不同。这种计算无意义
四、变量在不同的存放空间,延迟时间不同。这种计算无意义
五、中断开多开少,延迟时间不同。这种计算无意义
六、工作中调试程序, 肯定不会出现这种计算要求的。
七、看《人人学会单片机》视频教程,学习框架式编程方式,提高你的代码执行效率,让单片机能够更快的执行最多的任务。这才是你们该学的。
回复

使用道具 举报

ID:280000 发表于 2020-12-29 14:52 | 显示全部楼层
利用单片机的定时器延时就可以
回复

使用道具 举报

ID:809671 发表于 2020-12-29 16:16 | 显示全部楼层
學而時習之 不亦說乎
回复

使用道具 举报

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

使用道具 举报

ID:68468 发表于 2020-12-29 22:42 | 显示全部楼层
可以先在KEIL中进行软件仿真,模拟运行,看这段延时程序的延时时间。
回复

使用道具 举报

ID:420836 发表于 2020-12-29 23:20 | 显示全部楼层
不同晶振频率,延迟时间不同
应该使用单片机库提供的延迟子例程。
回复

使用道具 举报

ID:638887 发表于 2020-12-30 16:12 | 显示全部楼层
要精确延时,用中断定时器,听说工程实例中不会让CPU去干这种太长时间的软件延时。
回复

使用道具 举报

ID:871291 发表于 2020-12-31 00:39 | 显示全部楼层
单片机还是很有意义的,多研究
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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