您的位置 首页 芯闻

DS18B20读写操作程序详解

本站为您提供的DS18B20读写操作程序详解,DS18B20的初始化、读写操作以及程序详解。

  一、DS18B20的初始化

  (1) 先将数据线置高电平“1”。

  (2) 延时(该时刻要求的不是很严厉,可是尽可能的短一点)

  (3) 数据线拉到低电平“0”。

  (4) 延时750微秒(该时刻的时刻规模能够从480到960微秒)。

  (5) 数据线拉到高电平“1”。

  (6) 延时等候(假如初始化成功则在15到60毫秒时刻之内发生一个由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)读数据线的状况得到1个状况位,并进行数据处理。

  (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());

  }

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/xinwen/64071.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部