基于DS18B20的温度采集系统数码管显示的设计说明.docx
《基于DS18B20的温度采集系统数码管显示的设计说明.docx》由会员分享,可在线阅读,更多相关《基于DS18B20的温度采集系统数码管显示的设计说明.docx(22页珍藏版)》请在冰豆网上搜索。
![基于DS18B20的温度采集系统数码管显示的设计说明.docx](https://file1.bdocx.com/fileroot1/2022-12/13/6927acf1-5335-4e77-a387-ceabc70da700/6927acf1-5335-4e77-a387-ceabc70da7001.gif)
基于DS18B20的温度采集系统数码管显示的设计说明
课程设计任务书
题目基于DS18B20的温度采集系统(数码管显示)的设计
系(部)信息科学与电气工程学院
专业电子信息工程
班级电信091
学生
学号
12月26日至12月30日共1周
指导教师(签字)
系主任(签字)
年月日
摘要
随着人们生活水平的不断提高,单片机技术已经普与到我们生活,工作,科研等各个领域。
单片机控制无疑是人们追求的目标之一,它所给人带来的方便是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。
本文利用单片机结合传感器技术开发设计,把传感器理论与单片机实际应用有机结合,详细地讲述了利用温度传感器DS18B20测量环境温度,设置上下报警温度,当温度不在设置围是,可以报警。
同时51单片机在现代电子产品中广泛应用以与其技术已经非常成熟,DS18B20可以直接读出被测温度值,而且采用一线制与单片机相连,减少了外部的硬件电路,具有低成本和易使用的特点
关键词:
单片机控制、温度检测、温度传感器、温度报警、低成本、易使用
Abstract
Withthecontinuousimprovementoflivingstandard,singlechiptechnologyhasspreadtoourlives,work,researchandotherfields.SCMisundoubtedlyoneofthegoalspeoplepursue,theconvenienceitbringsisnotnegative,inwhichdigitalthermometerisatypicalexample,butitrequiresmoreandmorepeopletoworkforthemodernman,research,provideabetterlife,moreconvenientfacilitiesneedtostartfromafewmicrocontrollertechnology,alltowardthedigitalcontrol,intelligentcontroldirection.Inthispaper,combinedwithsensortechnologydevelopmentanddesignofsinglechip,thesensorapplicationoftheoryandpracticalcombinationofSCMindetailabouttheuseoftemperaturesensorsmeasuretheambienttemperatureDS18B20,settheupperandloweralarmtemperaturerangewhenthetemperatureisnotsetisforthepolice.51Microalsowidelyusedinmodernelectronicproductsanditstechnologyiswellestablished.DS18B20candirectlyreadthemeasuredtemperature,andtheuseoffront-linesystemisconnectedwiththemicrocontroller,reducingtheexternalhardwarecircuit,thecharacteristicsoflowcostandeaseofuse.
Keywards:
SCMcontrol、temperaturemeasure、temperaturesensorstemperaturealarming、lowcost、easeofuse
一、设计容与要求
利用DS18B20实现温度采集,并用数码管显示(用proteus实现)。
二、芯片资料
1、DS18B20
1.1DS18B20的工作原理
DS18B20的读写时序和测温原理与DS1820一样,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。
DS18B20测温原理如图3所示。
图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。
高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。
计数器1和温度寄存器被预置在-55℃所对应的一个基数值。
计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。
图3中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。
DS18B20有4个主要的数据部件:
(1)光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。
64位光刻ROM的排列是:
开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。
光刻ROM的作用是使每一个DS18B20都各不一样,这样就可以实现一根总线上挂接多个DS18B20的目的。
(2)DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:
用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。
表1:
DS18B20温度值格式表
这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。
例如+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FF6FH,-55℃的数字输出为FC90H。
表2:
DS18B20温度数据表
(3)DS18B20温度传感器的存储器
DS18B20温度传感器的部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的EEPRAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。
(4)配置寄存器
该字节各位的意义如下:
TM
R1
R0
1
1
1
1
1
表3:
配置寄存器结构
低五位一直都是"1",TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。
在DS18B20出厂时该位被设置为0,用户不要去改动。
R1和R0用来设置分辨率,如下表所示:
(DS18B20出厂时被设置为12位)
R1
R0
分辨率
温度最大转换时间
0
0
9位
93.75ms
0
1
10位
187.5ms
1
0
11位
375ms
1
1
12位
750ms
表4:
温度分辨率设置表
序号
名称
引脚功能描述
1
GND
地信号
2
DQ
数据输入/输出引脚。
开漏单总线接口引脚。
当被用着在寄生电源下,也可以向器件提供电源。
3
VDD
可选择的VDD引脚。
当工作于寄生电源时,此引脚必须接地。
1.2DS18B20的使用方法
由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。
由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。
DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。
该协议定义了几种信号的时序:
初始化时序、读时序、写时序。
所有时序都是将主机作为主设备,单总线器件作为从设备。
而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。
数据和命令的传输都是低位在先。
DS18B20的初始化
(1)先将数据线置高电平“1”。
(2)延时(该时间要求的不是很严格,但是尽可能的短一点)
(3)数据线拉到低电平“0”。
(4)延时750微秒(该时间的时间围可以从480到960微秒)。
(5)数据线拉到高电平“1”。
(6)延时等待(如果初始化成功则在15到60毫秒时间之产生一个由DS18B20所返回的低电平“0”。
据该状态可以来确定它的存在,但是应注意不能无限的进行等待,不然会使程序进入死循环,所以要进行超时控制)。
(7)若CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从发出的高电平算起(第(5)步的时间算起)最少要480微秒。
(8)将数据线再次拉高到高电平“1”后结束。
DS18B20的写操作
(1)数据线先置低电平“0”。
(2)延时确定的时间为15微秒。
(3)按从低位到高位的顺序发送字节(一次只发送一位)。
(4)延时时间为45微秒。
(5)将数据线拉到高电平。
(6)重复上
(1)到(6)的操作直到所有的字节全部发送完为止。
(7)最后将数据线拉高。
DS18B20的读操作
(1)将数据线拉高“1”。
(2)延时2微秒。
(3)将数据线拉低“0”。
(4)延时3微秒。
(5)将数据线拉高“1”。
(6)延时5微秒。
(7)读数据线的状态得到1个状态位,并进行数据处理。
(8)延时60微秒。
ROM指令表
指令
约定代码
功能
读ROM
33H
读DS1820温度传感器ROM中的编码(即64位地址)
符合ROM
55H
发出此命令之后,接着发出64位ROM编码,访问单总线上与该编码相对应的DS1820使之作出响应,为下一步对该DS1820的读写作准备。
搜索ROM
0FOH
用于确定挂接在同一总线上DS1820的个数和识别64位ROM地址。
为操作各器件作好准备。
跳过ROM
0CCH
忽略64位ROM地址,直接向DS1820发温度变换命令。
适用于单片工作。
告警搜索命令
0ECH
执行后只有温度超过设定值上限或下限的片子才做出响应。
RAM指令表
指令
约定代码
功能
温度变换
44H
启动DS1820进行温度转换,12位转换时最长为750ms(9位为93.75ms)。
结果存入部9字节RAM中。
读暂存器
0BEH
读部RAM中9字节的容
写暂存器
4EH
发出向部RAM的3、4字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。
复制暂存器
48H
将RAM中第3、4字节的容复制到EEPROM中。
重调EEPROM
0B8H
将EEPROM中容恢复到RAM中的第3、4字节。
读供电方式
0B4H
读DS1820的供电模式。
寄生供电时DS1820发送“0”,外接电源供电DS1820发送“1”。
2、AT89C51
2.1AT89C51简介
AT89S51美国ATMEL公司生产的低功耗,高性能CMOS8位单片机,片含4KBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统与AT89C51引脚结构,芯片集成了通用8位中央处理器和ISPFlash存储单元。
单片机AT89S51强大的功能可为许多嵌入式控制应用系统提供高性价比的解决方案。
2.2AT89C51功能
AT89S51提供以下标准功能:
40个引脚、4KBytesFlash片程序存储器、128Bytes的随机存取数据存储器(RAM)、32个外部双向输入/输出(I/O)口、5个中断优先级2层中断嵌套中断、2个数据指针、2个16位可编程定时/计数器、2个全双工串行通信口、看门狗(WDT)电路、片振荡器与时钟电路。
此外,AT89S51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式,空闲模式,CPU暂停工作,而RAM、定时/计数器、串行通信口、外中断系统可继续工作。
掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。
同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求
2.3AT89C51引脚
P0口:
P0口为一个8位漏级开路双向I/O口,也即地址/数据总线复用口。
作为输出口用时,能驱动8个TTL逻辑门电路。
对端口写“1”时,被定义为高阻输入。
在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活部上拉电阻。
在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。
P1口:
P1口是一个带部上拉电阻的8位双向I/O口,P1口的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(I
)。
P2口:
P2口是一个带有部上拉电阻的8位双向I/O口,P2口的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(I
)。
在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVXDPTR指令)时,P2口送出高8位地址数据。
在访问8位地址的外部数据寄存器(例如执行MOVXRi指令)时,P2口线上的容(也即特殊功能寄存器(SFR)区中P2寄存器的容),在整个访问期间不改变。
P3口:
P3口是一个带有部上拉电阻的双向8位I/O口,P3口的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对P3口写“1”时,它们被部的上拉电阻拉高并可作为输入端口。
作输入口使用时,被外部信号拉低的P3口将用上拉电阻输出电流(I
)。
RST:
复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上的高电平时间将使单片机复位。
WDT溢出将使该引脚输出高电平,设置SFRAUXR的DISRTO位(地址8EH)可打开或关闭该功能。
DISRTO位缺省为RESET输出高电平打开状态。
ALE/:
当访问外部存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。
即使不访问外部寄存器,ALE仍以时钟振荡频率的1/6输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。
值得注意的是:
每当访问外部数据存储器时将跳过一个ALE脉冲。
对Flash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。
如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。
该位置位后,只要一条MOVX和MOVC指令才会激活ALE。
此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE无效。
:
程序存储允许(
)输出是外部程序存储器的读选通信号,当AT89S51由外部程序存储器取指令(或数据)时,每个机器周期两次
有效,即输出两个脉冲。
当访问外部数据存储器时,没有两次有效的
信号。
EA/VPP:
外部访问允许。
欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。
需要注意的是:
如果加密位LB1被编程,复位时部会锁存EA端状态。
如EA端保持高电平(接VCC端),CPU则执行部程序存储器中的指令。
三、系统流程
1、读DS18B20的子程序2、读转换温度子程序
3、写DS18B20的子程序
四、电路与程序设计
1、程序设计
TEMP1EQU5AH;符号位和耗电量位公用的存放单元
TEMP2EQU5BH;十位存放单元
TEMP3EQU5CH;个位存放单元
TEMP4EQU5DH
TEMP5EQU5EH;数据临时存放单元
TEMP6EQU5FH
TEMP7EQU60H
TEMP8EQU61H
ORG0000H
AJMPMAIN
ORG0030H
MAIN:
MOVSP,#70H
LCALLINT;调用DS18B20初始化函数
MAIN1:
LCALLGETTEMP;调用温度转换函数
LCALLCHULI;调用温度计算函数
LCALLDISP;调用温度显示函数
AJMPMAIN1;循环
INT:
L0:
SETBP3.6;先释放DQ总线
MOVR2,#250;给R2赋延时初值,同时可让DQ保持高电平2US
L1:
CLRP3.6;给DQ一个复位低电平
DJNZR2,L1;保持低电平的时间至少为480US
SETBP3.6;再次拉高DQ释放总线
MOVR2,#25
L2:
DJNZR2,L2;保持15US-60US
CLRC
ORLC,P3.6;判断是否收到低脉冲
JCL0
MOVR6,#100
L3:
ORLC,P3.6
DJNZR6,L3;存在低脉冲保持60US-240US
;JCL0;否则继续从头开始,继续判断
SETBP3.6
RET
;调用温度转换函数
GETTEMP:
CLRPSW.4
SETBPSW.3;设置工作寄存器当前所在的区域
CLREA;使用DS18B20前一定要禁止任何中断
LCALLINT;初始化DS18B20
MOVA,#0CCH;送入跳过ROM命令
LCALLWRITE
MOVA,#44H;送入温度转换命令
LCALLWRITE
NOP
LCALLDELAY
LCALLINT;温度转换完成,再次初始化
MOVA,#0CCH;送入跳过ROM命令
LCALLWRITE
MOVA,#0BEH;送入读温度暂存器命令
LCALLWRITE
LCALLREAD
MOVTEMP4,A;读出温度的低字节存在TEMP4
LCALLREAD
MOVTEMP5,A;读出温度的高字节存在TEMP5
SETBEA
RET
CHULI:
MOVA,TEMP5;将温度的高字节取出
JNBACC.7,ZHENG;判断最高们是否为0,为则表示温度为正,则转到ZHENG否则温度为负,将温度的低字节取出
MOVA,TEMP4
CPLA;求反
INCA;加工厂
MOVTEMP8,A;存到TEMP8
ANLA,#0FH;保留低四位
LCALLMULD;调用乘以625子程序
LCALLHB2;调用双字节16进制数转成BCD码子程序
MOVA,R4;将结果的千位百位取出
ANLA,#0F0H;保留千位
SWAPA
MOVTEMP7,A;把小数结果保存在TEMP7中
MOVA,TEMP4;再次取出温度低字节
ANLA,#0FFH;判断是否为0
JZXX;为何则转到XX执行
MOVA,TEMP5
CPLA;不为则直接将温度的高字节取反
SJMPYY
XX:
MOVA,TEMP5;为0则求补码
CPLA
INCA
YY:
ANLA,#0F0H;保留高字节的低四位
SWAPA;将其换到高4位
MOVR5,A;暂时保存于R5中
MOVA,TEMP8;取出求反后的低位字节
ANLA,#0F0H;取其高四位
SWAPA;将其换到低四位
ORLA,R5;合并成温度的整数部分
MOVTEMP6,A;将整数部分存到TEMP6中
LCALLHBCD;调用一字节的16进制转换BCD数的子程序
MOVTEMP1,#0BH;将号的段选值存到符号位
MOVA,TEMP2;取出十位
CJNEA,#00H,NEXT
MOVTEMP2,#0CH;十位为0不显示
RET
ZHENG:
MOVA,TEMP4;将温度的低字节取出
ANLA,#0FH;保留低四位
LCALLMULD;调用乘以625子程序
LCALLHB2;调用双字节16进制数转换成BCD码子程序
MOVA,R4;将结果的千位百位取出
ANLA,#0F0H;保留千位
SWAPA
MOVTEMP7,A;把小数结果保存在TEMP7中
MOVA,TEMP4;再次取出温度的低字节
ANLA,#0F0H
SWAPA;换到低4位
MOVR5,A;暂时保存于R5中
MOVA,TEMP5;取出温度的高字节
ANLA,#0FH;保留低4位
SWAPA;换到高4位
ORLA,R5;合并成温度的整数部分
MOVTEMP6,A;整数部分存到TEMP6中
LCALLHBCD;单字节的16进制转换成BCD码
MOVA,TEMP1;取出百位
CJNEA,#00H,NEXT;百位不为0则转NEXT
MOVTEMP1,#0CH;为0则不显
MOVA,TEMP2;取出十位
CJNEA,#00H,NEXT
MOVTEMP2,#0CH;十位为0也不是
NEXT:
RET
MULD:
MOVR3,A
MOVB,#71H
MULAB
MOVR7,A
MOVR6,B
MOVB,#02H
MOVA,R3
MULAB
ADDA,R6
MOVR6,A
RET
WRITE:
MOVR3,#8;一个字节共8位
WR1:
SETBP3.6;先释放总线
MOVR4,#8
RRCA;把要写的字节的最低位右环移到C中
CLRP3.6;把C中的位写到DQ总线中
WR3:
DJNZR4,WR3;保持低电平0-15US
MOVP3.6,C;
MOVR4,#20
DJ