ds18b20汇编设计报告附电路图和程序.docx

上传人:b****8 文档编号:10741779 上传时间:2023-02-22 格式:DOCX 页数:27 大小:367.09KB
下载 相关 举报
ds18b20汇编设计报告附电路图和程序.docx_第1页
第1页 / 共27页
ds18b20汇编设计报告附电路图和程序.docx_第2页
第2页 / 共27页
ds18b20汇编设计报告附电路图和程序.docx_第3页
第3页 / 共27页
ds18b20汇编设计报告附电路图和程序.docx_第4页
第4页 / 共27页
ds18b20汇编设计报告附电路图和程序.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

ds18b20汇编设计报告附电路图和程序.docx

《ds18b20汇编设计报告附电路图和程序.docx》由会员分享,可在线阅读,更多相关《ds18b20汇编设计报告附电路图和程序.docx(27页珍藏版)》请在冰豆网上搜索。

ds18b20汇编设计报告附电路图和程序.docx

ds18b20汇编设计报告附电路图和程序

基于AT89C51单片机和DS18B20的数字温度计

1课题说明

随着现代信息技术的飞速发展和传统工业改造的逐步实现,能够独立工作的温度检测和显示系统应用于诸多领域。

传统的温度检测以热敏电阻为温度敏感元件。

热敏电阻的成本低,但需后续信号处理电路,而且可靠性相对较差,测温准确度低,检测系统也有一定的误差。

这里设计的数字温度计具有读数方便,测温范围广,测温精确,数字显示,适用范围宽等特点。

本设计选用AT89C51型单片机作为主控制器件,DS18B20作为测温传感器,通过LCD1602实现温度显示。

通过DS18B20直接读取被测温度值,进行数据转换,该器件的物理化学性能稳定,线性度较好,在0℃~100℃最大线性偏差小于0.01℃。

该器件可直接向单片机传输数字信号,便于单片机处理及控制。

另外,该温度计还能直接采用测温器件测量温度,从而简化数据传输与处理过程。

2实现方法

采用数字温度芯片DS18B20测量温度,输出信号全数字化。

采用了单总线的数据传输,由数字温度计DS18B20和AT89C51单片机构成的温度测量装置,它直接输出温度的数字信号,也可直接与计算机连接。

采用AT89C51单片机控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便。

该系统利用AT89S51芯片控制温度传感器DS18B20进行实时温度检测并显示,能够实现快速测量环境温度,并可以根据需要设定上下限温度。

该系统扩展性非常强。

该测温系统电路简单、精确度较高、实现方便、软件设计也比较简单。

系统框图如图1所示。

图1DS18B20温度测温系统框图

3硬件设计

3.1单片机最小系统设计

3.1.1电源电路

图2电源电路

3.1.2振荡电路与复位电路

图3振荡电路图4复位电路

3.2DS18B20与单片机的接口电路

图5DS18B20与单片机的接口电路

 

3.3PROTEUS仿真电路图

图6PROTEUS仿真电路图

 

4软件设计

系统程序主要包括主程序、读取温度子程序、数据转换子程序、显示数据子程序等。

4.1程序流程

4.1.1主程序流程图

主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。

这样可以在一秒之内测量一次被测温度,其程序流程见图7所示。

图7主程序流程图

4.1.2各子程序流程图

1、初始化程序

所有操作都必须由初始化脉冲开始,波形如图,单片机先输出一个480~960us低电平到DQ引脚,再将DQ引脚置高电平,过15~60us后检测DQ引脚状态,若为低电平则DS18B20工作正常,否则初始化失败,不能正常测量温度。

2、读取温度子程序

读取温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。

主要包括以下三个命令:

(1)写暂存器命令【4EH】

这个命令为由TH寄存器开始向DS18B20暂存器写入数据,4EH命令后的3字节数据将被保存到暂存器的地址2、3、4(TH、TL、CONFIG)三个字节。

所有数据必须在复位脉冲前写完。

即如果只想写一个字节的数据到地址2,可按如下流程:

1、初始化;

2、写0CCH,跳过ROM检测;

3、写4EH;

4、写1字节数据;

5、复位,即向DQ输出480~960us低电平

(2)读暂存命令【BEH】

这个命令由字节0读取9个暂存器内容,如果不需要读取所有暂存内容,可随时输出复位脉冲终止读取过程

(3)转换温度命令【44H】

这个命令启动温度转换过程。

转换温度时DS18B20保持空闲状态,此时如果单片机发出读命令,DS18B20将输出0直到转换完成,转换完成后将输出1。

图8读取温度子程序

3、写流程图

写时隙:

写时隙由DQ引脚的下降沿引起。

18B20有写1和写0两种写时隙。

所有写时隙必须持续至少60μs,两个时隙之间至少有1μs的恢复时间。

DS18B20在DQ下降沿后15μs~60μs间采样DQ引脚,若此时DQ为高电平,则写入一位1,若此时DQ为低电平,则写入一位0,如图9所示。

所以,若想写入1,则单片机应先将DQ置低电平,15us后再将DQ置高电平,持续45μs;若要写入0,则将DQ置低电平,持续60μs。

 

图9写流程图

4、读流程图

读时隙:

读时隙由DQ下降沿引起,持续至少1μs的低电平后释放总线(DQ置1)DS18B20的输出数据将在下降沿15μs后输出,此时单片机可读取1位数据。

读时隙结束时要将DQ置1。

所有读时隙必须持续至少60μs,两个时隙之间至少有1μs的恢复时间。

图10读流程图

4.4汇编语言程序源代码

DATA_BUSBITP3.3

FLAGBIT00H

TEMP_LEQU30H

TEMP_HEQU31H

TEMP_DPEQU32H

TEMP_INTEQU33H

TEMP_BAIEQU34H

TEMP_SHIEQU35H

TEMP_GEEQU36H

DIS_BAIEQU37H

DIS_SHIEQU38H

DIS_GEEQU39H

DIS_DPEQU3AH

DIS_ADDEQU3BH

 

ORG0000H

AJMPSTART

ORG0050H

START:

MOVSP,#40H

MAIN:

LCALLREAD_TEMP

LCALLPROCESS

AJMPMAIN

 

;读温度程序

READ_TEMP:

LCALLRESET_PULSE

MOVA,#0CCH

LCALLWRITE

MOVA,#44H

LCALLWRITE

LCALLDISPLAY

LCALLRESET_PULSE

MOVA,#0CCH

LCALLWRITE

MOVA,#0BEH

LCALLWRITE

LCALLREAD

RET

 

;复位脉冲程序

RESET_PULSE:

RESET:

SETBDATA_BUS

NOP

NOP

CLRDATA_BUS

MOVR7,#255

DJNZR7,$

SETBDATA_BUS

MOVR7,#30

DJNZR7,$

JNBDATA_BUS,SETB_FLAG

CLRFLAG

AJMPNEXT

SETB_FLAG:

SETBFLAG

NEXT:

MOVR7,#120

DJNZR7,$

SETBDATA_BUS

JNBFLAG,RESET

RET

 

;写命令

WRITE:

SETBDATA_BUS

MOVR6,#8

CLRC

WRITING:

CLRDATA_BUS

MOVR7,#5

DJNZR7,$

RRCA

MOVDATA_BUS,C

MOVR7,#30H

DJNZR7,$

SETBDATA_BUS

NOP

DJNZR6,WRITING

RET

 

;循环显示段位

DISPLAY:

MOVR4,#200

DIS_LOOP:

MOVA,DIS_DP

MOVP2,#0FFH

MOVP0,A

CLRP2.7

LCALLDELAY2MS

MOVA,DIS_GE

MOVP2,#0FFH

MOVP0,A

SETBP0.7

CLRP2.6

LCALLDELAY2MS

 

MOVA,DIS_SHI

MOVP2,#0FFH

MOVP0,A

CLRP2.5

LCALLDELAY2MS

MOVA,DIS_BAI

MOVP2,#0FFH

MOVP0,A

MOVA,TEMP_BAI

CJNEA,#0,SKIP

AJMPNEXTT

SKIP:

CLRP2.4

LCALLDELAY2MS

NEXTT:

NOP

DJNZR4,DIS_LOOP

RET

 

;读命令

READ:

SETBDATA_BUS

MOVR0,#TEMP_L

MOVR6,#8

MOVR5,#2

CLRC

READING:

CLRDATA_BUS

NOP

NOP

SETBDATA_BUS

NOP

NOP

NOP

NOP

MOVC,DATA_BUS

RRCA

MOVR7,#30H

DJNZR7,$

SETBDATA_BUS

DJNZR6,READING

MOV@R0,A

INCR0

MOVR6,#8

SETBDATA_BUS

DJNZR5,READING

RET

 

;数据处理

PROCESS:

MOVR7,TEMP_L

MOVA,#0FH

ANLA,R7

MOVTEMP_DP,A

 

MOVR7,TEMP_L

MOVA,#0F0H

ANLA,R7

SWAPA

MOVTEMP_L,A

MOVR7,TEMP_H

MOVA,#0FH

ANLA,R7

SWAPA

ORLA,TEMP_L

MOVB,#64H

DIVAB

MOVTEMP_BAI,A

MOVA,#0AH

XCHA,B

DIVAB

MOVTEMP_SHI,A

MOVTEMP_GE,B

MOVA,TEMP_DP

MOVDPTR,#TABLE_DP

MOVCA,@A+DPTR

MOVDPTR,#TABLE_INTER

MOVCA,@A+DPTR

MOVDIS_DP,A

MOVA,TEMP_GE

MOVDPTR,#TABLE_INTER

MOVCA,@A+DPTR

MOVDIS_GE,A

MOVA,TEMP_SHI

MOVDPTR,#TABLE_INTER

MOVCA,@A+DPTR

MOVDIS_SHI,A

MOVA,TEMP_BAI

MOVDPTR,#TABLE_INTER

MOVCA,@A+DPTR

MOVDIS_BAI,A

RET

 

DELAY2MS:

MOVR6,#3

LOOP3:

MOVR5,#250

DJNZR5,$

DJNZR6,LOOP3

RET

 

TABLE_DP:

DB00H,01H,01H,02H,03H,03H,04H,04H,05H,06H

DB06H,07H,08H,08H,09H,09H

TABLE_INTER:

DB03FH,006H,05BH,04FH,066H

DB06DH,07DH,07H,07FH,06FH

 

END

5DS18B20简单介绍

DALLAS最新单线数字温度传感器DS18B20是一种新型的“一线器件”,其体积更小、更适用于多种场合、且适用电压更宽、更经济。

DALLAS半导体公司的数字化温度传感器DS18B20是世界上第一片支持“一线总线”接口的温度传感器。

温度测量范围为-55~+125摄氏度,可编程为9位~12位转换精度,测温分辨率可达0.0625摄氏度,分辨率设定参数以及用户设定的报警温度存储在EEPROM中,掉电后依然保存。

被测温度用符号扩展的16位数字量方式串行输出;其工作电源既可以在远端引入,也可以采用寄生电源方式产生;多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。

因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。

5.1DS18B20的性能特点如下:

●独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯

●DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温

●DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内

●适应电压范围更宽,电压范围:

3.0~5.5V,在寄生电源方式下可由数据线供电

●温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃

●零待机功耗

●可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温

●在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快

●用户可定义报警设置

●报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件

●测量结果直接输出数字温度信号,以"一线总线"串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力

●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作

以上特点使DS18B20非常适用与多点、远距离温度检测系统。

DS18B20内部结构主要由四部分组成:

64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。

DS18B20的管脚排列、各种封装形式如图12所示,DQ为数据输入/输出引脚。

开漏单总线接口引脚。

当被用着在寄生电源下,也可以向器件提供电源;GND为地信号;VDD为可选择的VDD引脚。

当工作于寄生电源时,此引脚必须接地。

图12外部封装形式

5.2DS18B20使用中的注意事项

DS18B20虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意以下几方面的问题:

●DS18B20从测温结束到将温度值转换成数字量需要一定的转换时间,这是必须保证的,不然会出现转换错误的现象,使温度输出总是显示85。

●在实际使用中发现,应使电源电压保持在5V左右,若电源电压过低,会使所测得的温度精度降低。

●较小的硬件开销需要相对复杂的软件进行补偿,由于DS1820与微处理器间采用串行数据传送,因此,在对DS1820进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。

在使用PL/M、C等高级语言进行系统程序设计时,对DS1820操作部分最好采用汇编语言实现。

●在DS18B20的有关资料中均未提及单总线上所挂DS18B20数量问题,容易使人误认为可以挂任意多个DS18B20,在实际应用中并非如此,当单总线上所挂DS18B20超过8个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时要加以注意。

●在DS18B20测温程序设计中,向DS18B20发出温度转换命令后,程序总要等待DS18B20的返回信号,一旦某个DS18B20接触不好或断线,当程序读该DS18B20时,将没有返回信号,程序进入死循环,这一点在进行DS18B20硬件连接和软件设计时也要给予一定的重视。

5.3DS18B20内部结构

图13为DS1820的内部框图,它主要包括寄生电源、温度传感器、64位激光ROM单线接口、存放中间数据的高速暂存器(内含便笺式RAM),用于存储用户设定的温度上下限值的TH和TL触发器存储与控制逻辑、8位循环冗余校验码(CRC)发生器等七部分。

DS18B20采用3脚PR-35封装或8脚SOIC封装,其内部结构框图如图6所示

图13DS18B20内部结构框图

64b闪速ROM的结构如下:

8bit检验CRC

48bit序列号

8bit工厂代码(10H)

MSBLSBMSBLSBMSBLSB

开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。

温度报警触发器TH和TL,可通过软件写入户报警上下限。

主机操作ROM的命令有五种,如表所列

DS18B20温度传感器的内部存储器

还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。

高速暂存RAM的结构为8字节的存储器,结构如图14所示。

便笺式存储器(上电状态)

温度测量值LSB(50H)

温度测量值MSB(50H

TH高温寄存器

TL低温寄存器

配位寄存器

预留(FFH)

预留(OCH)

预留(IOH)

循环冗余码校验(CRC)

(85℃)

E2PROM

Byte0

Byte1

TH高温寄存器

TL低温寄存器

配位寄存器

Byte2

Byte3

Byte4

Byte5

Byte6

Byte7

Byte8

图14高速暂存RAM结构图

前2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。

第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。

DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。

温度低位

温度高位

TH

TL

配置

保留

保留

保留

8位CRC

LSBMSB

当DS18B20接收到温度转换命令后,开始启动转换。

转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1,2字节。

单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式以0.0625℃/LSB形式表示。

温度值格式如下:

23

22

21

20

2-1

2-2

2-3

2-4

MSBLSB

S

S

S

S

S

26

25

24

MSBLSB

这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。

图中,S表示位。

对应的温度计算:

当符号位S=0时,表示测得的温度植为正值,直接将二进制位转换为十进制;当S=1时,表示测得的温度植为负值,先将补码变换为原码,再计算十进制值。

例如+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FF6FH,-55℃的数字输出为FC90H。

DS18B20温度传感器主要用于对温度进行测量,数据可用16位符号扩展的二进制补码读数形式提供,并以0.0625℃/LSB形式表示。

表2是部分温度值对应的二进制温度表示数据。

表2部分温度值

温度/℃

二进制表示

十六进制表示

+125

0000011111010000

07D0H

+25.0625

0000000110010001

0191H

+0.5

0000000000001000

0008H

0

0000000000000000

0000H

-0.5

1111111111111000

FFF8H

-25.0625

1111111001101111

FE6FH

-55

1111110010010000

FC90H

 

DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节内容作比较,若T>TH或T

因此,可用多只DS18B20同时测量温度并进行告警搜索。

在64位ROM的最高有效字节中存储有循环冗余校验码(CRC)。

主机根据ROM的前56位来计算CRC值,并和存入DS18B20中的CRC值做比较,以判断主机收到的ROM数据是否正确。

5.4DS18B20测温原理

DS18B20的测温原理如图15所示,图中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量.计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55℃所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在-55℃所对应的一个基数值。

减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温图2中的斜率累加器用于补偿和修正测温过程中的非线性其输出用,于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值,这就是DS18B20的测温原理。

另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。

系统对DS18B20的各种操作必须按协议进行。

操作协议为:

初始化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。

 

图15DS18B20测温原理图

在正常测温情况下,DS1820的测温分辨力为0.5℃,可采用下述方法获得高分辨率的温度测量结果:

首先用DS1820提供的读暂存器指令(BEH)读出以0.5℃为分辨率的温度测量结果,然后切去测量结果中的最低有效位(LSB),得到所测实际温度的整数部分Tz,然后再用BEH指令取计数器1的计数剩余值Cs和每度计数值CD。

考虑到DS1820测量温度的整数部分以0.25℃、0.75℃为进位界限的关系,实际温度Ts可用下式计算:

Ts=(Tz-0.25℃)+(CD-Cs)/CD

6总结与体会

在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,举个例子,以前写的那几次,数据加减时,我用的都是BCD码,这一次,我全部用的都是16进制的数直接加减,显示处理时在用除法去删分,感觉效果比较好,有好多的东西,只有我们去试着做了,才能真正的掌握,只学习理论有些东西是很难理解的,更谈不上掌握。

从这

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 临床医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1