DSB读写时序分析.docVIP

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
DSB读写时序分析.doc

新手在DS18B20读写过程中要犯很多错误。老衲普度众生,简要说明它怎么用。 1、过程1、2是初始化过程,每次读取都要初始化,否则18b20处于待机状态,无法成功读取。过程1:拉低信号线480-700us,使它复位,然后释放总线15-60us,18b20会拉低总线60-240us,然后它释放总线。所以初始化成功的一个标志就是能否读到18b20这个先低后高的操作时序。 (注意:黑色部分表示主机操作,蓝色部分表示18b20操作,每次主机操作完成之后等待18b20状态时,必须要释放总线,比如将IO设置为高阻态什么的。否则18B20没法把状态写到线上) 2、过程3、4是写1bit数据过程。过程3是写0 ,过程4是写1。过程3:拉低总线60us,然后抬高总线5us,完成。过程4:拉低总线5us,然后抬高总线60us,完成 3、过程5、6是读1bit过程。过程5是读0,过程6是读1。过程5、6:拉低总线5us,然后释放总线,读取总线,如果为0,则读入0,如果为1,则读入1DS18B20时序 Author:exploer? 初始化序列——复位和存在脉冲 DS18B20的所有通信都由由复位脉冲组成的初始化序列开始。该初始化序列由主机发出,后跟由DS18B20发出的存在脉冲(presence pulse)。下图(插图13,即如下截图)阐述了这一点。当发出应答复位脉冲的存在脉冲后,DS18B20通知主机它在总线上并且准备好操作了。? 在初始化步骤中,总线上的主机通过拉低单总线至少480μs来产生复位脉冲。然后总线主机释放总线并进入接收模式。当总线释放后,5kΩ的上拉电阻把单总线上的电平拉回高电平。当DS18B20检测到上升沿后等待15到60us,然后以拉低总线60-240us的方式发出存在脉冲。 如文档所述,主机将总线拉低最短480us,之后释放总线。由于5kΩ上拉电阻的作用,总线恢复到高电平。DS18B20检测到上升沿后等待15到60us,发出存在脉冲:拉低总线60-240us。至此,初始化和存在时序完毕。 根据上述要求编写的复位函数为:? 首先是延时函数:(由于DS18B20延时均以15us为单位,故编写了延时单位为15us的延时函数,注意:以下延时函数晶振为12MHz) /* ************************************ 函数:Delayxus_DS18B20 功能:DS18B20延时函数 参数:t为定时时间长度 返回:无 说明: 延时公式:15n+15(近似),晶振12Mhz ****************************************** */ void Delayxus_DS18B20(unsigned int t) { for(t;t0;t--) { _nop_();_nop_();_nop_();_nop_(); }? _nop_(); _nop_(); } 延时函数反汇编代码(方便分析延时公式) C:0x0031 7F01 MOV R7,#0x01 C:0x0033 7E00 MOV R6,#0x00 C:0x0035 1206A6 LCALL delayxus(C:06A6) 38: void Delayxus_DS18B20(unsigned int t) 39: { 40: for(t;t0;t--) C:0x06A6 D3 SETB C C:0x06A7 EF MOV A,R7 C:0x06A8 9400 SUBB A,#0x00 C:0x06AA EE MOV A,R6 C:0x06AB 9400 SUBB A,#0x00 C:0x06AD 400B JC C:06BA 41: { 42: _nop_();_nop_();_nop_();_nop_(); C:0x06AF 00 NOP? C:0x06B0 00 NOP? C:0x06B1 00 NOP? C:0x06B2 00 NOP? 43: }? C:0x06B3 EF MOV A,R7 C:0x06B4 1F DEC R7 C:0x06B5 70EF JNZ Delayxus_DS18B20 (C:06A6) C:0x06B7 1E DEC R6 C:0x06B8 80EC SJMP Delayxus_DS18B20 (C:06A6) 44: _nop_(); _nop_(); C:0x06BA 00 NOP? C:0x06BB 00 NOP? 45: } C:0x06BC 22 RET? 分析上述反汇编代码,可知延时公式为15*(t+1) /* ************************************ 函数:RST_DS18B20 功能:复位DS18B20,读取存在脉冲并返回 参数:无 返

文档评论(0)

000 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档