DS18B20 温度采集报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

南京信息工程大学

滨江学院

课程论文

(单片机原理及应用)

题目DS18B20 温度采集报告

学生姓名仇丽华

学号20082305902

院系滨江学院电子工程

专业电子信息工程

指导教师朱艳萍

概述

硬件电路的单片机芯片采用A T89S52芯片,进行数据处理。数据采集部分的传感器采用DS18B20芯片数字温度传感器。,用七段LED数码显示器显示测量的温度值,超过预定的温度值则会产生报警。

硬件电路设计

1、AT89S52芯片

A T89S52是一种低功耗、高性能CMOS 8位微控制器,

具有8K 在系统可编程Flash 存储器。使用Atmel 公司

高密度非易失性存储器技术制造,与工业80C51 产品指

令和引脚完全兼容。片上Flash允许程序存储器在系统

可编程,亦适于常规编程器。在单芯片上,拥有灵巧的

8 位CPU 和在系统可编程Flash,使得A T89S52在众多

嵌入式控制应用系统中得到广泛应用。

2、DS18B20芯片

(1) DS18B20简介

DS18B20是由美国DALLAS公司生产的单线数字温度传感器芯片。与传统的热敏电阻有所不同,DS18B20可直接将被测温度转化为串行数字信号,以供单片机处理,它还具有微型化、低功率、高性能、抗干扰能力强等优点。通过编程,DS18B20可以实现9~12位的温度读数。信息经过单线接口送入DS18B20或从DS18B20送出,因此从微处理器到DS18B20仅需连接一条信号线和地线。读、写和执行温度变换所需的电源可以由数据线本身提供,而不需要外部电源。

(2) DS18B20的引脚功能

DS18B20的引脚(图7-10),其功能如表7-8所示。

(3) DS18B20的主要特点

采用单线技术,与单片机通信只需一个引脚;

通过识别芯片各自唯一的产品序列号从而实现单线多挂接,简化了分布式温度检测的应用;

实际应用中不需要外部任何器件即可实现测温;

可通过数据线供电,电压的范围在3~5.5V;

不需要备份电源;

测量范围为-55~+125℃,在-10~+85℃范围内误差为0.5℃;

数字温度计的分辨率用户可以在9位到12位之间选择,可配置实现9~12位的温度读数;

将12位的温度值转换为数字量所需时间不超过750ms;

用户定义的,非易失性的温度告警设置,用用户可以自行设定告警的上下限温度。(4)DS18B20内部结构

64位ROM的结构开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。温度报警触发器TH和TL,可通过软件写入户报警上下限。

DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。高速暂存RAM的结构为8字节的存储器,结构如图3所示。头2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。该字节各位的定义如下图所示。低5位一直为1,TM是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,用户要去改动,R1和R0决定温度转换的精度位数,来设置分辨率

DS18B20内部结构

3、实验原理图

A T89S52控制DS18B20完成温度转换必须经过三个步骤:初始化、ROM操作指令、存储器操作指令,必须先启动DS18B20开始转换,再读出温度转换值,本实验系统挂接一个DS18B20芯片,可使用默认的12位转换精度,外接供电电源,单片机与DS18B20的接口用的是单片节的P2.4口。

电路焊接时按照电路图焊接,将电源部分、ISP接口、18B20、蜂鸣器、LED显示和单片机模块连接起来,按照引脚相同标号连接。等焊接完成后将程序下载到芯片里进行调试。查看焊接的板子有没有问题。我们的板子刚刚下进去程序后数码管没显示,后经过检查,发现数码管的引脚焊反了,改正后板子能够正确显示。板子显示29.8,温度没有超过设定的30,所以蜂鸣器不会响。

软件设计

实验原理

测温系统的原理主要是DS18B20去采集温度,然后单片机负责提供时钟频率,分析处理数据,送给LED显示。DS18B20低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在-55℃所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累

加,此时温度寄存器中的数值即为所测温度。原理图的18、19脚就是晶振原理图,9脚是复位原理图,可以使单片机清零。

实验内容

(1)如下的流程图,在keil编译环境下编制程序,需要采集温度并判断温度所处范围,如果超出温度范围则报警;报警通过实验板上的蜂鸣器实现,报警温度可以通过键盘设置;最后生成*.HEX文件。

(2)通过ISP将生成的*.HEX文件下载到单片机中,运行程序。

(3)观测LCD上显示的温度数据,通过键盘操作控制报警温度。

主流程图

中断流程图

程序代码

//DS18B20温度传感器程序

# include

# define Alarm 10

sbit Beep=P3^4;

sbit DQ=P2^4;

unsigned char tempL=0,tempH=0; //数据传输线接单片机的相应引脚

unsigned char flag=0; //设全局变量

unsigned int temperature,negtemper; //温度值保存在temperature里

unsigned char idata addrdat[2]={0x0,0x0};

unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};/*0123456789*/ unsigned char tab1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};

unsigned char dispbuf[3]={0,0,0};

unsigned char warning=20;

bit on=0,off=1;

//***************************************************************************** //延时子程序//**

void delay(unsigned int i)

{while(i--);}

void beep(bit i)

{Beep=i;}

//***************************************************************************** //初始化程序

Init_DS18B20(void)

{unsigned char x=0;

DQ=1; //DQ先置高

dalay(8); //稍延时

DQ=0;//发送复位脉冲

delay(85); //延时(>480us)

DQ=1; //拉高数据线

delay(14); //等待(15~60us)

x=DQ; //用x的值来判断初始化程序有没有成功,DS18B20存在的话x=0,

//否则为1

delay(20);

}//**************************************************************************** //读一个字节

ReadOneChar(void) //主机数据线先从高电平拉至低电平,保持1ms以上,

//再使数据线升为高电平,从而产生读信号

{unsigned char i=0; //每个读周期最短的持续时间为60us,各个读周期之间

//必须有一个1ms以上的高电平恢复期

unsigned char dat=0;

for(i=8;i>0;i--) //一个字节有8位

{DQ=1;

相关文档
最新文档