资讯详情

DS18B20温度传感器(并浅谈与或运算)

DS18B20是一种特殊的传输协议,通信只需要一个接线口即可实现

文章目录

  • 前言
  • 一、DS18B20是什么?
  • 二、使用步骤
    • 1.单总线时序
      • (1).初始化时序
      • (2).写时序
      • (3).读时序
      • (4).DS18B20暂存器![临存器图](https://img-blog.csdnimg.cn/20201230155122602.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE4MjQyNjIz,size_16,color_FFFFFF,t_70)
      • (5).单总线访问协议及部分ROM指令表![顺序](https://img-blog.csdnimg.cn/20201230155612327.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE4MjQyNjIz,size_16,color_FFFFFF,t_70)
      • (6).DS18B20功能指令表
    • 2.代码示例
  • 总结


前言

DS18B独特的单线接口只需要一个端口引脚进行通信,这让每个在这里学习的人都感到惊讶。在本文中,我们将学习18B20的数据传输方式是IIC为协议铺路。


提示:以下是本文的文本内容,以下案例可供参考

一、DS18B20是什么?

达拉斯DS18B20 数字温度计是半导体可编程分辨率的单总线 DS18B20

DS18B20 数字温度计提供9-12 由高低电平触发的可编程报警功能不会因电源消失而改变。DS18B在中央处理器和DS18B20 只需要一条连接线(加地线)。其测温范围为-55~+125℃,并且在-10~+85℃精度为±5℃。除此之外,DS18B除了对外部电源的需求外,20能直接从单线通信线吸收能量。 每个 DS18B20 都有独特的64 从而允许多个序列号DS18B20 同时连接到单线总线上;因此,使用微控制器来控制许多覆盖大面积的区域是非常简单的DS18B20.这个特点在HVAC 对建筑物、仪器或机器的温度、过程监测和控制等环境控制非常有用。 清翔51开发板接口: 值得注意的是,即使是18B20接口反向接口不会烧坏模块,但会特别热,不能正常工作。冬季乱手神器

二、使用步骤

1.单总线时序

DS18B20采用1-wire Bus所有数据都在一条线上传输,因此单总线协议对时间要求非常严格,以确保数据的完整性。 单总线信号类型:复位脉冲、存在脉冲、写0、写1、读0、读1。所有这些信号由脉冲除以存在DS18B总线控制器发出20发出的其他信号。数据传输始终从最低有效性开始。

(1).初始化时序

初始化时序包含复位DS18B20和接收DS18B20返回的存在信号。 主机和DS18B在进行任何通信之前,都需要对其进行初始化。在初始化期间,总线控制器降低总线,保持480us上述挂在总线上的设备将被复位,然后释放总线,直到15-60us,此时18B20将返回一个60-240us低电平之间有信号。

(2).写时序

写时序分为0时序和1时序。 总线控制器控制单总线高低电平的持续时间DS18B20中。 为了产生写时序,总线控制器必须将总线拉低至少1us,写0时序时,总线必须保持低电平60~120us之间,然后释放总线,在总线产生写时序后产生写时序15us允许在内部拉高总线。注:两个写作周期之间的间隔至少为1us

(3).读时序

读时序分为读0时序和读1时序。 通过读取总线控制器DS18B20控制总线高低电平接收DS18B20数据。 总线控制器要产生一个读时序,必须将总线拉低至少1us,然后在读取信号开始后释放总线15us内总线控制器采样总线数据,读取至少60个数据us以上注意阅读周期之间至少有1个间隔us

(4).DS18B20暂存器

根据临时存储器,我们可以看到,当我们只测量温度时,我们只需要读取它byte0和1就够了。如果使用温度报警,您可以继续阅读以下数据。温度寄存器的位置默认为85摄氏度。以下是温度寄存器图 温度寄存器的例子:

(5).单总线访问协议及其部分ROM指令表

忽略ROM指令(CCh) 这条指令允许总线控制器不用提供64 位ROM 编码就使用功能指令。例如,总线控制器可以先发出一条忽略ROM 指令,然后发出温度转换指令[44h],从而完成温度转换操作。在单点总线情况下使用该命令,器件无需发回64 位ROM 编码,从而节省了时间。如果总线上有不止一只从机,若发出忽略ROM指令,由于多只从机同时传送信号,总线上就会发生数据冲突。

(6).DS18B20功能指令表

温度转换指令(44h) 读暂存器指令(BEh)

2.代码示例

DS18B20初始化函数:

uchar DS18b20_Init()
{ 
        
	bit i;
	DQ	=	1;
	Delay_us(1);//6.5us
	DQ	=	0;
	Delay500us();
	DQ	=	1;
	Delay_us(4);//26us
	i	=	DQ;
	Delay_us(20);//130us
	DQ	=	1;
	Delay_us(1);//6.5us
	return	i;
}

不难看到这里的延时数字并不对应,原因是在11.0592MHz的环境下,执行每条指令的时间有区别。可以在调试界面自己调试,也可以用STC下载器自动生成 DS18B20写数据函数

void DS18b20_Write(uchar dat)
{ 
        
	uchar i;
	for(i=0;i<8;i++)
	{ 
        
		DQ	=	0;
		_nop_();
		DQ	=	dat & 0x01;
		Delay_us(13);//84.5us
		DQ	=	1;
		_nop_();
		dat	>>=1;
	}
}

这里用到了一个比较重要的与运算,将一个数与上“0x01”,这一句话的意思其实是这样 整个与运算符合这个思路“0&1=0”“1&1=1”“0&0=0”,dat通过右移,在最高位补0,防止与运算时高位出错。就这样重复8次就分离出了0和1发送出去了。也就是说,一般发送数据时,可以用到“dat & 0x01” DS18B20读取函数

uchar DS18b20_Red()
{ 
        
	uchar i,dat,j;
	for(i=0;i<8;i++)
	{ 
        
		DQ	=	0;
		_nop_();
		DQ	=	1;
		_nop_();
		j	=	DQ;
		Delay_us(13);//84.5us
		dat	=	(j<<7)|(dat>>1);
		DQ	=	1;
		_nop_;
	}
	return	dat;
}

这里用到了另外一个比较重要的运算——或运算

或运算的运算思路:“0|0=0”“0|1=1”“1|1=1”,先将总线上的数据赋予给j,然后j左移7位放在最高位上,dat向右移1位位最高位腾出位置。将j和dat进行一次或运算,则达到让DQ的数据放在dat的最高位的目的,而低位与0进行或运算,数据不变。

DS18B20调用函数

float DS18b20()
{ 
        
	int i;
	uchar L,M;
		DS18b20_Init();//初始化
		DS18b20_Write(0xcc);//跳过ROM,因为只用到了一个DS18B20,不需要操作
		DS18b20_Write(0x44);//0x44,温度转换指令
		DS18b20_Init();//根据协议,再次初始化
		DS18b20_Write(0xcc);
		DS18b20_Write(0xbe);//读取暂存器
		L	=	DS18b20_Red();//将暂存器的值赋予给L
		M	=	DS18b20_Red();//将暂存器的值赋予给L
		i	=	M;
		i	<<=	8;//意思是将M放在高8位
		i	|=	L;//这样就是16位,高八位是M,低八位是L
		i	=	i	*	0.0625	*	10	+0.5;//这里*10+0.5的目的是为了取整,所以这里的i其实是真实温度的十倍
return i;
}

这里是我用的延时函数

void Delay500us()		//@11.0592MHz
{ 
        
	unsigned char i;

	_nop_();
	i = 497;
	while (--i);
}

void Delay_us(uchar i)		//@11.0592MHz
{ 
        
	while(i--);//一次6.5us
}

想调用DS18B20,可以直接这样完成

int y;
y=DS18b20();

或者

unsigned char XXX函数(int x)
{ 
        
	...
}

int main(void)
{ 
        
	XXX函数(DS18b20());
}

总结

以上就是DS18B20的运用,通过这个模块的学习,不仅了解到了该传感器,还简单的了解到了或运算与运算,以及传输协议时序图 欢迎大家关注我 微信公众号:小白写编程 交流群:1033131250

标签: 240f传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台