先简述一下利用DS18B20读取温度的流程:
1.初始化—跳过ROM(0xcc)—转换温度(0x44)
1.初始化—跳过ROM(0xcc)—读取温度(0xbe)—调用两次读取温度函数,分别是高位和低位
float fRead_Temperature(void)
{
float temp_return;
u8 low,high;
init_ds18b20();
Write_DS18B20(0xcc); //跳过读取ROM
Write_DS18B20(0x44); //启动温度转换
//不加上Delay延时,等待温度转换完成,直接去读取暂存器
init_ds18b20();
Write_DS18B20(0xcc); //跳过读取ROM
Write_DS18B20(0xbe); //获取暂存器数据
low = Read_DS18B20(); //温度低8位数据
high = Read_DS18B20(); //温度高8位数据
temp_return = (high<<8|low)*0.0625;
return temp_return;
}
u8 temperature;
u32 temp_float;
u8 cnt_temp;
void vDS18B20_Read()
{
if (cnt_temp>=100)
{
cnt_temp=0;
temperature = (u8)fRead_Temperature();
temp_float = (u32)(fRead_Temperature()*10000);
}
}