基于51单片机单总线高精度温度采集系统_第1页
基于51单片机单总线高精度温度采集系统_第2页
基于51单片机单总线高精度温度采集系统_第3页
基于51单片机单总线高精度温度采集系统_第4页
基于51单片机单总线高精度温度采集系统_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

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

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

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

4、通过数码管显示 出来READ_18200无TEMPER_LTEMPER_H从DS18B2(fr读出数据并储存7主程序程序流程图Int0 的8 程序清单TEMPER_L EQU 36H;存放读出温度低位数据TEMPER_H EQU 35H;存放读出温度高位数据TEMPER EQU34H;存放转换后的8位温度值TEMPER_X£QU 33H;存放转换温度的小数部分TEMPER_NUM EQU 60H;缓冲单元TEMPER_NUM_XS EQU1HDQ BIT P3.3;一线总线控制端口LIMIT EQU 14HWSLA EQU 070HRSLA EQU 071HSDA BIT P1.0S

5、CL BIT P1.1ORG 8000HLJMP MAINORG 8003H;外中断入口地址FLAG1 BIT 00HLJMP INT_7290ORG 801BH;定时器 T1的入口地址LJMP INT_T1ORG 8100HMAIN:MOV SP,#70HCLR P1.2;7290 复位LCALL DELAYSETB P1.2MOV LIMIT,#0FFHLP1:SETB EX0;开外中断0SETB EAMOV TCON,#00HSETB ET1 ;开丁1 中断SETB EAMOV TMOD,#10H ;T1 初值MOV TL1,#33HMOV TH1,#0FEHLCALL GET_TEMP

6、ER从 DS18B20 读出温度数据LCALL TEMPER_CQV专换读出的 温度数据并保存MOV A,TEMPERCJNE A,LIMIT,NEXTNEXT:JNC NEXT1 ;TEMPER>=LIMITJMP NEXT2NEXT1:SETB TR1LJMP NEXT3NEXT2:CLRTR1NEXT3:MOV 31H,#00H ;显示整数部分MOV 30H,#01HMOV B,#10DIV ABADD A,#02HMOV 37H,AMOV A,BADD A,#0CHMOV 36H,AMOV A,TEMPER_X配示小数部分MOV B,#4MUL ABADD A,#16HMOV 3

7、5H,AINC AMOV 34H,AINC AMOV 33H,AINC AMOV 32H,AMOV DPTR,#LEDSEG1CLR AMOV R7,#08HMOV R0,#20HMOV R1,#30HLOOP1:MOV A,R1MOVC A,A+DPTRMOV R0,AINC R1INC R0DJNZ R7,LOOP1MOV R7,#08HMOV R0,#20HMOV R2,#10HMOV R3,#WSLALCALL WRNBYTLCALL DELAY2MOV A,TEMPERSJMP LP1;T1中断服务程序INT_T1:PUSH ACCPUSH PSWCLR TF1MOA,TEMPERS

8、UBB A,LIMITMOB,#2MULABADD A,#33HMOVTL1,A ;赋定时器t1初值MOV TH1,#0FEHCPL P3.5POP PSWPOPACCRETILEDSEG1: DB 0C6H,9CH ;查表DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E4H,0FEH,0F6HDB0FDH,61H,0DBH,0F3H,67H,0B7H,0BFH,0E5H,0FFH,0F7HDB0FCH,0FCH,0FCH,0FCH,0FCH,0BEH,0匚 AH,0B6H,60H,0DAH,0B6H,0FCH,60H,0 FEH,0E4H,0B6HDB0DAH,0B

9、6H,0FCH,0FCH,0F2H,60H,0DA H,0B6H,0F2H,0E4H,0B6H,0FCHDB 66H,0F2H,0E4H,0B6HDB 0B6H,0FCH,0FCH,0FCHDB 0B6H,0BEH,0DAH,0B6HDB 0BEH,0DAH,0B6H,0FCHDB 0BEH,0FEH,0E4H,0B6HDB 0E4H,0B6H,0FCH,0FCHDB 0FEH,60H,0DAH,0B6HDB 0FEH,0E4H,0B6H,0FCHDB 0F6H,0F2H,0E4H,0B6HDB 00H,0EEH,10HDELAY2:PUSH 00HPUSH 01HMOV R0,#00HDEL

10、AY3:MOV R1,#00HDJNZ R1,$DJNZ R0,DELAY3POP 01HPOP 00HRET.* ;读取温度值GET_TEMPER:;读出转换后的温度值SETB DQ ;定时入口BCD: LCALL INIT_1820JB FLAG1,S22LJMP BCD;若DS18B2杯存在则返回S22: LCALL DELAY1MOV A,#0CCH;跳过ROMS配0CCHSETB DQRETLCALL WRITE_1820MOV A,#44HCLR DQNOPNOP发出温度转换命令LCALL WRITE_1820LCALL DELAYCBA: LCALL INIT_1820 JB F

11、LAG1,ABC LJMP CBAABC: LCALL DELAY1MOV A,#0CCH ;跳过ROMS配LCALL WRITE_1820MOV A,#0BEH ;发出读温度命令LCALL WRITE_1820LCALL READ_18200;READ_1820RETWRITE_1820:;写DS18B20勺程序MOV R2,#8CLR CWR1: CLR DQMOV R3,#6 ;延时 24usDJNZ R3,$RRC A MOV DQ,CMOV R3,#23 ;延时 60us DJNZ R3,$SETB DQ ; 一个写周期至少要维持60us以上NOP;离下一个写周期至少要有1us间隔D

12、JNZ R2,WR1READ_18200:;读DS18B20勺程序,从DS18B20读出 两个字节的温度数据MOV R4,#2;将温度高位和低位从DS18B2(fr读出MOV R1,#36H;低位存入 36H(TEMPER_L)高位存入 35H(TEMPER_H)RE00:MOV R2,#8RE01:CLR CSETB DQNOPDQ;DQ=0 15USfi18B20送数,主控器 必须完成DQ勺采样SETB DQ ;主控器释放DQMOV R3,#2DJNZ R3,$;延时 10usMOV C,DQ ;取dq数据位MOV R3,#23 ;延时 60usDJNZ R3,$RRC ADJNZ R2,

13、RE01MOV R1,ADEC R1DJNZ R4,RE00RETTEMPER_COV:;将读出的数据进行 转换MOV A,#0F0HANL A,TEMPER_LSWAP AMOV TEMPER_NUM,AMOV A,TEMPER_LANL A,#0FHMOV TEMPER_NUM_XS,AMOV TEMPER_XS,TEMPER_NUM_XSTEMPER_COV1:MOV A,TEMPER_HANL A,#07HSWAP AADD A,TEMPER_NUMMOV TEMPER_NUM,AMOV TEMPER,TEMPER_NUMRETINIT_1820:; DS18B20 初始化程序SETB

14、 DQNOPCLR DQMOV R0,#80HTSR1:DJNZ R0,TSR1SETB DQMOV R0,#25HTSR2:DJNZ R0,TSR2JNB DQ,TSR3LJMP TSR4TSR3:SETB FLAG1LJMP TSR5TSR4:CLR FLAG1LJMP TSR7TSR5:MOV R0,#06BHTSR6:DJNZ R0,TSR6TSR7:SETB DQRETDELAY1:MOV R7,#20HDJNZ R7,$RETDELAY:PUSH 00HPUSH 01HMOV R0,#00LP:MOV R1,#00HDJNZ R1,$DJNZ R0,LPPOP 01HPOP 00H

15、RET.* ;键盘设定温度上限值INT_7290:PUSH 00HPUSH 02HPUSH 03HPUSH 04HPUSH 07HPUSH ACCPUSH PSWLCALL RDKEYCJNE A,#0AH,DOWN1LJMP AKEYDOWN1: LJMP DOWNAKEY:LCALL DISPLAYA;闪烁控制PUSH 05HPUSH 06HMOVR5,#70HMOVR6,#08HMOVR7,#02HMOVR0,#05HMOVR2,#07HMOVR3,#WSLALCALL WRNBYTLCALL DELAYPOP06HPOP05HCXUN: JB P3.2,$LCALL RDKEYCJNE

16、 A,#0AH,NEXT4 ;查询输 入值是否为数字NEXT4:JNC CXUNNEXT5: MOV 40H,ALCALL DISPLAY1MOV A,40HMOV B,#10MUL ABMOV 14H,A ;存十位;闪烁控制PUSH 05HPUSH 06HMOVR5,#70HMOVR6,#04HMOVR7,#02HMOVR0,#05HMOVR2,#07HMOVR3,#WSLALCALL WRNBYTLCALL DELAYPOP06HPOP05HCXUN1: JB P3.2,$LCALL RDKEYCJNE A,#0AH,NEXT6 ;查询输 入值是否为数字NEXT6:JNC CXUN1;闪烁

17、控制NEXT7: PUSH 05HPUSH 06HMOVR5,#70HMOVR6,#00HMOVR7,#02HMOVR0,#05HMOVR2,#07HMOVR3,#WSLALCALL WRNBYTLCALL DELAYPOP06HPOP05HMOV 41H,A ;存个位LCALL DISPLAY2 ;显示个位数MOV A,41HADD A,14HMOV LIMIT,A;设定报警值JB P3.2,$CJNE A,#0BH,FH1FH1: LCALL RDKEYDOWN:CLR IE0POP PSWPOP ACCPOP 07HPOP 04HPOP 03HPOP 02HPOP 00HRETIRDKE

18、Y:MOVR0,#1FH;键值缓冲单元MOVR7,#01H;取一个数据(键值)MOVR2,#01H;指向内部数据键值寄存器地址MOVR3,#WSLA_7290 取器件地址(写)MOVR4,#RSLA_7290 ;取器件地址(读)LCALL RDADD ;读出7290的01H单元中的键值MOVA,1FH;取健值送缓冲单元DECARETDISPLAY2:;显示输入的个位数MOV 30H,#01HMOV 31H,#00HPUSH ACCMOA,40HADDA,#02HMOV 33H,APOPACCADD A,#02HMOV 32H,AMOV 34H,#56HMOV 35H,#56HMOV 36H,#

19、56HMOV 37H,#57HMOV DPTR,#LEDSEG1CLR AMOV R7,#08HMOV R0,#20HMOV R1,#30HLOOP2:MOV A,R1MOVC A,A+DPTRMOV R0,AINC R1INC R0DJNZ R7,LOOP2MOV R7,#08HMOV R0,#20HMOV R2,#10HMOV R3,#WSLALCALL WRNBYTLCALL DELAY2RETDISPLAYA:;显示 AMOV 30H,#01HMOV 31H,#00HMOV 32H,#58HMOV 33H,#58HMOV 34H,#56HMOV 35H,#56HMOV 36H,#56H

20、MOV 37H,#57HMOV DPTR,#LEDSEG1CLR AMOV R7,#08HMOV R0,#20HMOV R1,#30HLOOP3:MOV A,R1MOVC A,A+DPTRMOV R0,AINC R1INC R0DJNZ R7,LOOP3MOV R7,#08HMOV R0,#20HMOV R2,#10HMOV R3,#WSLALCALL WRNBYTLCALL DELAY2RETDISPLAY1:;显示输入的十位数MOV 30H,#01HMOV 31H,#00HMOV 32H,#58HADD A,#02HMOV 33H,AMOV 34H,#56HMOV 35H,#56HMOV

21、36H,#56HMOV 37H,#57HMOV DPTR,#LEDSEG1CLR AMOV R7,#08HMOV R0,#20HMOV R1,#30HLOOP4:MOV A,R1MOVC A,A+DPTRMOV R0,AINC R1INC R0DJNZ R7,LOOP4MOV R7,#08HMOV R0,#20HMOV R2,#10HMOV R3,#WSLALCALL WRNBYTLCALL DELAY2RET;【附录一1由汇编语言编制的I2C通 讯子程序;(1)带有内部单元地址的多字节写 操作子程序WRNBYT.*;通用的I2C通讯子程序(多字节写操 作);入口参数R7字节数,R0:源数据块

22、首 地址;R0原数据块首地址;R2从器件内部 子地址;R3:外围器件地址(写);相关子程序WRBYTSTOP CACKSTA.*;WRNBYT: PUSH PSWPUSH ACCWRADD: MOV A,R3 ;取外围器件地地址(包含r/w=0)LCALL STA ;发送起始信号SLCALL WRBYT ;发送外 围地址LCALL CACK ;检测外 围器件的应答信号JB F0,WRADD ;如果应MOV A,R2LCALL WRBYT ;发送内 部寄存器首地址LCALL CACK ;检测外 围器件的应答信号JB F0,WRADD ;如果应 答不正确返回重来WRDA: MOV A,R0LCAL

23、L WRBYT ;发送外 围地址LCALL CACK ;检测外 围器件的应答信号JBF0,WRADD ;如果应答不正确返回重来INCR0DJNZ R7,WRDALCALL STOPPOP ACCPOP PSWRET* ;(2)带有内部单元地址的多字节读 操作子程序RDADD.* ;入口参数R7字节数;;R0目标数据块首地址;R2从器件内 部子地址;;R3器件地址(写);R4器件地址(读) ;相关子程序 WRBYTSTOP CACKSTA MNACK.* ;RDADD: PUSH PSW; 从PCF8563勺02H单元读入7个参数PUSH ACC;存放于20H-26H 单元RDADD1: LCA

24、LL STAMOV A,R3 ;取器件地址(写)LCALL WRBYT ;发送外围地址LCALL CACK ;检测外围器件的应答信号JB F0,RDADD1 ;如果应答不正确返回重来MOV A,R2 ;取内部地址LCALL WRBYT ;发送外围地址LCALL CACK ;检测外围器件的应答信号JB F0,RDADD1 ;如果应答不正确返回重来LCALL STAMOV A,R4 ;取器件地址(读)LCALL WRBYT ;发送外围地址LCALL CACK ;检测外围器件的应答信号JB F0,RDADD1 ;如果应答不正确返回重来RDN: LCALL RDBYTMOV R0,ADJNZ R7,A

25、CKLCALL MNACK LCALL STOP POP ACC POP PSW RET ACK: LCALL MACKINC R0SJMP RDN;(3) I2C各个信号子程序 :* ;启动信号子程序S.*STA: SETB SDA ;启动信号 SSETB SCLNOP;产生 4.7US延时NOPNOPNOPNOPCLR SDANOP;产生 4.7US延时NOPNOPNOPNOPCLR SCLRET;*; 停止信号子程序P.*STOP: CLR SDA ;停止彳肃号PSETB SCLNOP;产生 4.7US 延时NOPNOPNOPNOPSETB SDANOP;产生 4.7US延时NOPNOP

26、NOPNOPCLR SCLCLR SDARET ;*;应答信号子程序 MACK;*MACK: CLR SDA;发送应答信号ACKSETB SCLNOP ;产生4.7US延时NOPNOPNOPNOPCLR SCLSETB SDARET ;*;非应答法信号子程序MNACK;*MNACK: SETB SDA ;发送非应答 信号NACKSETB SCLNOP;产生 4.7US延时NOPNOPNOPNOPCLR SCLCLR SDARET;*;应答检测子程序CACK.*CACK: SETB SDA;应答位检测子程序SETB SCLCLR F0MOVC,SDA;采中¥ SDAJNCCEND;应答正确时转 CENDSETBF0;应答错误时F0置一CEND: CLRSCLRET ;* ; 发送一个字节子程序WRBYT .*WRBYT: PUSH 06HMOV R6,#08H;发送一个字节子程序WLP: RLC A;(入口参数A)MOV SDA,CSETB SCLNOP; 产生4.7US延时NOPNOPNOPNOPCLR SCLDJNZ R6,WLPPOP 06HRET*接收一个字节子程序RDBYT*RDBYT:PUSH 06HMOV R6,#08H个字节子程序RLP: SETB SDASETB SCL;接收J*NOP 秒的延时!!NOPZLG

温馨提示

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

评论

0/150

提交评论