51单片机——DS18B20

单片机——DS18B20


宗旨:技术的学习是有限的,分享的精神是无限的。


        DS18B20——温度传感器,单片机可以通过 1-Wire 和 DS18B20 进行通 信,最终将温度读出。1-Wire 总线的硬件接口很简单,只需要把 18B20 的数据引脚和单片 机的一个 IO 口接上就可以通信。最高12为的温度存储值,补码形式存储。

2字节,LSB低字节,MSB高字节,-55~125

 

1、初始化

       检测存在脉冲:总线上存在DS18B20,总线会根据时序要求返回一个低电平脉冲。单片机要拉低这个引脚,持续大概 480us到960us之间 的时间即可,我们的程序中持续了 500us。然后,单片机释放总线,就是给高电平,DS18B20 等待大概 15 到 60us 后,会主动拉低这个引脚大概是 60 到 240us,而后 DS18B20 会主动释放总线,这样 IO 口会被上拉电阻自动拉高。

 

2ROM操作指令

       Skip ROM(跳过ROM):0xCC。当总线上只有一个器件的时候,可以跳过 ROM,不进行ROM 检测。

 

3RAM存储器操作指令

       Read Scratchpad(读暂存寄存器):0xBE—— DS18B20 的温度数据是 2 个字节,我们读取数据的时候,先 读取到的是低字节的低位,读完了第一个字节后,再读高字节的低位,一直到两个字节全部 读取完毕。

Convert Temperature(启动温度转换):0x44—— 12位最大的转换时间是 750ms

 

4DS18B20的位写时序

       当要给 DS18B20 写入‘0’的时候,单片机直接将引脚拉低,持续时间大于 60us 小于120us 就可以了。图上显示的意思是,单片机先拉低 15us 之后,DS18B20 会在从 15us 到60us 之间的时间来读取这一位,DS18B20 最早会 15us 的时刻读取,典型值是 30us 的时刻读取,最多不会超过 60us,DS18B20 必然读取完毕,所以持续时间超过 60us 即可。

       当要给DS18B20 写入‘1’的时候,单片机先将这个引脚拉低,拉低时间大于 1us,然后马上释放总线,即拉高引脚,并且持续时间也要大于 60us。和写‘0’类似的是,DS18B20 会在 15 到 60us 之间来读取这个‘1’。

 

5DS18B20的位读时序

        单片机首先要拉低这个引脚,并且至少保持1us 的时间,然后释放引脚,释放完毕后要尽快读取。从拉低这个引脚到读取引脚状态,不能超过 15us。大家从图 16-17 可以看出来,主机采样时间,也就是 MASTER SAMPLES,是 在15us 之内必须完成的。 

#include<reg52.h>
#include<intrins.h>typedef unsigned char uchar;sbit IO_18B20 = P3 ^ 2; //DS18B20通信引脚/* 软件延时函数,延时时间(t*10)us */
void DelayX10us(uchar t)
{do{_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}while (--t);
}
/* 复位总线,获取存在脉冲,以启动一次读写操作*/
bit Get18B20Ack()
{bit ack;EA = 0;  //禁止总中断IO_18B20 = 0;     //产生500us复位脉冲DelayX10us(50);IO_18B20 = 1;DelayX10us(6);    //延时60usack = IO_18B20;   //读取存在脉冲while(!IO_18B20); //等待存在脉冲结束EA = 1;  //重新使能总中断return ack;
}
/* 向DS18B20写入一个字节,dat-待写入字节 */
void Write18B20(uchar dat)
{uchar mask;EA = 0;  //禁止总中断for (mask = 0x01; mask != 0; mask <<= 1) //低位在先,依次移出8个bit{IO_18B20 = 0;         //产生2us低电平脉冲_nop_();_nop_();if ((mask & dat) == 0) //输出该bit值{IO_18B20 = 0;}else{IO_18B20 = 1;}DelayX10us(6);        //延时60usIO_18B20 = 1;         //拉高通信引脚}EA = 1;  //重新使能总中断
}
/* 从DS18B20读取一个字节,返回值-读到的字节 */
uchar Read18B20()
{uchar dat;uchar mask;EA = 0;  //禁止总中断for (mask = 0x01; mask != 0; mask <<= 1) //低位在先,依次采集8个bit{IO_18B20 = 0;         //产生2us低电平脉冲_nop_();_nop_();IO_18B20 = 1;         //结束低电平脉冲,等待18B20输出数据_nop_();              //延时2us_nop_();if (!IO_18B20)        //读取通信引脚上的值{dat &= ~mask;}else{dat |= mask;}DelayX10us(6);        //再延时60us}EA = 1;  //重新使能总中断return dat;
}
/* 启动一次18B20温度转换,返回值-表示是否启动成功 */
bit Start18B20()
{bit ack;ack = Get18B20Ack();   //执行总线复位,并获取18B20应答if (ack == 0)          //如18B20正确应答,则启动一次转换{Write18B20(0xCC);  //跳过ROM操作Write18B20(0x44);  //启动一次温度转换}return ~ack;   //ack==0表示操作成功,所以返回值对其取反
}
/* 读取DS18B20转换的温度值,返回值-表示是否读取成功 */
bit Get18B20Temp(int *temp)
{bit ack;uchar LSB, MSB; //16bit温度值的低字节和高字节ack = Get18B20Ack();    //执行总线复位,并获取18B20应答if (ack == 0)           //如18B20正确应答,则读取温度值{Write18B20(0xCC);   //跳过ROM操作Write18B20(0xBE);   //发送读命令LSB = Read18B20();  //读温度值的低字节MSB = Read18B20();  //读温度值的高字节*temp = ((int)MSB << 8) + LSB; //合成为16bit整型数}return ~ack;  //ack==0表示操作应答,所以返回值为其取反值
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466952.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

房价是不是泡沫?

日本买房这件小事记&#xff0c;我在深圳买房继上一篇文章之后&#xff0c;有人说我没有了解中国房地产的历史&#xff0c;就公然写房产的文章。确实&#xff0c;我没有去搜刮很多历史的数据和文章来佐证&#xff0c;也没有引用什么大家之谈&#xff0c;很多都是自己经历的一些…

用Metasploit破解ftp用户名和密码

Metasploit是渗透测试人员在世界各地的资源和工具&#xff0c;比较常用的命令&#xff1a; msfconsole——直接进入 show options——查看 set RHOSTS ip地址/段 use 路径 需要在虚拟机的2003版本下创建FTP服务 将字典密码文件加入到虚拟机的系统里边 命令 ——rz 查看ftp是…

PWM实现语音播放原理

采用PWM进行播放语音原理1.概述2.声音原理3.DAC产生声音的原理是什么4.PWM又是如何实现的DAC的5.PWM的频率与底噪的关系6.PWM音乐曲目解析7.后续1.概述大多数微控制器上播放音频都是采用DAC进行输出&#xff0c;因为微控制器上都不会去带CODEC编解码芯片&#xff0c;但是DAC不是…

CTF 这个看起来有点简单

这个看起来有点简单分值&#xff1a;10 来源&#xff1a; 西普学院难度&#xff1a;易 很明显。过年过节不送礼&#xff0c;送礼就送这个 格式&#xff1a; 解题链接&#xff1a; http://ctf5.shiyanbar.com/8/index.php?id1 解法&#xff1a; 1.手工注入 id1 id1 and 11 id…

操作系统,你搞定了没?

#书籍赠送操作系统一直是比较难学的知识&#xff0c;要学好操作系统的相关内容&#xff0c;需要对硬件、软件、宏观、微观、有非常深刻的理解&#xff0c;而能找到一本讲解比较好的书籍也是非常难得的&#xff0c;恰好&#xff0c;最近有出版社的朋友推荐了这样的一本书籍&…

webcast(利用sharepoint Designer 定制 Office SharePoint Server 2007)学习笔记

讲 师:侯钟雷 微软特约讲师 北京易学育通科技发展有限公司时 间:90 分钟 下载地址:下载地址(需先注册,不过很快)讲座内容&#xff1a;SharePoint Designer是原Frontpage网页工具的演进版本&#xff0c;除了保持了原有强大的功能外&#xff0c;更增加了对SharePoint技术的…

C++ 的几个for 循环,范围for语句

我认为做嵌入式开发也需要学习C开发&#xff0c;可能我们学习的不只是一种编程语言&#xff0c;而是一种编程思想&#xff0c;C相对于C语言来说&#xff0c;会需要更多的想象力&#xff0c;原因就是C的特点太多了。不过&#xff0c;我们可以通过学习C的知识&#xff0c;来掌握面…

​我敢说,这是最全的常用设计模式汇总

今天&#xff0c;想跟大家聊聊代码能力的提升。想起我刚入行那会&#xff0c;怀抱满腔激情&#xff0c;到处学热门框架&#xff0c;但实际上受限于公司体量和业务逻辑&#xff0c;其实往往用不上&#xff0c;时间久了&#xff0c;不用就忘记了&#xff0c;于是在日复一日的工作…

Meterpreter Guide

转载&#xff1a;http://wooyun.jozxing.cc/static/drops/tips-10146.html 0x01 入门篇(生成与接收) 功能介绍 msfpayload和msfencode已经被时代淘汰了现在都转为msfvenom了 msfvenom命令行选项如下&#xff1a;Options:-p, --payload payload> 指定需要使用的…

跟老肖聊天

今天跟一个创业的朋友老肖聊天&#xff0c;聊完之后有点沉重老肖是我的朋友&#xff0c;我讲的都是基于真实的内容&#xff0c;如果觉得我是吹牛或者过分如何&#xff0c;可以绕道&#xff0c;也请嘴下留情。老肖因为公司不景气&#xff0c;这两天出去面试&#xff0c;面试了三…

SSM中(Spring-SpringMVC-Mybatis)(一:概念)

一&#xff1a;Spring&#xff1a; 参照我的另一篇博客&#xff1a; http://www.cnblogs.com/GH0522/p/8127530.html 二:SpringMVC: 流程图&#xff1a; SpringMVC接口解释 DispatcherServlet&#xff1a; Spring提供的前端控制器&#xff0c;所有的请求都有经过它来统一分…

C++实现一个栈

我们先说下栈的知识&#xff0c;先看下我们之前写的文章栈&#xff0c;C语言实现如何自己实现一个栈堆和栈的区别&#xff08;转过无数次的文章&#xff09;这是一个栈这是我们把数据入栈的操作这是数据出栈的操作之前僚机号里面发了一个用C实现的栈文章&#xff0c;比较简单&a…

JavaScript——文档对象模型

一、基本概念 文档对象模型&#xff08;DOM&#xff09;是表示文档和访问、操作构成文档的各种元素的应用程序接口&#xff08;API&#xff09;。它解决了NetScape的JavaScript和Microsoft的JavaScript之间的冲突&#xff0c;给web设计师和开发者一个标准的方法&#xff0c;可让…

你搞清楚「NULL」、「0」、「'0'」、「0」「\0」了吗?

我们先讨论NULL&#xff0c;平时使用指针的时候&#xff0c;会经常遇见这个家伙&#xff0c;这个家伙的值是是这样定义的#define NULL 0 或者 #define NULL (void *)0我们看一下下面这段代码#include <stdio.h>int main () {size_t ii;int *ptr NULL;unsigned long *nul…

周五跟大佬喝酒,顺便打了个球

这是前天发生的事情&#xff0c;昨天写好了文章&#xff0c;今天才发出来&#xff0c;但是名字还是想写成昨晚小聚。昨晚逍遥和啊尚过来找我打球&#xff0c;很开心&#xff0c;虽然酝酿了好久关于这次的活动&#xff0c;但是它真的发生时&#xff0c;我还是显得有些突兀和紧张…

安装Cygwin

Cygwin安装 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 下载cygwin&#xff1a;https://www.cygwin.com/ 箭头指的地方点一下就是安装该软件&#xff0c;开始要安装的一些软件&#xff0c;gcc&#xff0c;gdb&#xff0c;make&#xff0c;ssh等等。…

飞机上一般是什么操作系统?

之前波音737MAX空难失事事件牵动人心&#xff0c;让人对航空出行又平添了一份不信任&#xff0c;根据最新消息显示&#xff0c;美国联邦航空局对737 MAX机型的大量评估授权给波音公司自身进行&#xff0c;安全评估存在严重缺陷。也传出了波音737 MAX客机的培训都是通过平板电脑…

排查一个触摸屏驱动问题

今天跟同事看一个TP驱动&#xff0c;上电后日志都正常&#xff0c;但是触摸没反应&#xff0c;然后开始排查。上电后可以正常读到芯片的chip ID&#xff0c;那说明I2C是通讯正常的&#xff0c;也可以说明触摸芯片的供电也是正常的。基于这个&#xff0c;我搬来示波器&#xff0…

vmware安装ubuntu

vmware安装Ubuntu 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 &#xff08;1&#xff09; 单击”Power on this virtual machine”开始安装Ubuntu系统 经过一段时间的等待出现如下界面,单击”Install Ubuntu”进行安装 在安装的时候&#xff0…

AWS 免费套餐

https://amazonaws-china.com/cn/free/ 需要的可以看下&#xff0c;我准备搞一个RDS。 转载于:https://www.cnblogs.com/hupo376787/p/8268562.html