• DS18B20时序解析,以及读出85原因诠释


    如何根据时序编写呢(以下时序的延时条件很重要,下面讲解不再强调

    第一点:写时序

    写0,写1可以分开操作,但是也是可以统一编程的,如何统一;

    我们先看写时序,

    1.主设备先拉低数据线,左(写0)右(写1)是一致的;

    2.15us内出现分歧,分歧出现在写1,波形出现了变化,此时要看写1;

    3.写1在15us内被电阻上拉导致波形变化了,说明了什么呢,数据的变化导致了数据线上的波形未能维持原状,数据这时候可以传输了(可能数据线此时被释放,这里可以大家自行测试,本人测试是此时释放的数据线,注意延时不能过长,本人加延时出错,不加延时现象正确

    所以这部分应该这样编程:

    定义数据线是DQ;

    DQ = 0;

    delayus(2);//看写1时序,主设备拉低要有1us,这段时间写0和写1一致

    DQ = (bit)data;

    取发送数据低1位发送到数据线(DQ)

    写0和写1都要至少60us延时,

    此时主设备释放数据线

    DQ = 1;//看写0时序

    在来3us才进行下一位数据传输

    重复8次一循环发送一字节数据

     第二点:读时序

    首先主设备拉低数据线大于1us

    DQ = 0;

    delayus(2);

    15us内紧接着数据线被释放(后面波形会变化的原因),读0(左)会拉低数据线,读1(右)会拉高数据线,并且主设备会完成读取操作。

    DQ = 1;

    数据线上的数据存储到tempdata ;//8次一循环按位组合成字节

    等待60us再加3us进入循环

     最后返回出去就行了。

    很多人读取到的数据可能是“85”,这种现象说明时序操作正确。(+85摄氏度是DS18B20在上电复位后在温度寄存器内的对应数字量),多读几次即可。

  • 相关阅读:
    kickstart自动化安装
    linux双网卡绑定
    作死实验,删除libc.so.6
    安装centos6及安装redhat6后的配置
    交换机、linux光衰查询
    ansible的简单使用
    linux安全配置学习
    vm的三种网络模式
    Recylerview的使用系列教程
    Android自定义组合控件
  • 原文地址:https://www.cnblogs.com/chillytao-suiyuan/p/12725698.html
Copyright © 2020-2023  润新知