ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:54.99KB ,
资源ID:6052168      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6052168.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于51单片机单总线高精度温度采集系统.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于51单片机单总线高精度温度采集系统.docx

1、基于51单片机单总线高精度温度采集系统大连理工大学本科设计报告题目:单总线高精度温度采集系统题目:单总线高精度温度采集系统1 设计要求系统结构:1)由DS18B20实现对温度的采集; 2)由数码管实现温度显示系统。设计要求 :1)启动DS18B20进行12位高精度环境温度采集;2)利用数码管显示数据;3)具有温度上限声光报警;4)可以通过键盘设定报警上限值。扩展功能: 1)报警频率随实测温度与报警温度的差值变化,相差越大频率越高;2)键盘设定上限值时十位,个位的闪烁,并且在输入后停止闪烁。2 设计分析及系统方案设计程序采用无限循环结构。一次循环中,完成对温度的采集和显示,判断超过设定值时报警。

2、键盘设定用外中断/INT1完成,T1产生方波驱动蜂鸣器发声,初值赋为采集温度与设定值的差值。3.系统电路图4 外围接口模块硬件电路功能描述ZLG7290B:数码管动态显示驱动、键盘扫描芯片。通过按键进行上限温度的设定及温度的显示模块。蜂鸣器模块:当温度超过上限则报警。DS18B20:智能温度传感器。对环境温度进行12位精度的采集。5 主程序中主要变量定义变量名称RAM单元/寄存器功能TEMPER_L36H读出温度值低8位数据TEMPER_H35H读出温度值高4位数据TEMPER34H转换温度整数部分TEMPER-NUM60H转换温度整数部分的缓冲单元TEMPER_XS33H转换温度小数部分TE

3、MPER-NUM-XS61H转换温度小数部分的缓冲单元LIMIT14H键盘输入的温度上限值6 系统软件中各个子程序的功能描述子程序名称入口参数出口参数功能 描述GET_TEMPER无温度值高四位TEMPER_L、温度值低8位TEMPER_H从DS18B20中读出12位温度数据TEMPER_COVTEMPER_LTEMPER_HTEMPERTEMPER_XS将读出的12位温度数据转换并保存INT_1820无FLAG1初始化DS18B20WRITE_1820A无向DS18B20中写入数据INT_T1TH1TL1定时器T1中断。装定时初值,初值为温度差值,并对P3.5取反驱动蜂鸣器。DISPLAYT

4、EMPERTEMPER_XS无将温度通过数码管显示出来READ_18200无TEMPER_LTEMPER_H从DS18B20中读出数据并储存7 主程序程序流程图 N Y Y8 程序清单TEMPER_L EQU 36H ;存放读出温度低位数据TEMPER_H EQU 35H ;存放读出温度高位数据TEMPER EQU 34H ;存放转换后的8位温度值TEMPER_XS EQU 33H ;存放转换温度的小数部分TEMPER_NUM EQU 60H ;缓冲单元TEMPER_NUM_XS EQU 61H FLAG1 BIT 00H DQ BIT P3.3 ;一线总线控制端口 LIMIT EQU 14H

5、 WSLA EQU 070H RSLA EQU 071H SDA BIT P1.0 SCL BIT P1.1 ORG 8000H LJMP MAIN ORG 8003H ;外中断Int0的入口地址 LJMP INT_7290 ORG 801BH ;定时器T1的入口地址 LJMP INT_T1 ORG 8100HMAIN: MOV SP,#70H CLR P1.2 ;7290复位 LCALL DELAY SETB P1.2 MOV LIMIT,#0FFHLP1: SETB EX0 ;开外中断0 SETB EA MOV TCON,#00H SETB ET1 ;开T1中断 SETB EA MOV T

6、MOD,#10H ;T1初值 MOV TL1,#33H MOV TH1,#0FEH LCALL GET_TEMPER ;从DS18B20读出温度数据 LCALL TEMPER_COV ;转换读出的温度数据并保存 MOV A,TEMPER CJNE A,LIMIT,NEXTNEXT: JNC NEXT1 ;TEMPER=LIMIT JMP NEXT2NEXT1: SETB TR1 LJMP NEXT3NEXT2: CLR TR1NEXT3: MOV 31H,#00H ;显示整数部分 MOV 30H,#01H MOV B,#10DIV AB ADD A,#02H MOV 37H,A MOV A,B

7、 ADD A,#0CH MOV 36H,A MOV A,TEMPER_XS;显示小数部分 MOV B,#4 MUL AB ADD A,#16H MOV 35H,A INC A MOV 34H,A INC A MOV 33H,A INC A MOV 32H,A MOV DPTR,#LEDSEG1 CLR A MOV R7,#08H MOV R0,#20H MOV R1,#30HLOOP1: MOV A,R1 MOVC A,A+DPTR MOV R0,A INC R1 INC R0 DJNZ R7,LOOP1 MOV R7,#08H MOV R0,#20H MOV R2,#10H MOV R3,#

8、WSLA LCALL WRNBYT LCALL DELAY2 MOV A,TEMPER SJMP LP1;T1中断服务程序INT_T1: PUSH ACC PUSH PSW CLR TF1 MOV A,TEMPER SUBB A,LIMIT MOV B,#2 MUL AB ADD A,#33H MOV TL1,A ;赋定时器t1初值 MOV TH1,#0FEH CPL P3.5 POP PSW POP ACC RETILEDSEG1: DB 0C6H,9CH ;查表 DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E4H,0FEH,0F6H DB 0FDH,61H,0

9、DBH,0F3H,67H,0B7H,0BFH,0E5H,0FFH,0F7H DB 0FCH,0FCH,0FCH,0FCH,0FCH,0BEH,0DAH,0B6H,60H,0DAH,0B6H,0FCH,60H,0FEH,0E4H,0B6HDB 0DAH,0B6H,0FCH,0FCH,0F2H,60H,0DAH,0B6H,0F2H,0E4H,0B6H,0FCH DB 66H,0F2H,0E4H,0B6H DB 0B6H,0FCH,0FCH,0FCH DB 0B6H,0BEH,0DAH,0B6H DB 0BEH,0DAH,0B6H,0FCH DB 0BEH,0FEH,0E4H,0B6H DB 0E4

10、H,0B6H,0FCH,0FCH DB 0FEH,60H,0DAH,0B6H DB 0FEH,0E4H,0B6H,0FCH DB 0F6H,0F2H,0E4H,0B6H DB 00H,0EEH,10HDELAY2: PUSH 00H PUSH 01H MOV R0,#00HDELAY3: MOV R1,#00H DJNZ R1,$ DJNZ R0,DELAY3 POP 01H POP 00H RET ;*读取温度值GET_TEMPER: ;读出转换后的温度值 SETB DQ ;定时入口BCD: LCALL INIT_1820 JB FLAG1,S22 LJMP BCD ; 若DS18B20不存

11、在则返回S22: LCALL DELAY1 MOV A,#0CCH ; 跳过ROM匹配 0CCH LCALL WRITE_1820 MOV A,#44H ; 发出温度转换命令 LCALL WRITE_1820 LCALL DELAYCBA: LCALL INIT_1820 JB FLAG1,ABC LJMP CBAABC: LCALL DELAY1 MOV A,#0CCH ; 跳过ROM匹配 LCALL WRITE_1820 MOV A,#0BEH ; 发出读温度命令 LCALL WRITE_1820 LCALL READ_18200 ;READ_1820 RET WRITE_1820: ;写

12、DS18B20的程序 MOV R2,#8 CLR CWR1: CLR DQ MOV R3,#6 ;延时24us DJNZ R3,$ RRC A MOV DQ,C MOV R3,#23 ;延时60us DJNZ R3,$ SETB DQ ;一个写周期至少要维持60us以上 NOP ;离下一个写周期至少要有1us间隔 DJNZ R2,WR1 SETB DQ RETREAD_18200: ; 读DS18B20的程序,从DS18B20中读出两个字节的温度数据 MOV R4,#2 ; 将温度高位和低位从DS18B20中读出 MOV R1,#36H ; 低位存入36H(TEMPER_L),高位存入35H(

13、TEMPER_H)RE00:MOV R2,#8RE01:CLR C SETB DQ NOP CLR DQ ;DQ;DQ=0 15US内 NOP ;18B20送数,主控器 NOP ;必须完成DQ的采样 SETB DQ ;主控器释放DQ MOV R3,#2 DJNZ R3,$ ;延时10us MOV C,DQ ;取dq数据位 MOV R3,#23 ;延时60us DJNZ R3,$ RRC A DJNZ R2,RE01 MOV R1,A DEC R1 DJNZ R4,RE00 RETTEMPER_COV: ;将读出的数据进行转换 MOV A,#0F0H ANL A,TEMPER_L SWAP A

14、MOV TEMPER_NUM,A MOV A,TEMPER_L ANL A,#0FH MOV TEMPER_NUM_XS,A MOV TEMPER_XS,TEMPER_NUM_XSTEMPER_COV1: MOV A,TEMPER_H ANL A,#07H SWAP A ADD A,TEMPER_NUM MOV TEMPER_NUM,A MOV TEMPER,TEMPER_NUM RETINIT_1820:; DS18B20初始化程序 SETB DQ NOP CLR DQ MOV R0,#80HTSR1: DJNZ R0,TSR1 SETB DQ MOV R0,#25HTSR2: DJNZ R

15、0,TSR2 JNB DQ,TSR3 LJMP TSR4TSR3: SETB FLAG1 LJMP TSR5TSR4: CLR FLAG1 LJMP TSR7TSR5: MOV R0,#06BHTSR6: DJNZ R0,TSR6TSR7: SETB DQ RETDELAY1: MOV R7,#20H DJNZ R7,$ RETDELAY: PUSH 00H PUSH 01H MOV R0,#00LP: MOV R1,#00H DJNZ R1,$ DJNZ R0,LP POP 01H POP 00H RET;*键盘设定温度上限值INT_7290: PUSH 00H PUSH 02H PUSH

16、03H PUSH 04H PUSH 07H PUSH ACC PUSH PSW LCALL RDKEY CJNE A,#0AH,DOWN1 LJMP AKEYDOWN1: LJMP DOWN AKEY: LCALL DISPLAYA ;闪烁控制 PUSH 05H PUSH 06H MOV R5,#70H MOV R6,#08H MOV R7,#02H MOV R0,#05H MOV R2,#07H MOV R3,#WSLA LCALL WRNBYT LCALL DELAY POP 06H POP 05HCXUN: JB P3.2,$ LCALL RDKEY CJNE A,#0AH,NEXT4

17、;查询输入值是否为数字NEXT4: JNC CXUNNEXT5: MOV 40H,A LCALL DISPLAY1 MOV A,40H MOV B,#10 MUL AB MOV 14H,A ;存十位 ;闪烁控制 PUSH 05H PUSH 06H MOV R5,#70H MOV R6,#04H MOV R7,#02H MOV R0,#05H MOV R2,#07H MOV R3,#WSLA LCALL WRNBYT LCALL DELAY POP 06H POP 05HCXUN1: JB P3.2,$ LCALL RDKEY CJNE A,#0AH,NEXT6 ;查询输入值是否为数字 NEXT

18、6: JNC CXUN1 ;闪烁控制NEXT7: PUSH 05H PUSH 06H MOV R5,#70H MOV R6,#00H MOV R7,#02H MOV R0,#05H MOV R2,#07H MOV R3,#WSLA LCALL WRNBYT LCALL DELAY POP 06H POP 05H MOV 41H,A ;存个位 LCALL DISPLAY2 ;显示个位数 MOV A,41H ADD A,14H MOV LIMIT,A ;设定报警值 JB P3.2,$FH1: LCALL RDKEY CJNE A,#0BH,FH1DOWN: CLR IE0 POP PSW POP

19、ACC POP 07H POP 04H POP 03H POP 02H POP 00H RETIRDKEY: MOV R0,#1FH ;键值缓冲单元 MOV R7,#01H ;取一个数据(键值) MOV R2,#01H ;指向内部数据键值寄存器地址 MOV R3,#WSLA_7290 ;取器件地址(写) MOV R4,#RSLA_7290 ;取器件地址(读) LCALL RDADD ;读出7290的01H单元中的键值 MOV A,1FH ;取健值送缓冲单元 DEC A RETDISPLAY2: ;显示输入的个位数 MOV 30H,#01H MOV 31H,#00H PUSH ACC MOV A

20、,40H ADD A,#02H MOV 33H,A POP ACC ADD A,#02H MOV 32H,A MOV 34H,#56H MOV 35H,#56H MOV 36H,#56H MOV 37H,#57H MOV DPTR,#LEDSEG1 CLR A MOV R7,#08H MOV R0,#20H MOV R1,#30HLOOP2: MOV A,R1 MOVC A,A+DPTR MOV R0,A INC R1 INC R0 DJNZ R7,LOOP2 MOV R7,#08H MOV R0,#20H MOV R2,#10H MOV R3,#WSLA LCALL WRNBYT LCALL

21、 DELAY2 RETDISPLAYA: ;显示A MOV 30H,#01H MOV 31H,#00H MOV 32H,#58H MOV 33H,#58H MOV 34H,#56H MOV 35H,#56H MOV 36H,#56H MOV 37H,#57H MOV DPTR,#LEDSEG1 CLR A MOV R7,#08H MOV R0,#20H MOV R1,#30HLOOP3: MOV A,R1 MOVC A,A+DPTR MOV R0,A INC R1 INC R0 DJNZ R7,LOOP3 MOV R7,#08H MOV R0,#20H MOV R2,#10H MOV R3,#

22、WSLA LCALL WRNBYT LCALL DELAY2 RETDISPLAY1: ;显示输入的十位数 MOV 30H,#01H MOV 31H,#00H MOV 32H,#58H ADD A,#02H MOV 33H,A MOV 34H,#56H MOV 35H,#56H MOV 36H,#56H MOV 37H,#57H MOV DPTR,#LEDSEG1 CLR A MOV R7,#08H MOV R0,#20H MOV R1,#30HLOOP4: MOV A,R1 MOVC A,A+DPTR MOV R0,A INC R1 INC R0 DJNZ R7,LOOP4 MOV R7,#

23、08H MOV R0,#20H MOV R2,#10H MOV R3,#WSLA LCALL WRNBYT LCALL DELAY2 RET;【附录一】由汇编语言编制的I2C通讯子程序;(1)带有内部单元地址的多字节写操作子程序 WRNBYT;*;通用的I2C通讯子程序(多字节写操作);入口参数R7字节数,R0:源数据块首地址;R0原数据块首地址;R2从器件内部子地址;R3:外围器件地址(写);相关子程序 WRBYT、STOP、CACK、STA;*WRNBYT: PUSH PSW PUSH ACC WRADD: MOV A,R3 ;取外围器件地地址(包含r/w=0) LCALL STA ;发送

24、起始信号S LCALL WRBYT ;发送外围地址 LCALL CACK ;检测外围器件的应答信号 JB F0,WRADD ;如果应 MOV A,R2 LCALL WRBYT ;发送内部寄存器首地址 LCALL CACK ;检测外围器件的应答信号 JB F0,WRADD ;如果应答不正确返回重来 WRDA: MOV A,R0 LCALL WRBYT ;发送外围地址 LCALL CACK ;检测外围器件的应答信号 JB F0,WRADD ;如果应答不正确返回重来 INC R0 DJNZ R7,WRDA LCALL STOP POP ACC POP PSW RET ;*;(2)带有内部单元地址的多

25、字节读操作子程序 RDADD ;*;入口参数R7字节数;;R0目标数据块首地址;R2从器件内部子地址;;R3器件地址(写);R4器件地址(读);相关子程序 WRBYT、STOP、CACK、STA、MNACK ;*RDADD: PUSH PSW ;从PCF8563的02H单元读入7个参数 PUSH ACC ;存放于20H-26H单元 RDADD1: LCALL STA MOV A,R3 ;取器件地址(写) LCALL WRBYT ;发送外围地址 LCALL CACK ;检测外围器件的应答信号 JB F0,RDADD1 ;如果应答不正确返回重来 MOV A,R2 ;取内部地址 LCALL WRBY

26、T ;发送外围地址 LCALL CACK ;检测外围器件的应答信号 JB F0,RDADD1 ;如果应答不正确返回重来 LCALL STA MOV A,R4 ;取器件地址(读) LCALL WRBYT ;发送外围地址 LCALL CACK ;检测外围器件的应答信号 JB F0,RDADD1 ;如果应答不正确返回重来RDN: LCALL RDBYT MOV R0,A DJNZ R7,ACK LCALL MNACK LCALL STOP POP ACC POP PSW RETACK: LCALL MACK INC R0 SJMP RDN ;(3)I2C各个信号子程序;*; 启动信号子程序S ;*STA: SETB SDA ;启动信号S SETB SCL NOP ;产生4.7US延时 NOP NOP NOP NOP CLR SDA NOP ;产生4.7US延时 NOP NOP NOP NOP CLR SCL RET ;*; 停止信号子程序P ;*STOP: CLR SDA ;停止信号P SETB SCL NOP ;产生4.7US延时 NOP NOP NOP NOP SETB SDA NOP ;产生4.7US延时 NOP NOP NOP NOP

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

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