DS18B20相关资料

DS18B20是很常用的一个温度集成块,首先来看一下它的介绍:

Dallas 半导体公司的数字化温度传感器DS1820是世界上第一片支持 “一线总线”接口的温度传感器。一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。现在,新一代的“DS18B20”体积更小、更经济、更灵活。使您可以充分发挥“一线总线”的长处。 

   DS18B20、 DS1822 “一线总线”数字化温度传感器同DS1820一样,DS18B20也 支持“一线总线”接口,测量温度范围为 -55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。DS1822的精度较差为± 2°C 。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。
    与前一代产品不同,新的产品支持3V~5.5V的电压范围,使系统设计更灵活、方便。而且新一代产品更便宜,体积更小。

DS18B20、 DS1822 的特性 
    DS18B20可以程序设定9~12位的分辨率,精度为±0.5°C。可选更小的封装方式,更宽的电压适用范围。分辨率设定,及用户设定的报警温度存储在EEPROM中,掉电后依然保存。DS18B20的性能是新一代产品中最好的!性能价格比也非常出色!
    DS1822与 DS18B20软件兼容,是DS18B20的简化版本。省略了存储用户定义报警温度、分辨率参数的EEPROM,精度降低为±2°C,适用于对性能要求不高,成本控制严格的应用,是经济型产品。
    继“一线总线”的早期产品后,DS1820开辟了温度传感器技术的新概念。DS18B20和DS1822使电压、特性及封装有更多的选择,让我们可以构建适合自己的经济的测温系统。

附件ds18b20cn.rar是本人在网上收集的DS18B20的中文资料,大家可以下载。

同时,附上上次网站找到的驱动程序,适用于51单片机,我自己也用这段代码开发过一些东西,比较好用,代码如下:

sbit DQ=0x84; //c51与DS18B20通信口
unsigned char tempL=0; //温度低八位
unsigned char tempH=0;  //温度高八位
float temperature;  //显示温度值
void ds18b20_delay(unsigned int time)
{
  unsigned int n;
  n=0;
  while(n<time) n++;
}

Init_DS18B20(void)
{
  unsigned char x=0;
  DQ=1;
  ds18b20_delay(8);
  DQ=0;
  ds18b20_delay(85);
  DQ=1;
  ds18b20_delay(14);
  x=DQ;

  ds18b20_delay(20);
}

ReadOneChar(void)
{
  unsigned char i=0;
  unsigned  char dat=0;
  for (i=8;i>0;i–)
  {
    DQ=1;
 ds18b20_delay(1);
 DQ=0;
 dat>>=1;
 DQ=1;
 if(DQ) dat|=0x80;
 ds18b20_delay(4);
  }
  return(dat);
}

WriteOneChar(unsigned char dat)
{
  unsigned char i=0;
  for (i=8;i>0;i–)
  {                            
    DQ=0;
 DQ=dat&0x01;
 ds18b20_delay(5);
 DQ=1;
 dat>>=1;
  }
  ds18b20_delay(4);
}

ReadTemperature(void)
{
  char ctempL,ctempH;

  Init_DS18B20();
  WriteOneChar(0xcc);
  WriteOneChar(0x44);
  ds18b20_delay(125);
  Init_DS18B20();
  WriteOneChar(0xcc);
  WriteOneChar(0xbe);

  tempL=ReadOneChar();      
  tempH=ReadOneChar();

  if(tempH<0xf8) //温度是否小于零
    temperature=((tempH*256)+tempL)* 0.0625;//大于零
  else    
    {
   ctempL=tempL;
      ctempH=tempH;   
   temperature=(((~ctempH)*256)+(~ctempL)+1)* 0.0625;
   temperature=-temperature;
 }

  //ds18b20_delay(200);
  //return(temperature);
}
 

大家也可以根据以上代码,稍微做修改,以腾出更多的单片机资源,使你的程序更高效。

资料为个人网上搜集,并稍作修改,如有疑问,欢迎大家讨论~

留下评论

邮箱地址不会被公开。 必填项已用*标注