C51(DS18B20温度报警器)

在这里插入图片描述

DS18B20可以快速完成如AD一样的转换,在把数据储存起来:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在只有一个DS18B20的时候:
在这里插入图片描述

在这里插入图片描述

下面是对DS18B20总的介绍:

温度传感器是各种传感器中最常用的一种,在做项目时经常会需要测量当前的温度,而DS18B20采用单总线协议,即与单片机借口仅需占用一个I/O端口,无需任何外部元件,仅需要一个上拉电阻,即可将外部环境温度以数字码的方式串行输出,从而大大简化了传感器与微处理器的接口,且DS18B20提供了9—12位的可编程分辨率为9—12位对应的可分辨温度分别为0.5°C,0.25°C,0.125°C,0.0625°C,其转化速率随着温度分辨率的增加而减少。并且DS18B20的测温范围在-55°C~+125°C满足了大部分基本的项目需求。

一、DS18B20的基本读写初始化时序操作

1 初始化操作
单片机先将DQ引脚拉至低电平480—960us发送一个低电平脉冲(复位)之后释放总线由上拉电阻将引脚上拉至高电平持续等待15—60us之后将单片机引脚转为输入模式检查DS18B20是否做出应答,若DS18B20存在,则会将总线拉低60—240us将DQ引脚拉低做出应答

2 写数据操作
DS18B20的写周期最少为60us最长不能超过120us,DS18B20写0时序与写1时序类似,在写0时序中单片机需要将DQ引脚拉低之后DS18B20会在引脚被拉低的第15—60us内进行采样读取到写0的操作,而对DS18B20进行写1操作需要单片机先将引脚拉低至低电平1us的时间之后将总线释放由上拉电阻将总线拉直高电平,DS18B20则会在第15—60us内读取到写1操作

3 读数据操作
由时序图可知读操作最短时间为60us最长不超过120us,DS18B20读操作开始时单片机需要将DQ引脚拉低至少1us的时间后将总线释放,在总线释放期间,若DS18B20发送0,则把总线拉低至少到15us,之后释放总线,若发送1,则不拉低总线,单片机需要在读周期开始后的15us内读取引脚的电平大小,之后释放总线45us完成时序

二、DS18B20的ROM指令和存储器指令
在完成对DS18B20的初始化后要对DS18B20进行操作,而DS18B20的指令可根据作用对象可分为ROM指令和存储器指令,前者可通过ROM指令选择所需操作的DS18B20,后者是对所选的DS18B20进行温度读取,转换等具体操作。

1,ROM指令
因为DS18B20的光刻ROM(地址)各不相同,如果在项目中如果需要同时操作多个DS18B20,则需要根据ROM指令对DS18B20进行选择多个DS18B20: 当单片机上挂载了多个DS18B20,需要对某个进行单独操作时需要先将主机逐个与DS18B20连接,独处其序列号,然后再将所有的DS18B20挂载到总线上,之后由单片机发出匹配ROM指命令(55H)。紧接着单片机提供64位序列(包括该DS18B20的48位序列号)之后的操作就是对该DS18B20进行操作
单个DS18B20:如果单片机上仅挂载了一个DS18B20仅需要发送跳过ROM指令(CCH)命令即可,不需要进行读取ROM编码以及匹配ROM编码。

2,存储器指令
高速暂存器RAM
在存储器指令中最常用的是温度转换指令(44H)和读暂存器指令(BEH)。在每次读取温度前都需要对DS18B20发送温度转换指令,它会将获取的温度转换为数字存储在告诉暂存器ROM中的第0和第1的字节中,转换速度由分辨温度的精度限制,最快93.75ms。在温度转换完毕后通过读暂存器(BEH)读取高速存储器RAM中的数据,读取第0和第1字节即可。

温度数据存储格式

DS18B20在刚出厂时默认的配置为12位,即可分辨温度为0.0625.其中第11到第15位为符号位,0为正,1为负。因为在温度数据中第0位到第3位为小数位,所以在进行温度转换时若温度为负数需要先将数据取反在进行加1后再乘以0.0625得到实际温度,若为正数可直接乘以0.0625获得实际温度。

三、DS18B20改变高温报警和低温报警以及温度分辨位数

要改变DS18B20的高温报警,低温报警以及温度分辨位数需要通过写暂存器指令(4EH)来对高速暂存器RAM的第2,3,4位进行编写。

其中TH和TL寄存器的第七位为符号位S=0为正为1为负。

而配置寄存器中可通过改变R1和R0的值来改变DS18B20的测温精度。

R1 R0 分辨率 温度最大转换时间

0 0 9位 93.75ms

0 1 10位 187.5ms

1 0 11位 375ms

1 1 12位 750ms

四、向DS18B20写命令操作的基本步骤
1 写指令顺序
根据上图可知,在对DS18B20进行功能指令时必须先对DSS18B20进行初始化和ROM指令,如果只有一个DS18B20ROM指令可用跳过ROM(CCH),之后在进行存储器操作。

2.温度报警器的代码:
(LCD1602与定时器函数省略了)

主函数:

在这里插入代码片:
#include <REGX52.H>

//引脚定义
sbit OneWire_DQ=P3^7;

/**
  * @brief  单总线初始化
  * @param  无
  * @retval 从机响应位,0为响应,1为未响应
  */
unsigned char OneWire_Init(void)
{
   
	unsigned char i;
	unsigned char AckBit;
	EA=0;
	OneWire_DQ=1;
	OneWire_DQ=0;
	i = 247;while (--i);		//Delay 500us
	OneWire_DQ=1;
	i = 32;while (--i);			//Delay 70us
	AckBit=OneWire_DQ;
	i = 247;while (--i);		//Delay 500us
	EA=1;
	return AckBit;
}

/**
  * @brief  单总线发送一位
  * @param  Bit 要发送的位
  * @retval 无
  */
void OneWire_SendBit(unsigned char</
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

The endeavor

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值