[51单片机] 延时程序的问题

[复制链接]
1177|13
 楼主| chaodada 发表于 2017-9-1 16:32 | 显示全部楼层 |阅读模式
void delayus(uint i)
{
        while(i--);
}
这延时一下是多少时间、

 楼主| chaodada 发表于 2017-9-1 16:33 | 显示全部楼层
11.05926M的晶振频率
mcu5i51 发表于 2017-9-2 11:10 | 显示全部楼层
老天知道,可以问下他
delin17 发表于 2017-9-2 13:26 | 显示全部楼层
自己写汇编,看指定执行时间。计算一下。还要不考虑被中断
linqing171 发表于 2017-9-4 14:14 | 显示全部楼层
编译器优化等级,cpu指令周期数,都有关系。
这个代码,很多很多年前测试过,在C8051F330(silabs的CIP51内核,24.5MHz,一半指令单周期,跳转为2或者3周期),执行时间为 A+B*i
us
;
其中B=0.3左右;A忘记了。
ningling_21 发表于 2017-9-4 15:10 | 显示全部楼层
用延时配合LED翻转,再示波器测量一下
懒人 发表于 2017-9-5 11:24 | 显示全部楼层
不好说,和编译有关吧
engineerwubin 发表于 2017-9-6 22:12 | 显示全部楼层
还是帖子“8051嵌入式操作系统”,还是DS18B20示范程序,里面有精确的延时程序,以微秒为单位,你可以参考一下。
yanzhuangsongqi 发表于 2017-9-7 08:49 | 显示全部楼层
用软件计算一下,一般是比较精确的
NE5532 发表于 2017-9-7 16:30 | 显示全部楼层
不能有中断,还不能有编译优化,具体时间示波器测,仿真器也可以计算。
datouyuan 发表于 2017-9-16 16:25 | 显示全部楼层
请参考这个帖子。

https://bbs.21ic.com/icview-1610434-1-1.html

#define d_uS(us) do{ uint8 cnt1=MIN(MAX(COVERT(us),1),256); do{}while(--cnt1); }while(0)
        //Note:实际延时效果C51                12M         4<= us <= 514(uS)
        //Note:实际延时效果88F54        16.6M        1<= us <= 31(uS)
我就是柯南 发表于 2017-9-17 21:07 | 显示全部楼层
楼主不会用if查询时序的方法来写吗?delay太浪费单片机的时间了。
llggll1234 发表于 2017-9-18 10:24 来自手机 | 显示全部楼层
1除以频率
redsun525 发表于 2017-9-27 17:17 | 显示全部楼层
各家指令编译和指令周期都不一样,不好说结果,具体要看编译成的机器码,编译成的机器码应该有jp之类的指令,具体要几个指令周期还需要对照规格书计算下就知道了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

104

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部