一、概述
1.1一般说明
DS18B20数字温度传感器提供9-Bit到12-Bit的摄氏温度测量精度和一个用户可编程的非易失性且具有过温和低温触发报警的报警功能。DS18B20采用的1-Wire通信即仅采用一个数据线(以及地)与微控制器进行通信。该传感器的温度检测范围为-55℃至+125℃,并且在温度范围超过-10℃至85℃之外时还具有±0.5℃的精度。此外,DS18B20可以直接由数据线供电而不需要外部电源供电。
每片DS18B20都有一个独一无二的64位序列号,所以一个1-Wire总线上可连接多个DS18B20设备。因此,在一个分布式的大环境里用一个微控制器控制多个DS18B20是非常简单的。这些特征使得其在HVAC环境控制,在建筑、设备及机械的温度监控系统,以及温度过程控制系统中有着很大的优势。
1.2特性
· 独特的1-Wire总线接口仅需要一个管脚来通信。
· 每个设备的内部ROM上都烧写了一个独一无二的64位序列号。
· 多路采集能力使得分布式温度采集应用更加简单。
· 无需外围元件。
· 能够采用数据线供电;供电范围为3.0V至5.5V。
· 温度可测量范围为:-55℃至+125℃(-67℉至+257℉)。
· 温度范围超过-10℃至85℃之外时具有±0.5℃的精度。
· 内部温度采集精度可以由用户自定义为9-Bits至12-Bits。
二、使用DS18B20温度传感器、数码管显示检测的温度值
在Proteus中绘制仿真图:
实现代码:
#include "reg51.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define out P0
sbit smg1 = out ^ 4;
sbit smg2 = out ^ 5;
sbit DQ = P3 ^ 7;
void delay5(uchar);
void init_ds18b20(void);
uchar readbyte(void);
void writebyte(uchar);
uchar retemp(void);
void main(void)
{
uchar i, temp;
delay5(1000);
while (1)
{
temp = retemp();
for (i = 0; i < 10; i++)
{
out = (temp / 10) & 0x0f;
smg1 = 0;
smg2 = 1;
delay5(1000);
out = (temp % 10) & 0x0f;
smg1 = 1;
smg2 = 0;
delay5(1000);
}
}
}
void delay5(uchar n)
{
do
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
n--;
}
while (n);
}
void init_ds18b20(void)
{
uchar x = 0;
DQ = 0;
delay5(120);
DQ = 1;
delay5(16);
delay5(80);
}
uchar readbyte(void)
{
uchar i = 0;
uchar date = 0;
for (i = 8; i > 0; i--)
{
DQ = 0;
delay5(1);
DQ = 1;
date >>= 1;
if (DQ)
date |= 0x80;
delay5(11);
}
return(date);
}
void writebyte(uchar dat)
{
uchar i = 0;
for (i = 8; i > 0; i--)
{
DQ = 0;
DQ = dat & 0x01;
delay5(12);
DQ = 1;
dat >>= 1;
delay5(5);
}
}
uchar retemp(void)
{
uchar a, b, tt;
uint t;
init_ds18b20();
writebyte(0xCC);
writebyte(0x44);
init_ds18b20();
writebyte(0xCC);
writebyte(0xBE);
a = readbyte();
b = readbyte();
t = b;
t <<= 8;
t = t | a;
tt = t * 0.0625;
return(tt);
}
(需要注意数码管刷新速度,过慢就会看起来是乱“跳”的)
演示结果:
普中开发板演示:
(温度在LCD1602A中成功显示,并且与实际温度相符,演示成功。)
三、总结
本实验学习了DS18B20温度传感器的原理和单总线通信时序,通过51单片机的IO口模拟时序,成功在Proteus和普中开发板上实现了环境温度采集。在Keil中仿真运行代码,通过虚拟逻辑分析仪分析时序,验证了其符合技术要求。故意修改时序后,DS18B20无法正确响应,证明时序的重要性。