DS18B20是一种单总线数字温度传感器,测试温度范围-55℃-125℃
启动温度转换的命令是0X44,读取命令是0XBE
对于DS的驱动包含以下几步:
复位–>SKIP ROM(0XCC)–>开始转换(0X44)–>延时–>复位–> SKIP ROM(0XCC)–>读存储器(0XBE)–>读出两个字节数据(即温度)–>结束
uint8_t GetTemp()
{
uint8_t flag=0;
if(DS18_Init()==1) //复位初始化,返回1,说明ds18b20应答
{
WriteByte(0xcc); //发送一条ROM指令,跳过对ROM操作的命令(0xcc)
WriteByte(0x44); //发送存储器指令,开始温度转换(0x44)
DS18_Init(); //复位初始化,接收ds18b20应答
WriteByte(0xcc); //发送一条ROM指令
WriteByte(0xbe); //读取RAM的命令(0xbe)
temp_data[0]=ReadByte();
temp_data[1]=ReadByte();
flag=1;
}
return flag;
}
. | 发送一条ROM指令 | . |
---|---|---|
指令名称 | 指令代码 | 功能 |
读取ROM | 0x33 | 读取64位地址 |
ROM匹配 | 0x55 | 只有和64位ROM序列完全匹配的DS18B20才能响应随后的存储器操作,所有和64位ROM序列不匹配的从机都将等待复位脉冲 |
搜索ROM | 0xf0 | 搜索ROM命令允许总线控制器用排除法识别总线上的所有从机的64位编码 |
跳过ROM | 0xcc | |
警报搜索 | 0xec | |
. | 发送存储器指令 | . |
温度转换 | 0x44 | 启动DS18B20进行温度转换 |
读暂存器 | 0xbe | 读暂存器9字节二进制数字 |
写暂存器 | 0x4e | 将数据写入暂存器的TH、TL字节 |
复制暂存器 | 48H | 把暂存器的TH、TL字节写到E2PROM中 |
重调E2PROM | 0xb8 | 把E2PROM中的TH、TL字节写到暂存器TH、TL字节 |
读电源供电方式 | 0xb4 | 启动DS18B20发送电源供电方式的信号给主CPU |
uint8_t DS18_Init()
{
GPIO_SetBits(GPIOC,DS18_Pin);
delay_us(2);
GPIO_ResetBits(GPIOC,DS18_Pin);
delay_us(490);
GPIO_SetBits(GPIOC,DS18_Pin);
delay_us(100);
if(GPIO_ReadInputDataBit(GPIOC,DS18_Pin)==0) flag=1;
else flag=0;
delay_us(480);
GPIO_SetBits(GPIOC,DS18_Pin);
return flag;
}
DS18B20温度计算
高8位的前五位:符号位
高8位的后三位 与 低八位的前四位: 整数部分
低八位的后四位: 小数部分