基于数字温度传感器的测温系统设计_第1页
基于数字温度传感器的测温系统设计_第2页
基于数字温度传感器的测温系统设计_第3页
基于数字温度传感器的测温系统设计_第4页
基于数字温度传感器的测温系统设计_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 深 圳 大 学 实 验 报 告 课程名称: 接口技术与单片机 实验项目名称: 基于数字温度传感器的测温系统设计 学院: 物理科学与技术学院 专业: 应用物理 指导教师: 李雄军 报告人: 李汉平 学号: 班级: 应用物理系 实验时间: 2010-6-21 实验报告提交时间: 2010-7-5 教务处制一 题目基于数字温度传感器18B20测温系统的设计二 功能与性能指标要求1 功能:(1) 利用智能温度传感器DS18B20进行温度数据采集和单片机89C52进行数据接收和处理,得到的温度值通过转换后通过2个数码管进行显示,显示位数包括个位和十位。(2) 初始报警温度通过初始化实现,当测得的温度超

2、过报警温度后报警灯Led将被点亮,可以通过按键对报警温度进行设置,设置按键一共两个,其中一个每按一次就加一摄氏度,另一个按一次减一摄氏度。(3) 其他功能:复位电路,包括上电复位和按键复位,接通电源后自动复位进行温度测量,当测量不正确的时候或者报警温度设置改变后需要恢复的话可以通过按键进行复位,保证系统持续正常工作。2 性能指标:测温范围为099度,测量精度1摄氏度,每隔一秒测量温度一次,测量准确,实时迅速,显示数字稳定,系统运行正常无误。三 总体设计方案1 系统组成89C52温度传感器18B20报警设置温度显示报警复位电路晶振电路(1)温度数据采集:利用智能温度传感器DS18B20进行温度的

3、采集。(2)数据接收和处理:用单片机89C52和并行口进行数据接收和处理。(3) 显示部分:用单片机并行口控制2个数码管进行温度值显示。(4) 报警部分:用led灯做报警器。(5) 设置部分:按键进行报警温度的设置(6) 其他部分:包括自动复位电路和按键复位电路,晶振。2 原理图3 程序设计流程图开始初始化报警温度,设定时计数初值,设定时中断次数B=10调用读温度子程序调用温度转换子程序开定时中断0,开外中断0和1调用显示温度子程序 开始寄存器内容压栈报警温度加1调用设温显示子程序寄存器内容出栈结束 开始寄存器内容压栈报警温度减1调用设温显示子程序寄存器内容出栈结束图一 主程序程序框图 图二

4、报警温度设置加1子程序 图三 报警温度设置减1子程序开始取报警温度显示报警温度设显示次数显示完毕?结束YesNo 开始拉高DQ电平结束调用测温芯片测试子程序跳过ROM匹配发转换温度命令到18B20从温度传感器读温度保存读到温度的低位从温度传感器读温度保存读到温度的高位图四 设置报警温度显示子程序 图五 读取18B20温度子程序开始R2=8C清零拉高DQ,延时DQ拉低,延时拉高DQ准备接收18B20的信号延时等待读取DQ到C延时,把C右移到A中保存R2=0?结束R2=R2-1NoYes 开始R2=8C清零拉低DQ,延时把A中的内容右移到CC的内容写入DQ延时等待拉高DQ,延时R2=0?结束R2=

5、R2-1NoYes图六 18B20的DQ端写入子程序 图七 18B20的DQ端读取子程序开始舍去读得温度低位后四位的小数温度值四舍五入温度低位的高四位和低位中的低四位合起来保存温度值报警超温?结束NoYes开始Flag=1设显示次数芯片存在?结束YesNo图八 转换温度子程序 图九 芯片测试子程序开始重赋定时初值B=B-1寄存器内容压栈关闭中断,停止计数调用测温子程序,调用转换温度子程序重新赋定时初值B=0?结束否是开始计时,开中断寄存器内容出栈开始取测量温度显示测量温度设显示次数显示完毕?结束YesNo图十 测量温度子程序 图十一 测量温度显示子程序四 制作与调试1 硬件调试(1) 硬件调试

6、过程中,先调试数码管,使之能正常显示数字,先全部显示数字,轮流显示09;测试完后,使之显示一位的数字;然后测试使两位数码管同时显示不同的数字。(2) 测试完数码管后,测试18B20是否正常工作,方法是调用测试和初始化子程序,然后把Flag值显示在数码管上,正常通过。(3) 能测到温度传感器后,下面尝试给芯片命令,包括温度转换命令、命令写入,读出温度,测试读到的温度先直接显示在数码管,可以看到比较稳定的数字。(4) 测试完上一步之后,尝试把直接测到的高低位温度进行整合,调用温度转换子程序,输出到数码管,正常。(5) 测试完转换温度的子程序后,调用温度显示子程序,可以看到温度值为30度,这就是我们

7、需要的结果。(6) 测试完整个系统后,发现低位的数码管比较亮,而高位很暗,这需要进行软件的调试和修改。(7) 测试外部中断,发现一开始不正常,后来认真检查电路,发现硬件连接有问题,修改后测试正常。2 软件调试(1) 先测试数码管显示子程序,用R0初值为0,查表显示的方法不断对R0加1,测试09是否能正常显示,测试通过。(2) 测试温度获取子程序,发现数码管上数字显示稳定,说明程序没有什么问题。(3) 测试温度转换子程序,数码管可以显示数字,但是低位亮高位暗,为解决这个问题,采用延长高位的延时时间来解决,后来发现效果还是不好。然后通过不断先后显示高低位的方法,重复一百次(约200ms)后才往下执

8、行,解决了问题。(4) 定时中断程序的引入是为了减少单片机的工作量,每隔1秒测温一次,又可以实时也能节省资源。(5) 报警温度设置和显示过程中,使用了外部中断,为了更好地保护其他程序的正常运行以及寄存器不受影响,使用了对寄存器的压栈出栈进行保护。五 总结 通过这次实验,融合了前面所学的几乎所有知识,包括硬件和软件。硬件部分,熟悉了单片机的各个引脚的用法,学会了如何构建最小系统,如何测试单片机是否正常工作,学会了如何利用IO口进行通信,包括并行和串行通信,学会了中断(定时中断和外部中断),学会了数码管的接法,懂得了如何查找芯片的资料(包括LS244和7406),懂得了利用资料进行芯片的使用。软件

9、部分融合了前面所学的汇编语言,包括数据传送指令,位操作,寻址,子程序调用,栈操作,ROM的读取,判断,查表等等知识。软硬件的结合,是对综合能力最好的提升。过程中克服了种种困难,用勤奋和认真的态度完成了设计,并成功达到开始设定的目标,受益很多很多。也明白了,遇到困难不是放弃,而是勇敢面对,用智慧去克服和解决它,这样对于我们面对以后生活的挑战,是很有帮助的。六 附1 硬件清单:元件名称元件参数数量备注单片机89C521温度传感器18B201七段数码管2共阳极按钮3晶振6M电容10uf,22uf若干电阻4.7k,1k,300欧若干发光二极管2总线驱动器74ls2441反相器740622 软件程序清单

10、(含注释)ORG 0000HLJMP MAINORG 0003HLJMP PLUSH ;设置温度加1入口ORG 0013HLJMP SUBTRACT ;设置温度减1入口ORG 000BHLJMP MEASURE ;定时中断入口,每隔一秒测温一次T_H DATA 40H ; 测得温度高位T_L DATA 41H ; 测得温度低位TEMPERATURE DATA 42H ;温度保存FLAG BIT 43H ;芯片标志位ALARM EQU 44H ;报警温度DQ BIT P3.7 ;芯片传输口ORG 0100H ;_主程序_MAIN:MOV SP,#60HCLR P3.6MOV ALARM,#33

11、;初始报警温度MOV TMOD,#01H ;定时模式0MOV TL0,#0B0H ;定时初值MOV TH0,#3CHSETB TR0 ;开中断SETB ET0SETB EX0SETB IT0SETB EX1SETB IT1SETB EAMOV B,#10 ;定时中断次数MOV P0,#00HLCALL GET_TEMPERATURE ;测温LCALL COV_TEMPERATURE ;转换温度LOOP:LCALL DISP ;显示温度AJMP LOOP;_测温子程序_MEASURE:MOV TL0,#0B0H ;定时初值MOV TH0,#3CHDJNZ B,BACKMOV B,#10PUSH

12、ACC ;寄存器内容压栈保存PUSH DPHPUSH DPLPUSH 7PUSH 6PUSH 5PUSH 4PUSH 3PUSH 2PUSH 1PUSH 0CLR EA ;关中断CLR TR0LCALL GET_TEMPERATURE ; 测温LCALL COV_TEMPERATURE ; 转换温度MOV TL0,#0B0H ;定时初值MOV TH0,#3CHSETB TR0 ;开定时中断SETB EAPOP 0 ;寄存器内容出栈恢复POP 1POP 2 POP 3POP 4POP 5POP 6POP 7POP DPLPOP DPHPOP ACCBACK:RETI;_设温加1子程序_PLUSH

13、:PUSH ACC ;寄存器内容压栈保存PUSH DPHPUSH DPLPUSH 7PUSH 6PUSH 5PUSH 4PUSH 3PUSH 2PUSH 1PUSH 0PUSH BINC ALARM ;报警温度加1LCALL SET_SHOW ;报警温度显示POP B ;寄存器内容出栈恢复POP 0POP 1POP 2POP 3POP 4POP 5POP 6POP 7POP DPLPOP DPHPOP ACCRETI;_设温减1子程序_SUBTRACT:PUSH ACC ;寄存器内容压栈保存PUSH DPHPUSH DPLPUSH 7PUSH 6PUSH 5PUSH 4PUSH 3PUSH 2

14、PUSH 1PUSH 0PUSH BDEC ALARM ;报警温度减1LCALL SET_SHOW ;报警温度显示POP B ;寄存器内容出栈恢复POP 0POP 1POP 2POP 3POP 4POP 5POP 6POP 7POP DPLPOP DPHPOP ACCRETI;_设温显示子程序_SET_SHOW:MOV A,ALARM ;取报警温度MOV B,#10DIV ABMOV 50H,A ;报警温度除10得十进制的十位,保存到单元50H中MOV 51H,B ;报警温度各位保存到51H中MOV R0,#10LOOP2:MOV R1,#100 ;显示次数设置LOOP1:MOV P2,#02

15、H ;位选,选择高位数码管MOV DPTR,#TAB ;查表MOV A,50H ;十进制温度十位MOVC A,A+DPTR ;查表得数码管对应的代码MOV P0,A ;送到P0口显示LCALL DEL_1MS ;延时1msMOV P2,#01H ;位选,选择低位数码管MOV A,51H ;十进制温度个位MOV DPTR,#TAB ;查表得数码管对应的代码MOVC A,A+DPTRMOV P0,A ;送到P0口显示LCALL DEL_1MS ;延时1msDJNZ R1,LOOP1 ;判断是否显示次数完成DJNZ R0,LOOP2RET;_读取温度子程序_GET_TEMPERATURE: SETB

16、 DQ ;拉高DQLCALL TEST ;测试芯片是否存在MOV A,#0CCH ;只有一个芯片,跳过检测CALL DQ_WRITE ;写入命令到18B20MOV A,#44H ; ;发温度转换命令CALL DQ_WRITE ;写入命令到18B20NOPCALL TEST ;测试芯片是否存在MOV A,#0CCH ; CALL DQ_WRITE MOV A,#0BEH ; 发出读温度命令CALL DQ_WRITECALL DQ_READ ;读取温度的低位MOV T_L,A ; ;保存温度低位CALL DQ_READ ;读取温度的高位MOV T_H,A ;保存温度高位RET;_18B20的DQ端

17、写入子程序_ DQ_READ: MOV R2,#8 ;计数READ1: CLR C ;清除C,准备接收数据SETB DQ ;拉高DQNOPNOPCLR DQ ;拉低DQ,向芯片通信NOPNOPNOPSETB DQ ;拉高DQ,接收数据MOV R3,#01DJNZ R3,$ ;延时MOV C,DQ ;从DQ读取数据,保存到CMOV R3,#13DJNZ R3,$RRC A ;C的数据保存到ADJNZ R2,READ1 ;判断是否读取完数据RET;_18B20的DQ端读取子程序_ DQ_WRITE: MOV R2,#8 ;计数CLR C ;清除C,准备发送数据WRITE1: CLR DQ ;拉低D

18、Q,向芯片通信MOV R3,#3 ;延时DJNZ R3,$RRC A MOV DQ,C ;把C的内容送到DQMOV R3,#11 ;延时DJNZ R3,$SETB DQ ;拉高电平,等待接收NOPDJNZ R2,WRITE1 ;判断是否发送完数据SETB DQRET;_转换温度子程序_COV_TEMPERATURE:MOV A,#0F0H ANL A,T_L ;舍去温度低位中小数点后的四位温度数值SWAP A ;把低位中的高四位移到低四位MOV TEMPERATURE,AMOV A,T_LJNB ACC.3,COV1 ; 四舍五入去温度值,INC TEMPERATURE ;D3为1则加1,为0

19、则舍去COV1: MOV A,T_H ; 高位ANL A,#07H ;温度寄存器的高字节只有后3位有效SWAP AORL A,TEMPERATURE ; 拼装MOV TEMPERATURE,A ; 保存变换后的温度数据MOV A,TEMPERATURECJNE A,ALARM,JUDGE ;判断是否超过报警温度JUDGE:JC GO LIGHT:SETB P3.6 ;超温报警AJMP COMEONGO:CLR P3.6 ;不超灯灭COMEON:RET;_芯片测试子程序_ TEST: CALL DSINIT ;初始化 JB FLAG,CHECK1 ;检查标志位 AJMP TEST ;不存在继续检查 CHECK1:MOV R7,#5 DJNZ R7,$RET ;_初始化子程序_;DSINIT: SETB DQ ;拉高DQNOPCLR DQ ;总线发一个复位信号MOV R0,#40HDJNZ R0,$ ; 延时SETB DQ ;拉高总线准备检测MOV R0,#13H ;延时DJNZ R0,$JNB DQ,INIT2 ;检测是否有应答信号,有应答信号跳转AJMP INIT3 ; 延时INIT2: SETB FLAG ; 标志位置

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论