News新闻中心
行业资讯 公司新闻
当前位置:南宁棋牌游戏 > 新闻中心 > 行业资讯 > DS18B20的时序及代码解析

DS18B20的时序及代码解析

TIME:2020-10-28   click: 272 次    编辑:南宁棋牌游戏    当前栏目:行业资讯

Description:░DS18B20的核心功能是它的直接读数字的温度传感器。温度传感器的精度为用户可编程的9,10,11或12位,分别以0.5℃,0.25℃,0.125℃和0.0625℃增量递增。在上电状态下默认的精度为12位(所░,本文发布时间:2020-10-28,关于【DS18B20的时序及代码解析】的文章内容即将呈现,预计花费您612秒时间

  DS18B20的核心功能是它的直接读数字的温度传感器。温度传感器的精度为用户可编程的9,10,11或12位,分别以0.5℃,0.25℃,0.125℃和0.0625℃增量递增。在上电状态下默认的精度为12位(所以最后获取的数据要乘以0.0625得到实际÷温度)。DS18B20启动后保持低功耗等待状态;当需要执行温度测量(和AD转换)时,总线控制器必须发出[44h]命〓令。¢

  在那之后,产生的温度数┰ 据以两个字节的形式被存↓ 储◢到高速暂存器的温度寄存器中(所以后期 获取数据时,必须连续读取两次数据),下面介绍时序及相应代码(以12MHz的晶振为例,数据线定义为DQ)◥ ,其中DS18B2棋牌游戏0的所有通信都是以由复位脉冲组成的初始化序列开始的,并采用的是单总线协议。

  操作顺序:初始化——》写相应的控制指令(用写数据函数↑完成)——》读取DS18B20所采集到的数据(◣用读数据函数完成)———》把采集的数据转化成实际的温度。

  时序图及代码分析如下

  一、初始化

  在初始化序列期间,总线控制器拉低总线并保持480us(改延时可以在480~960us之间,但需要在480us以内释放总线)以发出一个复位脉

  冲,然后释放总线,进入接收状态(等待DS18B20应答)。总线释放后,单总线由上拉电阻拉到高电平。当DS1℃8B20探测到I/O引脚上的上升沿后,等待15-60us,然后其以拉低总线60-240us的方式发出存在脉冲。至财此,初始化时序完毕。

  で★▁ ‖DS18B20的时序及代码解析

  初始化代码,初始化代码写至此,其实我们便可以用数码管显示来检验初始化是否成功(※ 即DS18B20有应答),数码管显示”0“,初始化失败,显示”1“,则初始化成功。

  bit DS18B20_init()

  {

  bit ack=1;

  DQ=0; //主机拉低总线

  delay_us(32); //延时49け5□us

安卓棋牌游戏手机版下载

  DQ=1; お//释▆放总线,同时IO口产生的上升沿能被なDS18B20所检测到

  delay_us(4); //延时大于60us,确保接下来DS18B20能发出60~240us的存在脉♂冲应答

  ack=DQ; //在此60~240us之内DQ被DS18B20所占用,若存在,则其会发送一个低电平信号,DQ被DS18B20拉低,则ack为0,反之为1

  delay_us(15); ┿ふ//延时达240us,让DS18B20释放总线

  DQ=1;

  return(ack);

  }

  二、DS18B20的写时序

  主机在写时隙向DS18B20写入数据,其中分为写”0”时隙,和写”1”时隙。总线主机使用写“1”时间隙向DS18B20写入逻辑1,使用写“0”时间隙向DS18B20写入逻辑0.所有的写时隙必须有最少60us的持续时间,相邻两个写时隙必须要有最少1us的恢复时间。【】两种写时隙都通过主机拉低总线产生(见下图)为了产生写1时隙▍▎。

  在拉低总线后主机必须在15μs内释放总∷线。在总线被释放后,由于上拉电阻将总线恢复为高电平。为了产生写”0”时隙,在拉低总线后主机必须继续拉低总线以满足时隙持续时间的↑要求(至少60μs)。

  在主机产生写时隙后,DS18B20会在其后的15~60us的一个时间段内采样♀单总线き(DQ)。在采样的时间窗口内,如果总线为高电平,主机会向DS18B20写入1;如果总线为低电平,主机会向DS18B20写入0。

  综上所述,所有的写时隙必须至少有60us的持续时间。相邻两个写安卓棋牌下载大全时隙必须要有最少1us的恢复时间。所有的写时隙(写0和写1)都由拉低总线产生。

  むせ▼ぉDS18B20的时序及代码解析★ っ

  DS18B2⊙ 0的写时序代码 :写字节函数、由低位至高位,向DS18B20写入一个字节的数据。无返回值,形参byte是待写入的字节数据,读取8次,移位8次,保证每位都传输至DQ。

  void DS18B20_write_byte(uchar byte)

  {

  uchar i;

  for(i=0 ; i《8 ; i++)

  {

  DQ=0◆; //拉低总线,产生写时隙

  _nop_();

  _nop_(); //大于1us的延时

  DQ=の1; //15us之内释放总线

 ¤ _nop_();

  卐_nop_(); //适当延时

  DQ=byte 【】& 0x01; §/◎/将字节低位写入单总线

  delay_us(3); //在15~60us内等待DS18B20来采集信号

  DQ=1; //释放总线

  byte 》》=1; //每次讲要读取的数据位移至最低位,

  }

  }

  三、DS18B20的读时序

  主机发起读时序时,DS18B20仅被用来传输数据给控制器。因此,总线控制器在发出读暂存器指令[0xBE]或读电源模式指令[0xB4]后必须立刻开始读时序,DS18B20可以提供请求信息。除此之外,总线控制器在发出发送温度转换指令[0x44] (或召回EEPROM指令[0xB8])之后读时序,详见DS18B2女0 的芯片手册上的ぅ功能指へ令。

  所▽有读时序#必ゆ须最少60us,包括两个读周期间至少1us的恢复时间□。当总线控制器把数る据线从高电平拉到低电平时,读时序开始,数据线必须至少保持1us,然后总线被释放。DS18B20 通过拉高或拉低总线上来传输”1”或”0”。当传输逻$辑”0”结束后,总线将被释放,通过上拉电阻回到上升沿状态。从DS18B20输出的数据在读时序的下降沿出现后15us 内有效。因此,总线控制器在读时序开始后必须停止把I/O口驱动为低电15us,以读取I/O口状态。

  DS18B20的时序及代码解析

  DS18▄B20的读时序的代を码 :读字节函数、由低位至高位,读取DS18B2ぬ0所采集到的さ数据。带返回值,可结が合前面的写时序,对写、读数据函数进行检验(后面会提到检验过程及效果)byte 是读取到的字节数据。其中,此函数读ご取8次,移位7次(实际移位8次)。

  uchar にDS18B20_read_write()

  {

  uchar i;

  uchar ゑ byte; //byte为要接收到的数据

  for(i=0 ; i《8 ; i++)

  {

  DQ=0; //产生读时序

  _nop_();

  _nop_(); //简单延时

  DQ=1; //释放总线,有从机DS18B20占用

  byte 》》=1; //先进行移位

  if(DQ) //让DS18B20占用总线,发出采集到的信号

  byte |=0x80; //若DQ=1,则让当前byte最高位为1,◎ 在下※ 次循环中移┮位至次高位,最后达到从低位到高位と接收的目的;若DQ=0,则可跳过此语句,直接在下次循环对byte进行移位补0。以上操作15?us以内完成

  delay_us(3); ◇//延时60us

  DQ=1; //释放总线

  _nop_();

  }

  }

相关文章推荐: