电工技术基础_电工基础知识_电工之家-电工学习网

欢迎来到电工学习网!

DS18B20读写操作程序详解

2022-05-10 09:07分类:传感器 阅读:

 

  一、DS18B20的复位

  (1) 先将手机充电线置上拉电阻“1”。

  (2) 延迟(该時间规定的没有很严苛,可是尽量的短一点)

  (3) 手机充电线拉到低电频“0”。

  (4) 延迟750微秒(该時间的时间段能够从480到960微秒)。

  (5) 手机充电线拉到上拉电阻“1”。

  (6) 延迟等候(假如复位完成则在15到60ms時间以内造成一个由DS18B20所返还的低电频“0”。据该情况能够来确认它的存有,可是应留意不可以无尽的开展等候,要不然会使系统进入到无限循环,因此要实现中断操纵)。

  (7) 若CPU读到手机充电线上的低电频“0”后,还需要做延迟,其延迟的时间段从产生的上拉电阻算起(第(5)步的時间算起)至少要480微秒。

  (8) 将手机充电线再度拉升到上拉电阻“1”后完毕。

  二、 DS18B20的写实际操作

  (1) 手机充电线先置低电频“0”。

  (2) 延迟明确的时长为15微秒。

  (3) 按从底位到上位的次序推送字节数(一次只推送一位)。

  (4) 延迟時间为45微秒。

  (5) 将手机充电线拉到上拉电阻。

  (6) 反复上(1)到(6)的使用直至任何的字节数所有推送完才行。

  (7) 最终将手机充电线拉升。

  三、DS18B20的读实际操作

  (1)将手机充电线拉升“1”。

  (2)延迟2微秒。

  (3)将手机充电线降低“0”。

  (4)延迟15微秒。

  (5)将手机充电线拉升“1”。

  (6)延迟15微秒。

  (7)读手机充电线的情况获得一个情况位,并开展数据处理方法。

  (8)延迟30微秒。

  四、DS18B20存取数据程序流程

  //----------------------------------------------------------

  // 控制模块名字:DS18B20.h

  // 控制模块作用:DS18B20 存取数据

  //----------------------------------------------------------

  sbit DS = P1^0;

  //----------------------------------------------------------

  // 涵数名字:void DelayTmp(unsigned int count)

  // 涵数作用:延迟

  //----------------------------------------------------------

  void DelayTmp(unsigned int count)

  {

  unsigned int i;

  while(count)

  {

  i=200;while(i》0)i--;

  count--;

  }

  }

  //----------------------------------------------------------

  // 涵数名字:void DsReset(void)

  // 涵数作用:校准

  //----------------------------------------------------------

  void DsReset(void)

  {

  unsigned int i;

  DS=0;

  i=103; while(i》0)i--;

  DS=1;

  i=4;while(i》0)i--;

  }

  //----------------------------------------------------------

  // 涵数名字:bit TmpReadBit(void)

  // 涵数作用:载入一位

  //----------------------------------------------------------

  bit TmpReadBit(void)

  {

  unsigned int i;

  bit dat;

  DS=0;i ;

  DS=1;i ;i ;

  dat=DS;

  i=8;while(i》0)i--;

  return (dat);

  }

  //----------------------------------------------------------

  // 涵数名字:unsigned char TmpRead(void)

  // 涵数作用:载入一字节

  //----------------------------------------------------------

  unsigned char TmpRead(void)

  {

  unsigned char i,j,dat;

  dat=0;

  for(i=1;i《=8;i )

  {j=TmpReadBit();

  dat=(j《《7)|(dat》》1); }

  return(dat);

  }

  //----------------------------------------------------------

  // 涵数名字:void TmpWriteByte(unsigned char dat)

  // 涵数作用:载入一字节

  //----------------------------------------------------------

  void TmpWriteByte(unsigned char dat)

  {

  unsigned int i;

  unsigned char j;

  bit testb;

  for(j=1;j《=8;j )

  {

  testb=dat&0x01;

  dat=dat》》1;

  if(testb) //write 1

  {

  DS=0;

  i ;i ;

  DS=1;

  i=8;while(i》0)i--;

  }

  else

  {

  DS=0; //write 0

  i=8;while(i》0)i--;

  DS=1;

  i ;i ;

  }

  }

  }

  //----------------------------------------------------------

  // 涵数名字:void TmpChange(void)

  // 涵数作用:温度换算

  //----------------------------------------------------------

  void TmpChange(void)

  {

  DsReset();

  DelayTmp(1);

  TmpWriteByte(0xcc);

  TmpWriteByte(0x44);

  }

  //----------------------------------------------------------

  // 涵数名字:unsigned int Tmp()

  // 涵数作用:获得溫度

  //----------------------------------------------------------

  unsigned int Tmp()

  {

  float tt;

  unsigned char a,b;

  unsigned int temp;

  DsReset();

  DelayTmp(1);

  TmpWriteByte(0xcc);

  TmpWriteByte(0xbe);

  a=TmpRead();

  b=TmpRead();

  temp=b;

  temp《《=8;

  temp=temp|a;

  tt=temp*0.0625;

  temp=tt*10 0.5;

  return temp;

  }

  //----------------------------------------------------------

  // 涵数名字:void RefreshTmp()

  // 涵数作用:更新溫度

  //----------------------------------------------------------

  void RefreshTmp()

  {

  TmpChange();

  DisplayTmp(Tmp());

  }

上一篇:ds18b20系统结构框图和接线

下一篇:ds18b20负温度,DS18B20数据处理支持负温度

相关推荐

电工推荐

    电工技术基础_电工基础知识_电工之家-电工学习网
返回顶部