【蓝桥杯单片机学习记录7】DS18B20的温度转换与读取流程

本文介绍了DS18B20温度转换的基本流程,包括复位、温度测量和数据处理方法。重点讲解了如何初始化设备、执行温度转换、解读LSB和MSB,以及根据符号位处理正负温度。同时展示了主程序代码和注意事项,适用于单片机开发环境。

目录

DS18B20的温度转换与读取流程

DS18B20的数据处理

 主程序

onewire.h

onewire.c 


DS18B20的温度转换与读取流程

  1. DS18B20复位
  2. 写入字节0xcc,跳过ROM指令
  3. 写入字节0x44,开始温度转换
  4. 延时700~900ms
  5. DS18B20复位
  6. 写入字节0xcc,跳过ROM指令
  7. 写入字节0xbe,读取高速暂存器
  8. 读取暂存器的第0字节,即温度数据的LSB
  9. 读取暂存器的第1字节,即温度数据的MSB
  10. DS18B20复位,表示读取数据结束
  11. 将LSB和MSB整合成一个16位数据
  12. 判断读取结果的符号,进行正负温度的数据处理
//DS18B20温度采样与结果处理参考代码
void Read_Temperature()
{
	unsigned char LSB,MSB ;
	
	Init_DS18B20();		      //DS18B20复位	
	Write_DS18B20(0xCC);	      //跳过ROM操作指令
	Write_DS18B20(0x44);          //开始温度转换
	Delay(1000);                  //延时700ms左右,等待温度转换完成
	Init_DS18B20();		      //DS18B20复位
	Write_DS18B20(0xCC);	      //跳过ROM操作指令	
	Write_DS18B20(0xBE);	      //开始读取高速暂存器		
	LSB = Read_DS18B20();	      //读取温度数据的低8位
	MSB = Read_DS18B20();	      //读取温度数据的高8位
	Init_DS18B20();		      //DS18B20复位,停止暂存器数据读取

	T_dat = 0x0000;
	T_dat = MSB;
	T_dat <<= 8;
	T_dat = T_dat | LSB;         //将LSB和MSB整合成为一个16位的整数
	//首先通过温度数据的高5位判断采用结果是正温度还是负温度
	if((T_dat & 0xf800) == 0x0000)    //正温度的处理办法
	{
		T_dat >>= 4;         //取出温度结果的整数部分
		T_dat = T_dat*10;    //放大10倍,然后加上小数部分
		T_dat = T_dat + (LSB&0x0f)*0.625;
	}
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值