【蓝桥杯单片机11】单总线温度传感器DS18B20的基本操作
【蓝桥杯单片机11】单总线温度传感器DS18B20的基本操作
广东职业技术学院 欧浩源
单总线数字温度传感器DS18B20几乎成了各类单片机甚至ARM实验板的标配模块来,在蓝桥杯的往届省赛和国赛中,这个内容考查的频率也相当的高。不管是单片机学习还是蓝桥杯备赛,都应掌握DS18B20的基本操作,也就是把传感器的数据读出来。
1、关于DS18B20你应该知道
在蓝桥杯“单片机设计与开发”赛项中,会提供一个关于DS18B20的库文件,里面有传感器复位、写字节和读字节三个函数。所以,你不一定要把单总线的时序搞清楚,但你一定要把DS18B20的基本操作流程弄明白。
DS18B20单线通信功能是分时完成的,它有严格的时隙概念,如果出现序列混乱,器件将不响应主机,因此读写时序很重要。
通过单线总线端口访问DS18B20的协议如下:
步骤1: 复位初始化
步骤2: ROM操作指令
步骤3: DS18B20功能指令
DS18B20的高速暂存存储器由9个字节组成,当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。在上电状态下,DS18B20默认的精度为12位。启动后它保持低功耗等待状态。当需要执行温度测量和AD转换时,总线控制器必须发出温度转换命令。在那之后,产生的温度数据以两个字节的形式被存储到高速暂存器的温度寄存器中,DS18B20继续保持等待状态。单片机可通过单线接口可以读到该数据,读取时低位在前,高位在后。
2、三个重要的DS18B20指令
<1> CCH:跳过ROM指令,忽略64位ROM地址,直接向DS18B20发起各种温度转换指令。
<2> 44H:温度转换指令,启动DS18B20进行温度转换,转换时间最长为500ms(典型值为200ms),结果保存在高速RAM中。
<3> BEH:读暂存器指令,读取高速暂存存储器9个字节的内容。
3、读取一次DS18B20温度的基本操作
<1> 主机对DS18B20进行复位初始化。
<2> 主机向DS18B20写0xCC命令,跳过ROM。
<3> 主机向DS18B20写0x44命令,开始进行温度转换。
<4> 主机对DS18B20进行复位初始化。
<5> 主机向DS18B20写0xCC命令,跳过ROM。
<6> 主机向DS18B20写0xBE命令,依次读取DS18B20发出的从第0一第8,共九个字节的数据。如果只想读取温度数据,那在读完第0和第1个数据后就不再理会后面DS18B20发出的数据即可。
具体的代码实现,可以参考一下框架:
4、单元实训题目
注意:如果你利用大赛提供的DS18B20的库文件,也就是onewire.c和onewire.h,进行程序设计的时候,没能正确的读出温度传感器的数值,对库文件中代码的时序进行适当的调整即可,本人就是对原有库文件中的延时加大了10倍才正确读出数据。至于怎么调整,调整多少,要实际调试。
5、实现源码参考
#include "reg52.h" #include "onewire.h"sbit HC138_A = P2^5; sbit HC138_B = P2^6; sbit HC138_C = P2^7; sbit S5 = P3^2; sbit S4 = P3^3; unsigned char code SMG_NoDot[18] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,0xbf,0x7f}; unsigned char code SMG_IsDot[10] = {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};unsigned int temp = 0;void DelaySMG(unsigned int time) {while(time--); }void Init74HC138(unsigned char n) {switch(n){case 4:HC138_A = 0;HC138_B = 0;HC138_C = 1;break;case 5:HC138_A = 1;HC138_B = 0;HC138_C = 1;break;case 6:HC138_A = 0;HC138_B = 1;HC138_C = 1;break;case 7:HC138_A = 1;HC138_B = 1;HC138_C = 1;break;case 8:HC138_A = 0;HC138_B = 0;HC138_C = 0;break;} }void DispaySMG_Bit(unsigned char value, unsigned char pos) {Init74HC138(6);P0 = (0x01 << pos);Init74HC138(7);P0 = value; }void ReadTemperature() {unsigned char LSB,MSB ;Init_DS18B20(); Write_DS18B20(0xCC); Write_DS18B20(0x44); Init_DS18B20(); Write_DS18B20(0xCC); Write_DS18B20(0xBE); LSB = Read_DS18B20(); MSB = Read_DS18B20(); temp = 0x0000;temp = MSB;temp <<= 8;temp = temp | LSB;temp >>= 4;temp = temp*10;temp = temp + (LSB&0x0f)*0.625;if((MSB>>4) == 0x0f){temp |= 0x8000;} }void ShowTemperature() {DispaySMG_Bit(SMG_NoDot[temp%10],7);DelaySMG(500);DispaySMG_Bit(0xff,0);DispaySMG_Bit(SMG_IsDot[(temp/10)%10],6);DelaySMG(500);DispaySMG_Bit(0xff,0);DispaySMG_Bit(SMG_NoDot[(temp/100)%10],5);DelaySMG(500);DispaySMG_Bit(0xff,0); }void main() {while(1){ReadTemperature();ShowTemperature();} }
转载于:https://www.cnblogs.com/ALittleBee/p/9427165.html
【蓝桥杯单片机11】单总线温度传感器DS18B20的基本操作相关推荐
- 蓝桥杯单片机之DS18B20温度传感器
蓝桥杯单片机之DS18B20温度传感器 简述: 根据提供的芯片数据手册可以获取的信息: ROM操作命令: 存储器操作命令 温度转换及温度获取 温度寄存器格式: 获取温度的具体操作 温度数据处理与数码管 ...
- 蓝桥杯单片机DS18b20单总线测温模块常见问题解决
蓝桥杯单片机DS18b20单总线测温模块常见问题解决 有道是:"溪水声声留我住,梅花朵朵唤人回" DS18b20测温模块作为一个比较简单.稳定的蓝桥杯单片机外设模块, 使用时却经常 ...
- 蓝桥杯单片机DS18B20代码注释及部分时序图
蓝桥杯单片机蓝桥杯单片机DS18B20代码注释及部分时序图 #include<STC15F2K60S2.H> #include<intrins.h>#define uchar ...
- 蓝桥杯单片机(九)DS18B20温度测量(四位小数和负数显示)
上一次讲了DS18B20的整数温度显示 蓝桥杯单片机(八)DS18B20温度测量(整数显示) 但近几年有出题小数部分的温度显示,首先打开DS18B20的数据手册,如图 通过这张表,我就知道读取数据时, ...
- 蓝桥杯单片机学习11——PCF8591A/DD/A转换芯片
上期我们学习了DS1302实时时钟的基本使用,现在我们来学习PCF8591A/D&D/A转换芯片的相关内容 蓝桥杯单片机学习11--PCF8591A/D&D/A转换芯片 PCF8591 ...
- 蓝桥杯单片机比赛学习:11、频率测量的基本原理
在蓝桥杯单片机比赛中,频率测量一次都没考过,但是也不排除不考的可能.频率测量相对前面的几个模块来说相对简单,只需要两个定时器就可以实现. 频率测量的基本原理 产生脉冲的主要元件是555定时器.555定 ...
- 【蓝桥杯单片机(24)】历届单片机客观题及答案解析
目录 考前冲刺,专栏完结篇 ## 推荐链接: 推荐视频–小蜜蜂老师讲解 赛点资源包下载,提取码:brno 三极管基本知识总结 运算放大电路的基础 第十三届蓝桥杯单片机官方直播课录屏 目录 一些刷题后的 ...
- 蓝桥杯单片机组——榨干选手资源包(芯片数据手册)
文章目录 前言 DS18B20 原理图 1-Wire协议简介 赛场技巧 DS1302 原理图 SPI协议简介 赛场技巧 AT24C02 原理图 IIC协议简介 赛场技巧 PCF8591 原理图 赛场技 ...
- 蓝桥杯单片机省赛第十一届赛题二
文章目录 前言 一.题目 二.代码部分 1.IIC.C 2.IIC.H 3.onewire.h 4.onewire.h 5. main.c 总结 前言 蓝桥杯单片机--第十一届省赛赛题二解析 今年 ...
最新文章
- Android中添加背景音乐的两种方法
- 临时表与表变量深入探究
- python字典速度能比字典高多少_python – 字典访问速度比较与整数键对字符串键...
- git学习4--公钥的配置
- 什么是软件 什么是硬件
- Tomcat8.5.40启动后一直卡在日志At least one JAR was scanned for TLDs yet contained no TLDs
- int 转为字节后 低字节在前_NumPy 字节交换
- 所需依赖_包揽全球75%进口!中国为何进口天量铁矿石?如何减少对澳依赖
- ATL中建立消息窗口
- mysql ssh 导入时注意问题
- HP.Infotech.CodeVisionAVR.v1.24.6.Pro
- Homebrew 安装以及更新源替换
- scheme语言编写运行
- DB2数据库如何修改字段名称
- 使用 MATLAB Coder App生成MEX函数
- SPI FLASH(W25Q128BV) 包含SPI工作原理
- 强化学习入门 Q-learning与SARSA
- Python + Selenium实现web端的UI自动化
- 机械键盘 酒精大法
- python pandas拆分单元格
热门文章
- JavaScript函数的两种声明方式(4)
- php文件调用函数,关于PHP操作文件的基本函数的使用
- Python入门--函数的创建与调用
- 碳钢腐蚀速率计算公式_化工管道用金属材料的腐蚀
- 终面后拿offer几率_战绩 | 恭喜VIP学员斩获德勤(北京)风险分析师全职Offer!...
- 雷电模拟器多开cpu优化_哪个电脑手游模拟器好用 安卓手游模拟器测试对比排行榜...
- 多时隙编码aloha(MuSCA)与编码时隙aloha(CSA)协议分析
- [leetcode] 96. 不同的二叉搜索树 +[补充] 不同的二叉树,不同形态的二叉树的个数----catalan数
- mooc中习题--计算天数
- Wannafly挑战赛27: E. 黄魔法师(构造)