首页 > 其他分享 >51单片机双机通信——DS18B20温度测量

51单片机双机通信——DS18B20温度测量

时间:2024-09-21 22:51:54浏览次数:10  
标签:初始化 ROM DS18B20 51 单片机 DQ 双机 温度

目标实现功能

       甲机控制数字温度传感器DS18B20采集温度、并将温度传递给乙机;乙机接收甲机传递的温度数据、并通过8位数码管动态显示。

1.DS18B20简介

1.1 DS18B20特点

DS18B20采用单总线接口,测量结果直接输出数字信号,通过单总线传递给微处理器。工作电压在3.0v~5.5v,供电方式灵活,即可以采用外部供电、也可以采用寄生供电。测温范围在-55℃~125℃,分辨率可编程,最小分辨率可达0.0625℃。

1.2 DS18B20内部结构

(1)64位ROM编码

开始8位是产品系列编码,中间48位是DS18B20自身序列号,最后8位是前面56位的循环冗余校验码。不同的DS18B20,有不同的64位ROM编码,根据这一特点可以在单总线上挂接多只DS18B20实现组网多点测温。

(2)9字节的高度缓存寄存器

9个字节由低到高依次存放信息如下:温度低字节、温度高字节、温度报警上限副本、温度报警下限副本、分辨率配置副本、未用(保留)、未用(保留)、未用(保留)、前面8字节的循环冗余校验码。

(3)3个EEPROM存储器

3个EEPROM存储器(掉电不丢失)分别保存温度报警上限、温度报警下限和分辨率数据。

1.3  DS18B20读取温度(单只时)

初始化:单片机将数据线拉低至少480us后释放数据线,等待15~60us后,若DS18B20将数据线拉低60~240us,单片机才可对其进行ROM指令操作。

ROM、RAM指令:初始化后单片机发出ROM指令:CCH(即跳过ROM匹配,用于总线上只有1只DS18B20的情况)。接着单片机发出RAM指令:44H(即启动温度采集指令)。此时DS18B20会采集温度,并将温度保存在高速暂存器的第0个字节和第1个字节。

等待DS18B20完成温度采集和转换(例如,当设置DS18B20分辨率为0.0625℃时需要等待750ms)。

重复初始化操作和CCH指令,发出RAM指令:BEH(即读取暂存器指令)。此时DS18B20会将告诉暂存器9个字节的数据从低到高输出,其中第0个字节和第1个字节对应的温度的二进制形式。将这16位二进制数,根据正负情况、对应的分辨率进行二进制到十进制的数据转换。例如:二进制数0000 0101 0101 0000,对应的十进制数乘以分辨率即可得到十进制温度;二进制数1111 1100 1001 0000,取反加1后对应的十进制数乘以分辨率即可得到十进制温度。

1.4  编写DS18B20工作时序

初始化时序:对DS18B20执行ROM、RAM指令前必须先初始化!!

程序如下:

/*DS18B20初始化函数*/
bit ds18b20_init()
{
	bit flag;//定义判断标志
	DQ=1;//确保DQ开始是高电平
	delay(1);//稍作延时
	DQ=0;//单片机拉低电平发送复位脉冲
    delay(54);//延时大于480us
	DQ=1;//释放DQ,等待DS18B20响应
	delay(4);//延时15us到60us之间
	flag=DQ;//读取DQ状态,1:DS18B20不存在 0:存在
	delay(54);//延时大于480us
	DQ=1;//DQ复位
	return flag;
}

 写时序:单片机向DS18B20写入数据(包括ROM、RAM指令等)。

程序如下:

/*主机向DS18B20写入数据(8位)*/
void ds18b20_writebyte(uchar dat)
{
	uchar i;
	for(i=0;i<8;i++)
	{
		DQ=0;//单片机拉低电平发产生写时序
		_nop_();
		_nop_();//延时大于1us
        DQ=dat&0X01;//先发低位
		delay(5);//延时61us
		DQ=1;//释放DQ
		dat=dat>>1;//次低位补位
	}
}

读时序:单片机从DS18B20读取数据时(包括温度等)

程序如下:

/*主机从DS18B20读取数据(8位)*/
uchar ds18b20_readbyte()
{
	uchar i,dat=0,wbit;
	for(i=0;i<8;i++)
	{
		DQ=0;//单片机拉低电平发产生读时序
		_nop_();
		_nop_();//延时大于1us
		DQ=1;//释放DQ
		_nop_();
		_nop_();//延时大于1us
		wbit=DQ;//先接收低位
		dat=(dat>>1)|(wbit<<7);//数据处理,调整高低位顺序	  
		delay(5);//延时61us
	}
	return dat;
}

注意:程序严格遵循DS18020时序 、上述程序中延时部分均以12MHz晶振为前提!!!!

2.双机通信

2.1 串口通信工作过程

发送数据过程:单片机执行写SBUF指令后,发送控制器在定时器产生的移位脉冲控制下,将数据由低位到高位逐位发送。发送完1帧数据后,发送中断请求标志位向CPU中断申请,CPU响应中断并开始发送下一帧数据。

接收数据过程:单片机串行控制寄存器(SCON)中REN位为1时才允许接收数据,当单片机RXD引脚检测到一帧数据的起始信号,接收控制器在定时器产生的移位脉冲控制下,将RXD引脚输入的数据由低位到高位逐位移入输入移位寄存器。最后,输入移位寄存器将数据送入接收SBUF,同时接收中断请求标志位向CPU中断申请,CPU响应中断并接收数据。

2.2 串行通信口初始化 

每一种串行口的工作方式,都有对应的数据帧格式,以及波特率是否可变。波特率的设置还与单片机晶振、定时器的工作方式,以及PCON寄存器中的波特率设置位SMOD有关。

假设单片机晶振为12MHz,以串行通信口工作在方式1、定时器T1用作波特率发生器并工作在方式2为例,则初始化程序如下:

/*串口初始化*/
void usart_init()
{
  TMOD=0X20;//T1:定时模式、方式2(8位自动重装)、启动仅由TR1控制。
	TH1=0XF3;//存放初值
	TL1=0XF3;//计数
	PCON=0X80;//倍增,波特率4800、12MHz晶振
	TR1=1;//启动定时器1
	SCON=0X50;//串行口方式1(10位异步收发)REN允许
	ES=1;//串行口中断允许位
	EA=1;//总中断允许
}

3.程序仿真结果

视频如下:

<iframe allowfullscreen="true" data-mediaembed="bilibili" frameborder="0" id="DebJzh57-1726929881329" src="https://player.bilibili.com/player.html?aid=113170307882830"></iframe>

双机通信—DS18B20测温

 

详尽工程见链接

https://item.taobao.com/item.htm?id=836566535091icon-default.png?t=O83Ahttps://item.taobao.com/item.htm?id=836566535091最重要的一点,祝大家天天开心!!!

标签:初始化,ROM,DS18B20,51,单片机,DQ,双机,温度
From: https://blog.csdn.net/weixin_45755708/article/details/142387374

相关文章

  • 基于51单片机wifi智能大棚环境监测控制液晶显示设计
    1、前言        这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉小洪学长自己做的项目系统达不到老师的要求。为了大家能够顺利以及最少的精力通过毕设,小洪学长分享优质毕业设计项目......
  • 51c大模型~合集58
    #Transformer推理天花板被谷歌打破?DeepMind首席科学家亮出84页PPT,却遭LeCun反对随OpenAI爆火的CoT,已经引发了大佬间的激战!谷歌DeepMind首席科学家DennyZhou拿出一篇ICLR2024论文称:CoT可以让Transformer推理无极限。但随即他就遭到了田渊栋和LeCun等的质疑。最终,CoT会是通往AGI的......
  • 51c嵌入式~MOS~合集1
    一、MOS管:米勒效应、开关损耗以及参数匹配 MOS管即场效应管(MOSFET),属于压控型,是一种应用非常广泛的功率型开关元件,在开关电源、逆变器、直流电机驱动器等设备中很常见,是电力电子的核心元件。   MOS管有N沟道和P沟道之分,N沟道相当于NPN的三极管;P沟道相当于PNP的三极管。实际设计......
  • 魔法城墙 获得星前内容 scratch 20240921_151830
    把星花前的内容拼起来星花当前的位置是3号我们需要把1号与2号的内容拼起来新建变量名为星前内容设置星前内容默认值为空星前重复次数星花位置为3,前面有2个内容星花位置为5,前面有4个内容星花位置为n,前面有n-1个内容所以要循环的次数应该为星花位置-1次获取星前内容的下......
  • 51单片机学习第四课---B站UP主江协科技
    DS1302实时时钟1、基本知识讲解2、用DS1302做时钟main.c#include<regx52.h>#include<delay.h>#include<DS1302.h>#include<LCD1602.h>voidmain(){LCD_Init();ds1302_init();LCD_ShowString(1,1,"--");LCD_ShowSt......
  • 毕业设计选题:151基于springboot+vue的校园志愿者管理系统
     开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9系统展示系统首页用户注册活动信息活动心得个人中心管理员登录管理员功能志愿者管理活动类型管理......
  • 文心一言 VS 讯飞星火 VS chatgpt (351)-- 算法导论24.1 2题
    二、证明推论24.3。推论24.3的内容是设是一带权重的源结点为的有向图,其权重函数为。假定图不包含从源结点可以到达的权重为负值的环路,则对于所有结点,存在一条从源结点到结点的路径当且仅当BELLMAN-FORD算法终止时有。如果要写代码,请用go语言。文心一言:为了证明推论24.3并用Go......
  • (免费源码)计算机毕业设计必看必学 原创定制程序 java、PHP、python、小程序、文案全套
    摘 要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对糖尿病友之家系统等问题,对糖尿病友之家系统进行研究分析,然后开发设计出糖尿病友之家系统以解......
  • 51c嵌入式~mbedtls移植各MCU
    我的嵌入式专辑由于还没发完请去这里看原贴~~待更新完发回来~~ 各种MCU的各型号移植mbedtls相关~https://blog.51cto.com/whaosoft/11852731还有其他 嵌入式※~国产MCU替换STM嵌入式※~MCU~LWIP网络协议栈移植(各种网卡)ipsec~strongSwan嵌入式※~各种の单片机......
  • 【Proteus仿真】基于51单片机的五种信号发生器(梯形波、正弦波、三角波、方波、锯齿波
    目录一、主要功能二、硬件资源三、程序编程四、实现现象一、主要功能该项目旨在基于51单片机,采用Proteus设计一款多波形发生器,能够产生正弦波、方波、三角波、梯形波、锯齿波等不同波形。通过五个开关(K1-K5)的选择,用户可以灵活切换并观察各种波形的输出。项目融合了硬......