介绍:一种常见的数字温度传感器,控制信号和数据以数字信号的方式输入输出。(内置温度报警功能)
测温范围:-55℃ ~ +125℃
通讯接口:单总线(1-Wire)
一、温度/数字关系:
小数表示
二、存贮器:由一个高速暂存(便笺式)RAM和一个非易失性、带电可擦除的E2RAM组成,后者存储高温度和低温度报警器TH和TL。
三、ROM指令和DS18B20功能指令
ROM指令
DS18B02指令
四、操作流程:
五、温度变换 / 温度读取数据帧
代码:
温度变换
#define DS18B20_SKIP_ROM 0xCC
#define DS18B20_CONVERT_T 0x44
#define DS18B20_READ_SCRATCHPAD 0xBE
/**
* @brief 温度变换
* @param 无
* @retval 无
**/
void DS18B20_ConvertT()
{
OneWire_Init(); //单总线初始化
OneWire_SenByte(DS18B20_SKIP_ROM); //跳过ROM
OneWire_SenByte(DS18B20_CONVERT_T); //开始温度变换
}
温度读取
#define DS18B20_SKIP_ROM 0xCC
#define DS18B20_CONVERT_T 0x44
#define DS18B20_READ_SCRATCHPAD 0xBE
/**
* @brief 温度读取
* @param 无
* @retval float
**/
float DS18B20_RendT()
{
unsigned char TLSB,TMSB;
int Temp;
float T;
OneWire_Init(); //单总线初始化
OneWire_SenByte(DS18B20_SKIP_ROM); //跳过ROM
OneWire_SenByte(DS18B20_READ_SCRATCHPAD); //开始温度变换
TLSB=OneWire_ReceiveByte(); //读取数字温度(8位、高位先读)(二进制读取)
TMSB=OneWire_ReceiveByte(); //读取数字温度(8位、地位后读)(二进制读取)
Temp=(TMSB<<8)|TLSB; //整合为一个16位的数字温度(二进制)
此时温度比实际温度大16倍
解释:为什么扩大16倍,(TMSB<<8)因为有小数表示,所以8位的最后一位不是2^0。
T=(float)Temp/16.0f; //还原
return T;
}