DS18B20的使用
    DS18B20单线通信功能是分时完成的,它有严格的时隙概念,如果出现序列混乱,器件将不响应主机,因此读写时序很重要。
    通过单线总线端口访问DS18B20的协议如下:
    步骤1: 复位初始化
    步骤2: ROM操作指令
    步骤3: DS18B20功能指令
    DS18B20的高速暂存存储器由9个字节组成,当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。在上电状态下,DS18B20默认的精度为12位。启动后它保持低功耗等待状态。当需要执行温度测量和AD转换时,总线控制器必须发出温度转换命令。在那之后,产生的温度数据以两个字节的形式被存储到高速暂存器的温度寄存器中,DS18B20继续保持等待状态。单片机可通过单线接口可以读到该数据,读取时低位在前,高位在后。

    2、三个重要的DS18B20指令
    <1> CCH:跳过ROM指令,忽略64位ROM地址,直接向DS18B20发起各种温度转换指令。
    <2> 44H:温度转换指令,启动DS18B20进行温度转换,转换时间最长为500ms(典型值为200ms),结果保存在高速RAM中。
    <3> BEH:读暂存器指令,读取高速暂存存储器9个字节的内容。

    3、读取一次DS18B20温度的基本操作
    <1> 主机对DS18B20进行复位初始化。
    <2> 主机向DS18B20写0xCC命令,跳过ROM。
    <3> 主机向DS18B20写0x44命令,开始进行温度转换。 <4> 等待温度转换完成。
    <5> 主机对DS18B20进行复位初始化。
    <6> 主机向DS18B20写0xCC命令,跳过ROM。
    <7> 主机向DS18B20写0xBE命令,依次读取DS18B20发出的从第0一第8,共九个字节的数据。如果只想读取温度数据,那在读完第0和第1个数据后就不再理会后面DS18B20发出的数据即可,或者通过DS18B20复位,停止数据的输出。

    1. //DS18B20的复位底层驱动代码参考--51版
    2. bit Init_DS18B20(void)
    3. {
    4. bit initflag = 0;
    5. DQ = 0;
    6. Delay_OneWire(50); //拉低总线480us以上
    7. DQ = 1; //释放总线
    8. Delay_OneWire(5); //等待15~60us
    9. initflag = DQ; //读取18B20的复位应答信号
    10. Delay_OneWire(10); //等待60~240us
    11. return initflag; //应答信号为低电平,表示复位成功
    12. }