如何计算下面是 10 MS

[复制链接]
594|18
 楼主| lium 发表于 2018-4-13 11:56 | 显示全部楼层 |阅读模式
用KEIL编译的
void delay10ms()
{
for (a=100;a>0;a--)
for (b=225;b>0;b--);
}
guoyt 发表于 2018-4-13 11:58 | 显示全部楼层

看你接的晶振是多少
hanwe 发表于 2018-4-13 12:02 | 显示全部楼层
嗯,例如是12MHz的话,一个机器周期就是1us .那么你的那个循环就是225*100*1us..
每次递减是一个机器周期。
yufe 发表于 2018-4-13 12:05 | 显示全部楼层

这是大概值吧
wangpe 发表于 2018-4-13 12:08 | 显示全部楼层

要看编译后的汇编代码,或者仿真跟踪一下才能准确确定
langgq 发表于 2018-4-13 12:36 | 显示全部楼层
精确呢
wangzsa 发表于 2018-4-13 12:39 | 显示全部楼层

要精确,建议用定时器。
zhuww 发表于 2018-4-13 14:45 | 显示全部楼层

用KEIL的话看一下反汇编
zhanglli 发表于 2018-4-13 14:48 | 显示全部楼层

看一下汇编会精确计算出延时时间
guoyt 发表于 2018-4-13 14:50 | 显示全部楼层

用内嵌汇编也可以很精确的
hanwe 发表于 2018-4-13 14:56 | 显示全部楼层
看一下反汇编
看一下执行了多少个机械周期
晶振是多少看一下
好像默认是24Mhz
那就是两个机械周期是1us
llia 发表于 2018-4-13 14:58 | 显示全部楼层
如果用语句while(--300);没递减一次时间是多少啊
wangpe 发表于 2018-4-13 15:04 | 显示全部楼层

这个问题我也没有搞清楚,只是把教科书上的代码拿来用,反正够用就没有深究过。真正精确定时还真不知道。
zhuww 发表于 2018-4-13 15:07 | 显示全部楼层

二楼正解,不过的确是大概值,这还跟单片机有一点关系
zhanglli 发表于 2018-4-13 15:10 | 显示全部楼层
这只是个粗略值,不精确的,他写的是10ms,其实不然。
zhanglli 发表于 2018-4-13 15:17 | 显示全部楼层
如何精确?
zhanglli 发表于 2018-4-13 15:20 | 显示全部楼层
看晶振,然后数指令!
guoyt 发表于 2018-4-13 15:22 | 显示全部楼层

看编译后的汇编代码,然后计算指令运行时间。。。
这样可以做出比较精确的延时,但是这种延时占用CPU,效率很很很低。。。
 楼主| lium 发表于 2018-4-13 15:43 | 显示全部楼层
结贴了,多谢大家讨论这么多哈,呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则

915

主题

9578

帖子

3

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