ds18b20汇编设计报告附电路图和程序.docx
- 文档编号:29395948
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:27
- 大小:379.85KB
ds18b20汇编设计报告附电路图和程序.docx
《ds18b20汇编设计报告附电路图和程序.docx》由会员分享,可在线阅读,更多相关《ds18b20汇编设计报告附电路图和程序.docx(27页珍藏版)》请在冰豆网上搜索。
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)
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进制的数直接加减,显示处理时在用除法去删分,感觉效果比较好,有好多的东西,只有我们去试着做了,才能真正的掌握,只学习理论有些东西是很难理解的,更谈不上掌握。 从这次的设计中,我真真正正的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ds18b20 汇编 设计 报告 电路图 程序