【蓝桥杯】——DS18B20模块
目录
一、DS18B20基本概念
(一)、DS18B20的基本概念
(二)、DS18B20的基本信息
二、DS18B20介绍
(一)DS18B20内部存储结构
(二)DS18B20系统配置寄存器数据格式
(三)DS18B20温度数据格式与处理
(五)DS18B20的读/写时序
(六)DS18B20的几个重要指令
三、DS18B20的底层驱动代码
四、DS18B10的应用
一、DS18B20基本概念
(一)、DS18B20的基本概念
DS18B20是Dallas公司生产的、具有one-Wire协议的数字式温度传感器,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。
one-Wire(单线制串行总线)是Dallas公司研制开发是一种协议,由一个总线主节点、一个或多个从节点组成系统,通过一根信号线对芯片进行数据读取。
(二)、DS18B20的基本信息
测温范围:-55摄氏度~+125摄氏度
转换精度:9~12位二进制数(含1位符号位)
测温精度:9位精度为0.5摄氏度;12位精度为0.0625摄氏度。
转换时间:9位精度时为93.75ms;10位精度时为187.5ms;12位精度时为750ms。
通信方式:单总线,数据线接上拉电阻,使总线空闲时处于高电平。
二、DS18B20介绍
(一)DS18B20内部存储结构
DS18B20内部有9字节的高速寄存器
对应功能讲解:
对应的字节 |
寄存器编址 |
功能作用 |
第0字节 |
00H |
温度转换值低8位 |
第1字节 |
01H |
温度转换值高8位 |
第2字节 |
02H |
温度上限寄存器TH |
第3字节 |
03H |
温度下限寄存器TL |
第4字节 |
04H |
系统配置寄存器 |
第5字节 |
05H |
保留(FFH) |
第6字节 |
06H |
保留(0CH) |
第7字节 |
07H |
保留(10H) |
第8字节 |
08H |
CRC校验 |
(二)DS18B20系统配置寄存器数据格式
DS18B20系统配置寄存器有8位,低5位值永远为1,最高位为TM,TM是测试模式为,用于设置DS18B20在工作模式还是测试模式。在出厂时被设置为0,需要时可以修改,R1和R0用于设置分辨率(DS18B20在出厂时被设置为12位的分辨率,需要时可以修改)。DS18B20系统配置寄存器数据格式如下:
DS18B20分辨率设置如下:
(三)DS18B20温度数据格式与处理
DS18B20可完成对温度的测量,下面以12位精度为例。以16位带符号位扩展的二进制补码形式读出。低4位为小数部分,中间7位为整数部分,高5位为扩展符号位,
其中,S为符号扩展位,S=1 表示温度为负值,S=0表示温度为正值。
输出数据和实际温度值之间的关系如下:
注:DS18B20的温度数据是以补码形式表示。
计算方法:
DS18B20的12位精度的分辨率为0.0625。当读出数据为正温度时,将LSB和MSB整合成的16位整数,再分辨率(即0.0625)即可;当读出数据为负温度时,将LSB和MSB整合成的16位整数,再取反加1后,最后乘以0.0625即可。
(四)DS18B20时序复位设计
下面为蓝桥杯官方提供的底层驱动代码:
//DS18B20设备初始化
bit init_ds18b20(void)
{bit initflag = 0;DQ = 1;Delay_OneWire(12);DQ = 0;Delay_OneWire(80);DQ = 1;Delay_OneWire(10); initflag = DQ; Delay_OneWire(5);return initflag;
}
(五)DS18B20的读/写时序
下面为蓝桥杯官方提供的底层驱动代码:
//通过单总线向DS18B20写一个字节
void Write_DS18B20(unsigned char dat)
{unsigned char i;for(i=0;i<8;i++){DQ = 0;DQ = dat&0x01;Delay_OneWire(5);DQ = 1;dat >>= 1;}Delay_OneWire(5);
}//从DS18B20读取一个字节
unsigned char Read_DS18B20(void)
{unsigned char i;unsigned char dat;for(i=0;i<8;i++){DQ = 0;dat >>= 1;DQ = 1;if(DQ){dat |= 0x80;} Delay_OneWire(5);}return dat;
}
(六)DS18B20的几个重要指令
CCH:跳过ROM指令。跳过64位ROM地址,直接向DS18B20发起各种执行指令。
44H:温度转换指令。启动DS18B20进行温度转换。
BEH:读取暂存器指令。
三、DS18B20的底层驱动代码
下面为蓝桥杯官方提供的底层驱动代码:
#include "reg52.h"sbit DQ = P1^4; //单总线接口//单总线延时函数
void Delay_OneWire(unsigned int t) //STC89C52RC
{while(t--);
}//通过单总线向DS18B20写一个字节
void Write_DS18B20(unsigned char dat)
{unsigned char i;for(i=0;i<8;i++){DQ = 0;DQ = dat&0x01;Delay_OneWire(5);DQ = 1;dat >>= 1;}Delay_OneWire(5);
}//从DS18B20读取一个字节
unsigned char Read_DS18B20(void)
{unsigned char i;unsigned char dat;for(i=0;i<8;i++){DQ = 0;dat >>= 1;DQ = 1;if(DQ){dat |= 0x80;} Delay_OneWire(5);}return dat;
}//DS18B20设备初始化
bit init_ds18b20(void)
{bit initflag = 0;DQ = 1;Delay_OneWire(12);DQ = 0;Delay_OneWire(80);DQ = 1;Delay_OneWire(10); initflag = DQ; Delay_OneWire(5);return initflag;
}
四、DS18B10的应用
在CT107D单片机综合训练平台上,实现实时温度测量。
#include "reg52.h"
#include "onewire.h"unsigned char temp=0;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};void SelectHC573(unsigned char channel)
{switch(channel){case 4:P2=(P2 & 0x1f) | 0x80;break;case 5:P2=(P2 & 0x1f) | 0xa0;break;case 6:P2=(P2 & 0x1f) | 0xc0;break;case 7:P2=(P2 & 0x1f) | 0xe0;break;case 0:P2=(P2 & 0x1f) | 0x00;break;}
}void DelaySMG(unsigned int t)
{while(t--);
}void DisplaySMG_Bit(unsigned char pos,unsigned char value)
{SelectHC573(7);P0=0xff;SelectHC573(6);P0=0x01<<pos;SelectHC573(7);P0=value;
}void DisplaySMG_Temp()
{DisplaySMG_Bit(7,SMG_NoDot[12]);DelaySMG(100);DisplaySMG_Bit(6,SMG_NoDot[temp%10]);DelaySMG(100);DisplaySMG_Bit(5,SMG_IsDot[(temp/10)%10]);DelaySMG(100);DisplaySMG_Bit(4,SMG_NoDot[(temp/100)%10]);DelaySMG(100);DisplaySMG_Bit(3,0xff);DelaySMG(100);DisplaySMG_Bit(2,0xff);DelaySMG(100);DisplaySMG_Bit(1,0xff);DelaySMG(100);DisplaySMG_Bit(0,0xff);DelaySMG(100);
}void Delay(unsigned int t)
{while(t--){DisplaySMG_Temp();}
}void DA18B10()
{unsigned char LSB,MSB;init_ds18b20();Write_DS18B20(0xCC);Write_DS18B20(0x44);Delay(1000);init_ds18b20();Write_DS18B20(0xCC);Write_DS18B20(0xBE);LSB=Read_DS18B20();MSB=Read_DS18B20();init_ds18b20();temp=0x0000;temp=MSB;temp<<=8;temp=temp | LSB; //整合成16位的整数if((temp & 0xf800)==0x0000){temp>>=4; //移出小数,对整数部分计算temp=temp*10; //放大10部,然后加上小数部分temp=temp+(LSB & 0x0f)*0.625;}}void main()
{while(1){DisplaySMG_Temp();DA18B10();}
}
【蓝桥杯】——DS18B20模块相关推荐
- 蓝桥杯单片机模块代码(AT24C02)(代码+注释)
本模块是上电可擦除EEPROM,用于存储需要的数据.与上一节使用的底层代码相同,运用同一个总线,其操做顺序与PCF8591除第二步几乎完全一样.相同部分具体可看:蓝桥杯单片机模块代码(PCF8591) ...
- 蓝桥杯各模块使用总结 时钟DS1302 ,ADC DAC PCF8591 ,温度传感器DS18B20 存储AT24C02
2021/4/14 周三 下午 距蓝桥杯仅四天 为复习各模块的使用,防止在比赛时脑子抽住 首先是资源数据包里的底层代码驱动 驱动代码说明 1-本文件夹中提供的驱动代码供参赛选手完成程序设计参考之用. ...
- 蓝桥杯基础模块8_2:串口进阶
一.模块题目 二.原理简述 串行接口作为51单片机的重要外设,编程操作并不复杂,但在实际的项目应用中,由于数据结构和通信规约的不同,其程序逻辑也有各种变化. 一般情况下,上位机的命令可能不是一个字节, ...
- [蓝桥杯单片机]模块学习—中断系统
前一段时间的文章已经跟各位一起刷了一部分的客观题了 接下来将会跟大家一起从官方提供的原理图和芯片手册出发 练习每个模块的程序编写 因为我学习采用的是模块化编程的思路,函数的定义分散在不同的文件中,所以 ...
- PCF8591详解(蓝桥杯单片机模块(IIC总线))
文章目录 概述 特性 总体 框图 引脚 功能描述 寻址 控制字节 D/A转换 D/A转换过程 A/D转换 A/D转换过程 蓝桥杯部分 原理图部分 AD部分 DA部分 结束 概述 PCF8591是一款单 ...
- 蓝桥杯NE555模块编程
一.原理图: RB3:滑动变阻器 THR:高电平出发端 TRIG:低电平触发端 OUT:频率输出口 其中两者电压均小于各自的参考电压时放电管截至,两者电压均大于各自的参考电压时放电管导通,NE555是 ...
- 蓝桥杯基础模块9:IO口扩展与存储器映射
一.模块题目 二.原理简述 三.源码 (1)I0扩展 //头文件 #include "reg52.h" //延时函数 void Delay(unsigned int t) {
- 蓝桥杯基础模块8_1:串口通信收发
一.模块题目 二.原理简述 1.串口重要概念概述 <1> 串行通信是指数据一位接一位地顺序发送或接收. <2> 串行通信有SPI.IIC.UART等多种,最常见最通用的是指UA ...
- 蓝桥杯基础模块7:PWM脉宽调制
一. 模块题目 二. 原理简述 脉冲宽度调制是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量.通信到功率控制与变换的许多领域中.随着电子技术的发展,出现了多种脉冲宽度 ...
- 蓝桥杯基础模块6_2:定时器进阶
一.模块题目 二.原理图 1.数码管
最新文章
- MySQL的共享锁和独占锁
- Mybatis传多个参数(三种解决方案)
- 深度学习之七:卷积神经网络
- 播放[.m3u8]链接解决方案
- 这代码写的跟狗屎一样!怎么优化?
- docker 主进程 日志_运维笔记--docker高效查看后台日志
- 【论文阅读】基于未知传播模型的信息源检测问题 2017年AAAI国际先进人工智能协会
- Activity的四种启动模式区别
- 【个人笔记】OpenCV4 C++ 图像处理与视频分析 03课
- java的排序方法在哪个类里_Java排序(一)实现类的排序
- c3p0数据库连接池使用步骤c3p0配置报错处理
- EasyClick IOS 自动化测试报错
- c语言作业 求梯形面积,梯形面积计算c语言
- 使用Termux在安卓手机上运行tomcat服务器
- WIN10系统进入BIOS的方法(无需开机时按快捷键)
- mongoose populate 填充
- 前端面试题 Doctype作用是什么?严格模式与混杂模式如何区分?他们之间有何意义?
- Unity 控制物体移动的一些方法
- 龟兔赛跑预测 【简单模拟】
- 汇编语言与计算机系统组成课后答案,汇编语言与计算机系统组成