栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

笔记——51控制DS18B20温度控制篇章2之读取温度值

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

笔记——51控制DS18B20温度控制篇章2之读取温度值

前面我们说到了时序初始化已经完成了,也就是说我么已经完成了单片机与DS18B20的通信,那么能实现通信,我们是不是就应该把DS18B20的这个芯片手册看一看了,因为不管你使用什么芯片,首先你要看到芯片的寄存器地址,该如何运用里面的地址来驱动这个芯片,这样才是正确的开始。

首先我们可以看到这个芯片中文手册里面有一个重要的地址测温操作0x44,这样我么是不是就可以把这个芯片的地址先宏定义出来,方便操作了。

下一个指令是使用寄存器电源还是外部电源这个,可以看到这个skip rom跳过寄存器,而是直接使用外部电源,我们板子板子上是使用外部的,所以是使用0xcc的指令,然后再宏定义出来。

下一条暂存指令,我们需要把里面读出来的数据暂存然后进行操作,0xBE

虽然里面手册有很多地址,但是我么用到的地址只需要三个,剩下的都是测试用的地址,我们只需要能读取温度即可。

前面说到三个地址的宏定义,我们定义好。

#include
#include "DS18B20.h"
#include "oneWire.h"

#define SKIP_ROM   0xcc
#define Covert     0x44
#define Read_SCRATCHPAD  0xBE

然后调用单总线的时序,接下来我们就使用时序来进行芯片的通信。

首先对芯片初始化,

void DS18B20_CovertT()
{
	oneWire_Init();
	oneWire_SandByte(SKIP_ROM);	    //跳过ROM寄存
	oneWire_SandByte(Covert);
}

初始化完成后,我么们就对芯片读取温度。

下面的代码是不是有很多疑惑,没事一步一步解释,我们的函数定义的是,无参有返回值,返回的温度的值,浮点型。

然后我们定义两个变量来存储温度的LMSB是高位   TLSB是低位,这个就不做多解释,有了解过大端和小端的区别的人都知道,我们只需要直到,温度分成两个部分,就是高位和低位就行。

定义一个临时存储变量,然后定义一个返回变量。

我们上面初始化完成,下面就有把芯片写入电源地址,然后写入读取测温地址,芯片的初始化就完成了,那么接下来我们就可以读取我们单总线的读操作函数的返回值,先是低位地地址,然后返回高位,为什么是这样,看这个数据手册的温度地址就知道了,

一节8位,一共两节。

 

float DS18B20_ReadT(void)
{
    unsigned char TLSB,TMSB;
	int Temp;
	float T;
	oneWire_Init();		
	oneWire_SandByte(SKIP_ROM);
	oneWire_SandByte(Read_SCRATCHPAD);
	TLSB=oneWire_ReadByte();	  //先读取前第一字节低位温度数据
	TMSB=oneWire_ReadByte();	  //先读取前第二字节高位温度数据
    //LCD_ShowBinNum(1,1,TMSB,8);  测试而二进制数列
   //LCD_ShowBinNum(1,9,TLSB,8);
	Temp=(TMSB<<8)|TLSB;	 //这里先设置为有符号  这里是先将高八位0000 0000 往左边移动八位,
	T=Temp/16.0;			 //然后留出后面八个位置0000 0000来存放低八位,
							 //然后或上这样就可以拼接成16位了。0000 0000 0000 0000 M高八位  L低八位
	return T;
}

上面说到了temp=(TMSB<<8)|TLSB的先将高为左移八位,因为原来我们的TMSB和TLSB的8位的,那么我们的int型是16位的,那正常来讲我们把TMSB<<8位了,int型是不是前面8个0就有数啦,那么后面还有8个0是没有的,但是我么再或上TLSB就是把低位的8个0给补上了,所以就得到了16位,这样就把整个字节的数给补够了,而此时得Temp就够16位了, 

那么T这个是不是就把Temp赋值给它,这样就可以得到返回得值了呢,而此时得Temp是16位,但是我们也是只需要16位,所以除16就得到了正好的16位不多不少。这里16.0是c语言都知道的运算法则。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/957937.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号