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);
}
大家也可以根据以上代码,稍微做修改,以腾出更多的单片机资源,使你的程序更高效。
资料为个人网上搜集,并稍作修改,如有疑问,欢迎大家讨论~