DS18B20汇编程序编写实例.docx
《DS18B20汇编程序编写实例.docx》由会员分享,可在线阅读,更多相关《DS18B20汇编程序编写实例.docx(28页珍藏版)》请在冰豆网上搜索。
DS18B20汇编程序编写实例
多路温度采集显示系统设计与总结报告
参赛选手:
摘要:
在传统的模拟信号远距离温度测量系统中,需要很好的解决引线误差补偿问题、多点测量切换误差问题和放大电路零点漂移误差问题等技术问题,才能够达到较高的测量精度。
另外一般监控现场的电磁环境都非常恶劣,各种干扰信号较强,模拟温度信号容易受到干扰而产生测量误差,影响测量精度。
因此,在温度测量系统中,采用抗干扰能力强的新型数字温度传感器是解决这些问题的最有效方案,新型数字温度传感器DS18B20具有体积更小、精度更高、适用电压更宽、采用一线总线、可组网等优点,在实际应用中取得了良好的测温效果。
关键词:
数字温度传感器,单总线
Abstract:
Inthetraditionalanalogsignallong-distancetemperaturemeasuringsystem,needgoodsolvefuseserrorcompensationproblem,multi-pointmeasurementerrorandamplifyingcircuitswitchingzerodrifterrorproblemandsomeothertechnicalproblems,onlythencanachievehighmeasuringaccuracy.Alsogeneralmonitoringsiteoftheelectromagneticenvironmentisverybad,allkindsofjam,affectprecision,Therefore,intemperaturemeasuringsystem,usinganti-jammingabilityofthenewdigitaltemperaturesensoristosolvetheseproblems,themosteffectivesolutionnewdigitaltemperaturesensorDS18B20havesmaller,higheraccuracy,voltageappliedtowiderandadopt1-wirebus,etc,andnetworkinginpracticalapplicationmade.Keyword:
Digitaltemperaturesensor,1-wirebus
目录
1系统方法选择和论证1
1.1题目要求1
1.1.1基本要求1
1.1.2说明1
1.2系统基本方案1
1.2.1各模块方案选择和论证1
1.2.2系统各模块的最终方案3
2.系统的硬件设计与实现3
2.1系统的硬件基本组成部分3
2.2主要单元电路的设计4
2.2.1传感器部分电路4
2.2.2七段数码管4
3.系统程序设计4
3.1系统的软件设计4
3.2温度转换设计4
3.3系统主程序流程图5
4.系统测试6
4.1测试仪器6
4.2指标测试6
4.2.1动态显示的测试6
4.2.2多路温度采集的测试6
4.2.3系统实现的功能6
4.3结论6
5.总结7
参考文献7
附录1:
元器件清单7
附录2:
系统电路图8
附录3:
程序清单8
附录4:
DS18B20的通讯协议及读写复位等程序11
附录5:
其他子程序的设计16
附录6:
系统使用说明书20
1系统方法选择和论证
1.1题目要求
1.1.1基本要求
设计并制作一个多路温度测量系统,并显示出所测量的温度。
1.1.2说明
本系统采用数字温度计,测量温度范围为-55℃~125℃,温度精确度为0.1℃
1.2系统基本方案
根据题目的要求,系统可以划分为控制和检测部分。
其中信号检测部分包括:
温度采集,模数转换。
控制部分包括:
温度采集模块与显示模块。
模块框图如图1.2.1所示。
1.2.1各模块方案选择和论证
(1)控制器模块
根据题目的要求,控制器主要用于传感器的数据处理和显示处理,对于控制器有以下两种方案。
方案一:
采用FPGA(现场可编程序门列阵)作为系统的控制器。
FPGA可以实现各种复杂的逻辑功能,规模大,密度高,它将所有的器件集中在一块芯片上,减小了体积,提高了系统的稳定性,并且可以应用EDA仿真、调试,易于进行功能扩展,但是由于温度处理不需要这么复杂的控制器,而且该控制器价格昂贵,硬件电路连接有点困难,加重了电路设计和实际焊接的工作。
方案二:
采用ATMEL公司的AT89S52作为系统控制器的方案。
单片机算术运算能力强,软件编程灵活、自由度大,可用软件编程实现各种算法和逻辑控制,并且由于其功耗低、体积小、技术成熟和成本低等优点,使其广泛应用各个领域。
基于上述方案分析控制器模块我们选择AT89S52作为系统控制器的方案。
(2)温度采集模块
方案一:
采用热敏温度传感器LM35。
LM35是模拟温度传感器,因此需要相应的处理电路,但该电路设计复杂,对电源要求严格,而且还容易受外界因数影响,就从成本方面考虑也没有必要这么大费周章。
该方案的框图模块如图1.2.2所示
方案二:
采用DS18B20新型数字温度传感器。
美国Dallas半导体公司的数字化温度传感器DS1820是世界上第一片支持"一线总线"接口的温度传感器,在其内部使用了在板(ON-B0ARD)专利技术。
全部传感元件及转换电路集成在形如一只三极管的集成电路内。
一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。
现在,新一代的DS18B20体积更小、更经济、更灵活。
使你可以充分发挥“一线总线”的优点。
(备注:
由于实验器材的限制,使我无法更改硬件电路,因此我只能在一条总线上挂一个传感器),
该方案的框图模块如图1.2.3所示
DS18B20温度传感器1
AT89S52
图1.2.3
DS18B20温度传感器2
(3)显示模块
显示系统是单片机控制系统的重要组成部分,主要用于显示各种参数的值,以便使现场工作人员能够及时掌握生产过程。
工业控制系统中常用的显示器件有CRT、LED、LCD等。
CRT不仅可以进行字符显示,而且可以进行画面显示,和计算机配合使用,可十分方便地实现生产过程的管理和监视。
但由于CRT体积大,价格昂贵,所以只适用于大型微机控制系统。
在中小型的控制过程中,为了使工作人员能够在现场直接看到生产情况和报警信号,经常选用LED和LCD作为显示器件。
LED和LCD都具有体积小,功耗低,响应速度快,易于匹配,可靠性高和寿命高等优点。
LCD是一种功耗极低的显示元件,在仪表和低功耗应用系统中的使用较多,而LED成本低廉,培植灵活,多用于单片机控制系统中,所以选用LED显示。
方案一:
采用LED的静态显示。
静态显示,显示直观,程序设计简单,但由于显示多位数码时需要占用单片机大量的I/O口,显然这种方案是不合理的。
方案二:
采用LED的动态显示。
动态显示可以利用少量的I/O口显示较多的字符,我们利用单片机译码并输出供LED显示字符,而且电路连接十分简便,是最理想的选择。
1.2.2系统各模块的最终方案
经过仔细分析和论证,决定了系统各模块的最终方案如下:
(1)控制模块:
AT89S52
(2)温度采集模块:
DS18B20
(3)显示模块:
六位LED七段数码管
系统的基本框图如图1.2.4所示
2.系统的硬件设计与实现
2.1系统的硬件基本组成部分
本题是一个多路温度采集并显示的综合设计,在设计中主要的就是运用数字温度传感器传输数据。
系统可以分为传感器检测部分和动态显示部分。
传感器检测部分:
系统利用该硬件测量温度并传输给单片机来处理。
动态显示部分:
采用6位数码管共阳极动态显示,由于是采用动态显示,故会需要些驱动,本系统采用74LS07集电极开路六正向高压驱动器作为数码管的驱动。
2.2主要单元电路的设计
2.2.1传感器部分电路
2.2.2七段数码管
本实验采用六位共阳极显示如表1所示
表一:
七段数码管共阳极显示
显示七段数码
0
1
2
3
4
5
6
7
8
9
a
1
0
1
1
0
1
1
1
1
1
b
1
1
1
1
1
0
0
1
1
1
c
1
1
0
1
1
1
1
1
1
1
d
1
0
1
1
0
1
1
0
1
1
e
1
0
1
0
0
0
1
0
1
0
f
1
0
0
0
1
1
1
0
1
1
g
0
0
1
1
1
1
1
0
1
1
dp
0
0
0
0
0
0
0
0
0
0
十六进制代码
3FH
06H
5BH
4FH
66H
6DH
7DH
07H
7FH
6FH
3.系统程序设计
3.1系统的软件设计
硬件简单,那么软件就相对复杂多了,由于篇幅限制,详细设计请参见附录4
3.2温度转换设计
由传感器传送了两个字节的温度,是以补码形式存储的,默认传感器精度为12位表2所示的是12位转化后得到的12位数据,存储在DS18B20的两个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:
部分温度转换表
3.3系统主程序流程图
根据DS18B20通讯协议的规定,温度转换的程序流程图如图3.5.1所示。
4.系统测试
4.1测试仪器
1.万用表MF-47A
2.NokiaAC-8C电源适配器
3.标准数字温度计
4.2指标测试
根据实际测量温度的误差只有±0.1℃(可能我所用的参照物也有些误差)
4.2.1动态显示的测试
能正常显示字符,观看的时候没有明显的闪烁
4.2.2多路温度采集的测试
在不同的路设置不同的温度,各个传感器传输回来的数据正常
4.2.3系统实现的功能
能循环显示三路温度的数值
4.3结论
5.总结
通过本次比赛,首先觉得自己确实学了不少东西,这次的竞赛不但锻炼了我的动手能力,而且还激发了我的创新思维,培养了我勇于面对困难克服困难的坚强意志和不懈的精神,更重要的是使我深深的体会到理论结合实际的重要性,体会到知识的海洋是无穷无尽,激发我们去追求。
总之,我喜欢"电子设计"竞赛,感谢学院给了我锻炼的机会。
参考文献
1.杨欣等.51单片机应用实例详解.北京:
清华大学出版社,2010年
2.江力.单片机应用技术.北京:
清华大学出版社,2006年
附录1:
元器件清单
1.51单片机系统模板*1
2.键盘显示*1V1.0
3.DS18B20*8V1.0
附录2:
系统电路图
附录3:
程序清单
;实在抱歉,由于实验材料和篇幅的限制这里的程序只写了一路
;晶振为11.0592MHz
ORG00H
TEMPER_LEQU36H
TEMPER_HEQU35H
TEMHCEQU37H;设置温度符号标志位
TEMINTEQU38H;设置整数显示寄存器
TEMDOTEQU39H;设置小数显示寄存器
FLAGE1BIT00H;设置标志
SENSORBITP2.0;SENSOR为传感器的单线控制变量
MOVP1,#0FFH
MOVP0,#00H
LCALLDELAY;开机时静态显示88888,2s钟时间
LCALLDELAY
LCALLDELAY
LCALLDELAY
LCALLDELAY
LCALLDELAY
LCALLDELAY
LCALLDELAY
MOVP0,#0FFH
;*********************************************************************
START:
MOVP1,#06H
MOVP0,#0FEH;显示数码1
MOVSP,#70H
LCALLGET_TEMPER
LCALLTEMCOV1
LCALLSCAN;扫描第一路温度
LJMPSTART
NOP
NOP
;读出转换后的温度值程序段
GET_TEMPER:
SETBSENSOR
LOCATE_1820:
LCALLINIT_1820
JBFLAGE1,CMDD
LJMPLOCATE_1820
CMDD:
LCALLDELAY1
MOVA,#0CCH;跳过ROM匹配
LCALLWRITE_1820
MOVA,#44H;发出温度转换命令这个命令转换需要750ms
LCALLWRITE_1820
NOP
LCALLDELAY
LCALLDELAY
LCALLDELAY
LCALLDELAY
MOVP0,#0FFH
LCALLDELAY
MEASURE:
LCALLINIT_1820
JBFLAGE1,MEAGO
LJMPMEASURE
MEAGO:
LCALLDELAY1
MOVA,#0CCH;跳过ROM匹配
LCALLWRITE_1820
MOVA,#0BEH;发出读温度命令
LCALLWRITE_1820
LCALLREAD_18200;读两个字节数据
RET
;写DS1820的子程序
WRITE_1820:
………
RET
;读DS1820的程序,从DS1820中读出两个字节的温度数据
READ_18200:
…………
RET
;DS1820初始化程序
INIT_1820:
…………
RET
TEMCOV:
……
RET
TEMCOV22:
MOVTEMHC,#00H
LJMPSCAN
;动态扫描五位数码管
SCAN:
……
RET
TEMPDOTTABLE:
DB00H,00H,01H,02H,03H,03H,04H,05H
DB05H,06H,06H,07H,07H,08H,08H,09H
;计算低温度字节后四位,分别乘以0.0625,得到四位小数,按四舍五入取前两位
TEMP_TAB:
……
;动态显示数码管表
DYNAM_TABLE:
……
DELAY0.5MS:
……
;延时子程序
DELAY:
;延时250ms
……
RET
DELAY1:
……
RET
END
附录4:
DS18B20的通讯协议及读写复位等程序
1.DS18B20的通讯协议
DS18B20无论是硬件连接还是输出温度数据格式都非常简单明了,但是程序的控制较为复杂,而且必须严格按照通信协议来传递数据,否则将得不到正确的数据。
通过单线总线与DS18B20通信,我们将使用到“时隙”的概念。
所有的单总线器件要求采用严格的通信协议以保证数据的完整性该协议定义了几种信号类型复位脉冲应答脉冲写0写1读0和读1所有这些信号除了应答脉冲以外都由主机发出同步信号并且发送所有的命令和数据都是字节的低位在前这一点与多数串行通信格式不同(多数为字节的高位在前)。
2.初始化序列复位和应答脉冲
单总线上的所有通信都是以初始化序列开始包括主机发出的复位脉冲及从机的应答脉冲如图5所示当从机发出响应主机的应答脉冲时即向主机表明它处于总线上且工作准备就绪在主机初始化过程主机通过拉低单总线至少480us以产生Tx复位脉冲接着主机释放总线并进入接收模式Rx当总线被释放后5k上拉电阻将单总线拉高在单总线器件检测到上升沿后延时15-60us接着通过拉低总线60-240us以产生应答脉冲
3.读/写时隙
在写时隙期间主机向单总线器件写入数据而在读时隙期间主机读入来自从机的数据在每一个时隙总线只能传输一位数据
4.写时隙
存在两种写时隙写1和写0主机采用写1时隙向从机写入1而采用写0时隙向从机写入0所有写时隙至少需要60us且在两次独立的写时隙之间至少需要1us的恢复时间两种写时隙均起始于主机拉低总线,产生写1时隙的方式主机在拉低总线后接着必须在15us之内释放总线由5k上拉电阻将总线拉至高电平而产生写0时隙的方式在主机拉低总线后只需在整个时隙期间保持低电平即可至少60us在写时隙起始后15-60us期间单总线器件采样总线电平状态如果在此期间采样为高电平则逻辑1被写入该器件如果为0则写入逻辑0
5,读时隙
单总线器件仅在主机发出读时隙时才向主机传输数据所以在主机发出读数据命令后必须马上产生读时隙以便从机能够传输数据所有读时隙至少需要60us且在两次独立的读时隙之间至少需要1us的恢复时间每个读时隙都由主机发起至少拉低总线1us,如图4所示在主机发起读时隙之后单总线器件才开始在总线上发送0或1若从机发送1则保持总线为高电平若发送0则拉低总线当发送0时从机在该时隙结束后释放总线由上拉电阻将总线拉回至空闲高电平状态从机发出的数据在起始时隙之后保持有效时间15us因而主机在读时隙期间必须释放总线并且在时隙起始后的15us之内采样总线状态
表3
表2
根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:
每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。
复位要求主CPU将数据线下拉500us,然后释放,当DS18B20收到信号后等待16~60us左右,后发出60~240us的存在低脉冲,主CPU收到此信号表示复位成功。
表3
6.初始化程序设计:
;DS1820初始化程序
INIT_1820:
SETBSENSOR;拉高单线总线
NOP;1us恢复时间
CLRSENSOR;单片机发出复位脉冲(480~960us)
MOVR0,#250
TSR1:
DJNZR0,$;延时(250*2+1)*1.085=543.585us
SETBSENSOR;拉高单线总线
MOVR0,#25H;DS1820的
TSR2:
DJNZR0,$;延时;(37*2+1)*1.085=81.375us
JNBSENSOR,TSR3
LJMPTSR4
TSR3:
SETBFLAGE1;置标志位,表示DS1820存在
LJMPTSR5
TSR4:
;置标志位,表示DS1820不存在
CLRFLAGE1
LJMPTSR7
TSR5:
MOVR0,#120
TSR6:
DJNZR0,$;延时(100*2+1)*1.085=218.085us
TSR7:
SETBSENSOR
RET
7.读字节的程序设计
;读DS1820的程序,从DS1820中读出两个字节的温度数据
READ_18200:
MOVR4,#2;将温度的高位和低位从DS1820中读出
MOVR1,#36H;低位存入36H(TEMPER_L),高位存入35H(TEMPER_H)
RE00:
MOVR2,#8;设置计数器
RE01:
CLRC;进位C清零
SETBSENSOR;拉高单总线
NOP
NOP
CLRSENSOR;拉低单总线
NOP
NOP
NOP
SETBSENSOR
MOVR3,#7;延时
DJNZR3,$
MOVR3,#23
DJNZR3,$
RRCA
DJNZR2,RE01
MOV@R1,A
DECR1;R1自减1,将新得到的数据存入35H中
DJNZR4,RE00
RET
8.写字节的程序设计
;写DS1820的子程序
WRITE_1820:
MOVR2,#8
CLRC
WRITE8:
CLRSENSOR
MOVR3,#6;产生写1隙的方式主机在拉低总线后接着必须在15us之内释放总线由5k上拉电阻将总线拉至高电平
DJNZR3,$;延时(6*2+1)*1.085=14.105us
RRCA
MOVSENSOR,C;在此期间SENSOR为1就传送1,SENSOR为0就传送0,要保持45us左右
MOVR3,#21
DJNZR3,$;延时(21*2+1)*1.085=46.655us
SETBSENSOR
NOP
DJNZR2,WRITE8
SETBSENSOR
RET
附录5:
其他子程序的设计
1.BCD处理子程序
TEMCOV:
MOVA,TEMPER_H
ANLA,#80H
JZTEMCOV1;如果ACC=0,则执行TEMCOV1
CLRC
MOVA,TEMPER_L
CPLA
ADDA,#01H
MOVR7,A
ANLA,#0FH
MOVTEMDOT,A
MOVA,R7
SWAPA
ANLA,#0FH
MOVTEMPER_L,A
MOVR3,TEMPER_L
MOVA,TEMPER_H
CPLA
ADDCA,#00H
SWAPA
ORLA,TEMPER_L
MOVTEMINT,A
MOVTEMHC,#40H;置"-"标志符
LJMPSCAN
TEMCOV1:
MOVA,TEMPER_L
ANLA,#0FH
MOVTEMDOT,A
MOVA,TEMPER_L
ANLA,#0F0H
SWAPA
MOVTEMPER_L,A
MOVA,TEMPER_H
SWAPA
MOVTEMPER_H,A
MOVA,TEMPER_H
ORLA,TEMPER_L
MOVTEMINT,A
MOVR3,#00H
MOVR2,TEMINT
DD1:
DJNZR2,DD2
DD2:
INCR3
MOVA,R2
JZTEMCOV22
CJNER3,#99,DD1
DECR2
MOVTEMINT,R2
MOVTEMHC,#06H
RET
TEMCOV22:
MOVTEMHC,#00H
LJMPSCAN
2.动态显示设计
动态显示部分我们采用六位共阳极七段数码管循环扫描显示,软件设计程序如下:
;动态扫描五位数码管
SCAN:
MOVR