打印

谁能帮我验证一下这个18b20的延时执行时间?

[复制链接]
2185|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
写的是一个18b20的程序,c语言的函数是这样的
/***************分割线*****************************/
void TempDelay (unsigned char idata us)
{
while(us--);
}

/*******************分割线************************/
这是我查看keil4编译后的汇编代码

C:0x0535    AE07     MOV      R6,0x07
C:0x0537    1F       DEC      R7
C:0x0538    EE       MOV      A,R6
C:0x0539    70FA     JNZ      TempDelay(C:0535)
/******************************************************/
我自己是这样算的,
MOV      R6,0x07 ,1个机器周期
DEC      R7   ,1个机器周期
MOV      A,R6   ,1个机器周期
  JNZ      TempDelay(C:0535)   ,2个机器周期
加起来,每次循环  用 5 个机器周期,
当输入 参数 us=50的时候,我在keil中用12MHZ的晶振模拟计时,得出结果是延时了350us,
按照我的算法,50*5* 1 us =250us ,与keil的模拟结果不符,不知道我这样计算有没有错误。

另外,这是ds18b20中 给18b20的初始化程序,按照说明书 延时的最小值是480us,无论是keil的模拟结果还是我的计算结果都与480us相差很远,
但我把程序烧录到单片机验证的时候,延时参数 写50是完全正常运行的,可以检测出温度,甚至我把参数改成40也可以,想问一下这是为什么呢?

18b20.JPG (21.09 KB )

18b20.JPG

相关帖子

沙发
原野之狼| | 2011-4-19 13:57 | 只看该作者
时序问题我一般拿示波器架起来看
不要说你没有示波器哦

使用特权

评论回复
板凳
flyleaf91|  楼主 | 2011-4-19 14:05 | 只看该作者
2# 原野之狼
实验室里有,不过真的没试过用示波器测时序啊,学一下。

使用特权

评论回复
地板
ayb_ice| | 2011-4-19 16:29 | 只看该作者
在KEIL里设两个断点,看一下运行了多少周期,算一下就出来了

使用特权

评论回复
5
flyleaf91|  楼主 | 2011-4-19 19:01 | 只看该作者
4# ayb_ice
我讨论的正是自己算出来的为什么跟keil断点计算出来的不一样,我想了解一下精准计时。

使用特权

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

本版积分规则

110

主题

157

帖子

2

粉丝