找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5664|回复: 1
打印 上一主题 下一主题
收起左侧

与admin讨论温度测量实验中关于精确延时问题

[复制链接]
跳转到指定楼层
楼主
ID:24072 发表于 2010-5-31 14:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

在温度测量程序中,有如下代码:


        TMDAT = 0; //总线拉低
        delay = 250;
        while (--delay); //延时500us
        TMDAT = 1; //拉高总线

 

而根据选用的晶振11.0592MHz,则晶振周期为Tosc = 1/fosc = 1/(11.0592*1000*1000) = 0.09042us,而机器周期为Tcy=12*Tosc=1.085us,一般一条指令执行周期是1到2个机器周期,也就是1.085us到2.170us。

上面代码中延时程序部分,翻译成汇编语言大致为:

 

 mov r2,#0xFA                            // 250
 mov r3,#0x00                           
00101$:
 mov ar4,r2                                 2
 mov ar5,r3                                 2
 dec r2                                        1
 cjne r2,#0xff,00108$                  2
 dec r3                                       1
00108$:
 mov a,r4                                    2
 orl a,r5                                      1
 jnz 00101$                                2

 

循环部分为13*250个机器周期,所以红色代码部分总共的机器周期为:13*250 + 4=3254个机器周期,所以延时大约为(13*250+4)*Tcy=3254*1.085=3530.59us,也就是延时了3500微秒,比注释中的长大约7倍。

 

不知道我分析得对不对?

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2010-5-31 15:44 | 只看该作者

   你分析得很对,对于c51的延时我们必须要转化为汇编代码后分析每一条指令的执行时间,而且最好是用12m 的晶振这样便于计算一些.ds18b20的时序 不是太严格,所以大多数情况下11.0592 和 12m的都能用,

   有一个方法可以粗略的验证一下你的分析是否正确,就是把这个代码调用1000次,然后对着手表看,是不是35秒执行完毕.

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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