- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于DS18B20数字温度计设计与实现
基于DS18B20数字温度计设计与实现
作者简介:杨辉(1989-),男,广东湛江人氏,现就读于中山大学新华学院电子信息科学与技术专业,主攻C语言编程及程序设计,对单片机功能开发、系统智能化等项目均有研究经验
摘 要:针对市面上的数字温度计造价高,功能单一,操作复杂等弊端,本设计采用单片机AT89C52作为核心元件,利用DS18S20及其他的硬件电路完成对环境温度的实时检测及显示。较之传统的数字温度计,该设计由软件与硬件电路配合实现了高精度、广范围的温度检测,并且支持多点测温,智能显示等功能,而且电路简单,操作方便,造价适中,具有较高的实用价值。
关键词:单片机;DS18B20;多点测温;温度检测
与传统的测温元件热电偶和热电阻相比,热电偶和热电阻测出的数据一般都是电压值,再转换成对应的温度,因而需要比较多的外部硬件支持,硬件电路复杂,软件调试繁琐,制作成本高。而现代数字测温元件DS18B20以其超小的体积,超低的硬件开销,抗干扰能力强,精度高,附加能力强等优势,成为学习单片机技术和开发温度相关产品的不二之选。
由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20用严格的通信协议来保证各位数据传输的正确性和完整性。协议规定,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。 该协议定义了几种信号的时序:初始化时序、读时序、写时序。DS18B20的数据读写时通过时间间隙处理位和命令字来确认信息交换。
1延时子程序
#include //这个头文件包涵了对_nop_() 的定义
void DelayX0us(unsigned char n){ while (n--){ _nop_();_nop_();}}
延时时间=n*(2+1+1+2+1+1+2)+2≈10*n
2复位脉冲与存在脉冲
单总线上的所有处理均从初始化(复位)开始。
#include //这个头文件包含了对P端口以及CY的定义
sbit DQ = P3^7; //DS18B20的数据口位P3.7
Void DS18B20_Reset ()
{ CY = 1;
While (CY)
{ DQ = 0; //发出低电平复位信号
DelayX0us(48); //延时至少480us
DQ = 1; //释放总线并进入接收状态
DelayX0us(6); //等待60us
CY = DQ;
//检测存在脉冲,如果为0,则说明设备存在,否则继续循环。
DelayX0us(42); //等待设备释放I/O线(480-60)us
3写数据
向DS18B20写入某字节的时候,先要写入该字节的最低位,然后依次一位一位地写入,最后写入该字节的最高位。该子程序将DATA 中的数据写入DS18B20。
4读数据
DS18B20的某字节在被读取的时候,DS18B20会先在总线输出该字节的最低位,然后依次一位一位地在总线中输出,最后输出该字节的最高位。该子程序将读得的位存到 DATA 中。
5 多路测量
DS18B20的“一线总线”特点不但体现在命令指令输入和数字数据输出能在同一总线上实现,而且还可以实现多个DS18B20 数据总线使用同一条数据线。
在本设计中,充分考虑了各种客观因素和条件以后,笔者事先将每个DS18B20的序列号分别检测出来并存到程序空间中,从而跳过复杂的序列号搜索过程,大大简化了测温过程。这种做法只适合于使用传感器数量较少的场合,否则系统维护和程序空间消耗会成为应用瓶颈。
6温度测量
在本设计中先跳过 ROM ,即是启动所有 DS18B20 进行温度测量,温度测量完成之后,通过匹配 ROM ,再逐一地读取每个 DS18B20 的温度数据。这样可以将测量需要的时间缩减到最少。
7温度读取
设备复位 ――发送ROM进行选择――发送需要验证的ROM――发送读暂存存储器命令――读温度低字节LSB――读温度高字节MSB――设备复位,中止读取。
8温度的处理
该子函数重点实现温度的处理功能,并返回所测温度值绝对值的百倍数值。
unsigned int do_temperatuer (TPH,TPL) // TPH,TPL分别代表温度值的高、低字节
{ unsigned
您可能关注的文档
最近下载
- 生理性房室传导阻滞_刘仁光.pdf VIP
- 农村自来水厂建设工程分部分项施工方案和技术措施.pdf VIP
- (人教A版数学选择性必修一)2025年秋季学期讲义第12讲第一章空间向量与立体几何测评卷(基础卷)(学生版+教师版).docx VIP
- 《反恐怖防范管理规范 第2部分:医院》(DB22 T 3687.2-2025).pdf VIP
- 计算机视觉教程 作者 章毓晋 CCV04.ppt VIP
- 化工原理第四版谭天恩习题答案解析.pdf VIP
- 2025年高考物理(山东卷)试卷评析及2026高考备考策略 课件.pptx
- 人教版新版一年级语文上册课程纲要.pdf VIP
- 2025年广州地铁集团公司经营方针和战略.docx
- 2025年职业技能无人机驾驶员-民用无人机驾驶员理论知识参考题库含答案解析(5卷).docx VIP
文档评论(0)