打印

如何计算下面是 10 MS

[复制链接]
653|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lium|  楼主 | 2019-6-22 20:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用KEIL编译的
void delay10ms()
{
for (a=100;a>0;a--)
for (b=225;b>0;b--);
}

使用特权

评论回复
沙发
guoyt| | 2019-6-22 20:13 | 只看该作者
看你接的晶振是多少

使用特权

评论回复
板凳
hanwe| | 2019-6-22 20:16 | 只看该作者

嗯,例如是12MHz的话,一个机器周期就是1us .那么你的那个循环就是225*100*1us..
每次递减是一个机器周期。

使用特权

评论回复
地板
yufe| | 2019-6-23 11:02 | 只看该作者


这是大概值吧

使用特权

评论回复
5
wangpe| | 2019-6-23 11:07 | 只看该作者
要看编译后的汇编代码,或者仿真跟踪一下才能准确确定

使用特权

评论回复
6
langgq| | 2019-6-23 11:11 | 只看该作者

精确呢

使用特权

评论回复
7
wangzsa| | 2019-6-23 11:13 | 只看该作者
要精确,建议用定时器。

使用特权

评论回复
8
zhuww| | 2019-6-23 11:17 | 只看该作者
用KEIL的话看一下反汇编

使用特权

评论回复
9
zhanglli| | 2019-6-23 11:21 | 只看该作者
看一下汇编会精确计算出延时时间

使用特权

评论回复
10
guoyt| | 2019-6-23 11:55 | 只看该作者
用内嵌汇编也可以很精确的

使用特权

评论回复
11
hanwe| | 2019-6-23 11:58 | 只看该作者
看一下反汇编
看一下执行了多少个机械周期
晶振是多少看一下
好像默认是24Mhz
那就是两个机械周期是1us
更多操作

使用特权

评论回复
12
llia| | 2019-6-23 12:01 | 只看该作者
如果用语句while(--300);没递减一次时间是多少啊

使用特权

评论回复
13
wangpe| | 2019-6-23 12:03 | 只看该作者
这个问题我也没有搞清楚,只是把教科书上的代码拿来用,反正够用就没有深究过。真正精确定时还真不知道。

使用特权

评论回复
14
zhuww| | 2019-6-23 12:07 | 只看该作者
二楼正解,不过的确是大概值,这还跟单片机有一点关系

使用特权

评论回复
15
zhanglli| | 2019-6-23 12:11 | 只看该作者

这只是个粗略值,不精确的,他写的是10ms,其实不然。

使用特权

评论回复
16
zhanglli| | 2019-6-23 12:16 | 只看该作者
如何精确?

使用特权

评论回复
17
zhanglli| | 2019-6-23 12:20 | 只看该作者

看晶振,然后数指令!

使用特权

评论回复
18
guoyt| | 2019-6-23 12:22 | 只看该作者

看编译后的汇编代码,然后计算指令运行时间。。。
这样可以做出比较精确的延时,但是这种延时占用CPU,效率很很很低。。。

使用特权

评论回复
19
lium|  楼主 | 2019-6-23 12:28 | 只看该作者

结贴了,多谢大家讨论这么多哈,呵呵

使用特权

评论回复
20
ayb_ice| | 2019-7-5 13:54 | 只看该作者
hanwe 发表于 2019-6-22 20:16
嗯,例如是12MHz的话,一个机器周期就是1us .那么你的那个循环就是225*100*1us..
每次递减是一个机器周期 ...

开什么玩笑,所有指令不可能都是一个周期

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

915

主题

9578

帖子

3

粉丝