初始化的过程如下所示:
(1) 先将数据线置高电平“1”。
(2) 延时(这是必须存在的,但不会太久)
(3) 数据线拉到低电平“0”。
(4) 延时750微秒,数据线拉到高电平“1”。
(6) 延时等待(如果初始化成功则在15到60微妙时间之内产生一个由DS18B20所返回的低电平“0”。但不应该是无限等待,不然会使程序进入死循环)。
(7) 若CPU读到了数据线上的低电平“0”后,还要做延时。
(8) 将数据线再次拉高到高电平“1”后结束。
在主机检测到应答脉冲后,就可以发出ROM 命令。该过程中,软件实现DS18B20的工作严格遵守单总线协议:
(1) 主机首先会发出一个复位脉冲,DS18B20 器件收到信号后即进行复位操作。
(2) 紧接着主机会发出ROM命令,程序开始读取单个在线的芯片ROM编码并保存在单片机数据存储器中,把用到的DS18B20的ROM编码离线读出,最后用一个二文数组保存ROM编码,数据保存在X25043中。
(3) 系统工作时,把读取了编码的DS18B20 挂在总线上。发温度转换命令,再进行总线复位。
(4) 然后就可以从上述的数组中匹配在线的温度传感器,随后发温度读取命令,进行温度读取操作,读取相应的温度值。
写时间时序:当主机把数据从逻辑高电平拉到逻辑低电平的时候,写时间隙开始。有两种写时间隙,写1时间隙和写0时间隙。所有写时间隙必须最少持续60μs,包括两个写周期至少1μs的恢复时间。I/O线电平变低后,DS18B20在一个15μs到60μs的窗口内对I/O线采样。如果线上事高电平,就是写1,如果是低电平,就是写0。主机要生成一个写时间隙,必须把数据线拉到低电平然后释放,在写时间隙开始后的15μs内允许数据线拉到高电平。主机要生成一个写0时间隙,必须把数据线拉到低电平并保存60μs。
每个读时隙都由主机发起,至少拉低总线1us,在主机发起读时序之后,单总线器件才开始在总线上发送0或1。所有读时序至少需要60us。
3.3.5 DS18B20的温度转换操作
当DS18B20收到温度转换命令后,开始启动转换。当符号位S=1,它表明,所测得的温度值是负的,则必须进行转化,将其转换成原码,再次计算的十进制值;当符号位S=0时,表示测得的温度值为正,则二进制位可以直接转换为十进制数。当整个转换完成后,温度会在16位扩展的二进制补码的形式存储在高速暂存存储器的第一和第二字节。单片机可以将暂存存储器数据读出,读取时高位在后低位在前,并以0.0625℃/LSB公式。
温度值格式如下表所示:
表5: 温度值格式
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
Ls Byte 23 22 21 20 2-1 2-2 2-3 2-4
bit15 bit14 bit13 bit12 bit11 bit10 bit9 bit8
Ls Byte S S S S S 26 25 24
部分温度值对应的二进制温度表示数据如下表十所示:
表6: 部分温度值对应二进制
温度/℃ 二进制表示 十751进制表示
+125 00000111 11010000 07D0H STC89C52单片机活体水产品长距离物理监控系统设计(11):http://www.751com.cn/zidonghua/lunwen_7007.html