找回密码
 立即注册

QQ登录

只需一步,快速开始

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

DS18B20

[复制链接]
跳转到指定楼层
楼主
ID:289194 发表于 2018-3-9 08:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DS18B20时序详解
初始化时序:
DS18B20的所有通信都是以由复位脉冲组成的初始化序列开始。该初始化序列由主机发出,后跟由DS18B20发出的存在脉冲(presence pulse)。下图阐述了这一点。
file:///C:\Users\houwanyou\AppData\Local\Temp\ksohtml\wps709D.tmp.jpg
DS18B20发出存在脉冲,通知主机它在总线上并且准备好操作了
在初始化时序中,总线上的主机通过拉低单总线至少480μs发送复位脉冲。然后总线主机释放总线并进入接收模式。总线释放后,4.7kΩ的上拉电阻把单总线上的电平拉回高电平。当DS18B20检测到上升沿后等待1560us,然后以拉低总线60-240us的方式发出存在脉冲。
所述,主机将总线拉低最短480us,之后释放总线。由4.7kΩ上拉电阻总线恢复到高电平。DS18B20检测到上升沿后等待1560us,发出存在脉冲:拉低总线60-240us。至此,初始化和存在时序完毕。

    /*延时函数:(由于DS18B20延时均以15us为单位,故编写了延时单位为15us的延时函数,注意:以下延时函数晶振为12MHz*/
    /*
    ************************************
    函数:Delayxus_DS18B20
    功能:DS18B20延时函数
    参数:t为定时时间长度
    返回:无
    说明: 延时公式:15n+15(近似),晶振12Mhz
    ******************************************
    */
    void Delayxus_DS18B20(unsigned int t)
    {
          for(t;t>0;t--)
          {
                 _nop_();_nop_();_nop_();_nop_();
          }     
          _nop_(); _nop_();
    }
/*
    ************************************
    函数:RST_DS18B20
    功能:复位DS18B20,读取存在脉冲并返回
    参数:无
    返回:1:复位成功 ;0:复位失败
    说明: 拉低总线至少480us ;可用于检测DS18B20工作是否正常
    ******************************************
    */
    bit RST_DS18B20()
    {            
          bit ret="1";
          DQ=0;/*拉低总线 */
          Delayxus_DS18B20(32);/*为保险起见,延时495us */
          DQ=1;/*释放总线 ,DS18B20检测到上升沿后会发送存在脉冲*/
          Delayxus_DS18B20(4);/*需要等待15~60us,这里延时75us后可以保证接受到的是存在脉冲 */
          ret=DQ;
          Delayxus_DS18B20(14);/*延时495us,让ds18b20释放总线,避免影响到下一        步的操作 */
       DQ=1;/*释放总线 */
          return(~ret);
    }
写时序:
主机在写时隙向DS18B20写入数据,在读时隙从DS18B20数据。在单总线上每个时隙只传送一位数据。
有两种写时隙:写“0”时间隙和写“1”时间隙。总线主机使用写“1”时间隙向DS18B20写入逻辑1,使用写“0”时间隙向DS18B20写入逻辑0.所有的写时隙必须有最少60us的持续时间,相邻两个写时隙必须要有最少1us的恢复时间。两种写时隙都通过主机拉低总线产生(见图)。
file:///C:\Users\houwanyou\AppData\Local\Temp\ksohtml\wps709E.tmp.jpg
产生写1时隙,在拉低总线后主机必须在15μs内释放总线。在总线被释放后,由于4.7kΩ上拉电阻总线恢复为高电平。为产生写0时隙,在拉低总线后主机必须继续拉低总线以满足时隙持续时间的要求(至少60μs)
在主机产生写时隙后,DS18B20会在其后的1560us的一个时间窗口内采样单总线。在采样的时间窗口内,如果总线为高电平,主机会向DS18B20写入1;如果总线为低电平,主机会向DS18B20写入0
所述,所有的写时隙必须至少有60us的持续时间。相邻两个写时隙必须要有最少1us的恢复时间。所有的写时隙(写0和写1)都由拉低总线产生。
写函数为:
    /*
    ************************************
    函数:WR_Bit
    功能:向DS18B20写一位数据
    参数:i为待写的位
    返回:无
    说明: 总线从高拉到低产生写时序
    ******************************************
    */
    void WR_Bit(bit i)
    {
          DQ=0;//产生写时序
          _nop_();
          _nop_();//总线拉低持续时间要大于1us
          DQ=i;//写数据 ,01均可
          Delayxus_DS18B20(3);//延时60us,等待ds18b20采样读取
          DQ=1;//释放总线
    }
    /*
/*
    ***********************************
    函数:WR_Byte
    功能:DS18B20写字节函数,先写最低位
    参数:dat为待写的字节数据
    返回:无
    说明:无
    ******************************************
    */
    void WR_Byte(unsigned char dat)
    {
          unsigned char i="0";
          while(i++<8)
          {
                 WR_Bit(dat&0x01);//从最低位写起
                 dat>>=1; //注意不要写成dat>>1
          }
    }
读时序:
DS18B20只有在主机发出读时隙后才会向主机发送数据。因此,在发出读暂存器命令 [BEh]或读电源命令[B4h]后,主机必须立即产生读时隙以便DS18B20提供所需数据。另外,主机

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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