基于51單片機(jī)單總線高精度溫度采集系統(tǒng)_第1頁
基于51單片機(jī)單總線高精度溫度采集系統(tǒng)_第2頁
基于51單片機(jī)單總線高精度溫度采集系統(tǒng)_第3頁
基于51單片機(jī)單總線高精度溫度采集系統(tǒng)_第4頁
基于51單片機(jī)單總線高精度溫度采集系統(tǒng)_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、大連理工大學(xué)本科設(shè)計報告題目:單總線高精度溫度采集系統(tǒng)題目:單總線高精度溫度采集系統(tǒng)1設(shè)計要求系統(tǒng)結(jié)構(gòu):1)由DS18B20實(shí)現(xiàn)對溫度的采集;2)由數(shù)碼管實(shí)現(xiàn)溫度顯示系統(tǒng)。設(shè)計要求:1)啟動DS18B20進(jìn)行12位高精度環(huán)境溫度采集;2)利用數(shù)碼管顯示數(shù)據(jù);3)具有溫度上限聲光報警;4)可以通過鍵盤設(shè)定報警上限值。擴(kuò)展功能:1)報警頻率隨實(shí)測溫度與報警溫度的差值變化, 相差越大頻率越高;2)鍵盤設(shè)定上限值時十位,個位的閃爍,并且在輸入后停止閃爍。2設(shè)計分析及系統(tǒng)方案設(shè)計程序采用無限循環(huán)結(jié)構(gòu)。一次循環(huán)中,完成對溫度的采集和顯示,判斷超過 設(shè)定值時報警。鍵盤設(shè)定用外中斷/INT1完成,T1產(chǎn)生方波

2、驅(qū)動蜂鳴器發(fā)聲,初 值賦為采集溫度與設(shè)定值的差值。3.系統(tǒng)電路圖4外圍接口模塊硬件電路功能描述ZLG7290B:數(shù)碼管動態(tài)顯示驅(qū)動、鍵盤掃描芯片。通過按鍵進(jìn)行上限溫度 的設(shè)定及溫度的顯示模塊。蜂鳴器模塊:當(dāng)溫度超過上限則報警。DS18B20:智能溫度傳感器。對環(huán)境溫度進(jìn)行 12位精度的采集。5主程序中主要變量定義變量名稱RAMI元/寄存器功能TEMPER_L36H讀出溫度值低8位數(shù)據(jù)TEMPER_H35H讀出溫度值高4位數(shù)據(jù)TEMPER34H轉(zhuǎn)換溫度整數(shù)部分TEMPER-NUM60H轉(zhuǎn)換溫度整數(shù)部分的緩沖單元TEMPER_XS33H轉(zhuǎn)換溫度小數(shù)部分TEMPER-NUM-X:S61H轉(zhuǎn)換溫度小數(shù)

3、部分的緩沖單元LIMIT14H鍵盤輸入的溫度上限值6系統(tǒng)軟件中各個子程序的功能描述子程序名稱入口參數(shù)出口參數(shù)功能描述GET_TEMPEF【無溫度值高四位TEMPER溫度值低 8位 TEMPER_H從DS18B2N讀出12位溫度數(shù)據(jù)TEMPER_CO/ TEMPER_L TEMPER_HTEMPERTEMPER_XS將讀出的12位溫度數(shù)據(jù) 轉(zhuǎn)換并保存INT_1820無FLAG1初始化DS18B20WRITE_1820A無向DS18B20中寫入數(shù)據(jù)INT_T1TH1TL1定時器T1中斷。裝定時初 值,初值為溫度差值,并對 P3.5取反驅(qū)動蜂鳴器。DISPLAYTEMPERTEMPER_XS無將溫度

4、通過數(shù)碼管顯示 出來READ_18200無TEMPER_LTEMPER_H從DS18B2(fr讀出數(shù)據(jù)并儲存7主程序程序流程圖Int0 的8 程序清單TEMPER_L EQU 36H;存放讀出溫度低位數(shù)據(jù)TEMPER_H EQU 35H;存放讀出溫度高位數(shù)據(jù)TEMPER EQU34H;存放轉(zhuǎn)換后的8位溫度值TEMPER_X£QU 33H;存放轉(zhuǎn)換溫度的小數(shù)部分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 復(fù)位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 讀出溫度數(shù)據(jù)LCALL TEMPER_CQV專換讀出的 溫度數(shù)據(jù)并保存MOV A,TEMPERCJNE A,LIMIT,NEXTNEXT:JNC NEXT1 ;TEMPER>=LIMITJMP NEXT2NEXT1:SETB TR1LJMP NEXT3NEXT2:CLRTR1NEXT3:MOV 31H,#00H ;顯示整數(shù)部分MOV 30H,#01HMOV B,#10DIV ABADD A,#02HMOV 37H,AMOV A,BADD A,#0CHMOV 36H,AMOV A,TEMPER_X配示小數(shù)部分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中斷服務(wù)程序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:;讀出轉(zhuǎn)換后的溫度值SETB DQ ;定時入口BCD: LCALL INIT_1820JB FLAG1,S22LJMP BCD;若DS18B2杯存在則返回S22: LCALL DELAY1MOV A,#0CCH;跳過ROMS配0CCHSETB DQRETLCALL WRITE_1820MOV A,#44HCLR DQNOPNOP發(fā)出溫度轉(zhuǎn)換命令LCALL WRITE_1820LCALL DELAYCBA: LCALL INIT_1820 JB F

11、LAG1,ABC LJMP CBAABC: LCALL DELAY1MOV A,#0CCH ;跳過ROMS配LCALL WRITE_1820MOV A,#0BEH ;發(fā)出讀溫度命令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讀出 兩個字節(jié)的溫度數(shù)據(jù)MOV R4,#2;將溫度高位和低位從DS18B2(fr讀出MOV R1,#36H;低位存入 36H(TEMPER_L)高位存入 35H(TEMPER_H)RE00:MOV R2,#8RE01:CLR CSETB DQNOPDQ;DQ=0 15USfi18B20送數(shù),主控器 必須完成DQ勺采樣SETB DQ ;主控器釋放DQMOV R3,#2DJNZ R3,$;延時 10usMOV C,DQ ;取dq數(shù)據(jù)位MOV R3,#23 ;延時 60usDJNZ R3,$RRC ADJNZ R2,

13、RE01MOV R1,ADEC R1DJNZ R4,RE00RETTEMPER_COV:;將讀出的數(shù)據(jù)進(jìn)行 轉(zhuǎn)換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.* ;鍵盤設(shè)定溫度上限值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 ;查詢輸 入值是否為數(shù)字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 ;查詢輸 入值是否為數(shù)字NEXT6:JNC CXUN1;閃爍

17、控制NEXT7: PUSH 05HPUSH 06HMOVR5,#70HMOVR6,#00HMOVR7,#02HMOVR0,#05HMOVR2,#07HMOVR3,#WSLALCALL WRNBYTLCALL DELAYPOP06HPOP05HMOV 41H,A ;存?zhèn)€位LCALL DISPLAY2 ;顯示個位數(shù)MOV A,41HADD A,14HMOV LIMIT,A;設(shè)定報警值JB P3.2,$CJNE A,#0BH,FH1FH1: LCALL RDKEYDOWN:CLR IE0POP PSWPOP ACCPOP 07HPOP 04HPOP 03HPOP 02HPOP 00HRETIRDKE

18、Y:MOVR0,#1FH;鍵值緩沖單元MOVR7,#01H;取一個數(shù)據(jù)(鍵值)MOVR2,#01H;指向內(nèi)部數(shù)據(jù)鍵值寄存器地址MOVR3,#WSLA_7290 取器件地址(寫)MOVR4,#RSLA_7290 ;取器件地址(讀)LCALL RDADD ;讀出7290的01H單元中的鍵值MOVA,1FH;取健值送緩沖單元DECARETDISPLAY2:;顯示輸入的個位數(shù)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:;顯示輸入的十位數(shù)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)帶有內(nèi)部單元地址的多字節(jié)寫 操作子程序WRNBYT.*;通用的I2C通訊子程序(多字節(jié)寫操 作);入口參數(shù)R7字節(jié)數(shù),R0:源數(shù)據(jù)塊

22、首 地址;R0原數(shù)據(jù)塊首地址;R2從器件內(nèi)部 子地址;R3:外圍器件地址(寫);相關(guān)子程序WRBYTSTOP CACKSTA.*;WRNBYT: PUSH PSWPUSH ACCWRADD: MOV A,R3 ;取外圍器件地地址(包含r/w=0)LCALL STA ;發(fā)送起始信號SLCALL WRBYT ;發(fā)送外 圍地址LCALL CACK ;檢測外 圍器件的應(yīng)答信號JB F0,WRADD ;如果應(yīng)MOV A,R2LCALL WRBYT ;發(fā)送內(nèi) 部寄存器首地址LCALL CACK ;檢測外 圍器件的應(yīng)答信號JB F0,WRADD ;如果應(yīng) 答不正確返回重來WRDA: MOV A,R0LCAL

23、L WRBYT ;發(fā)送外 圍地址LCALL CACK ;檢測外 圍器件的應(yīng)答信號JBF0,WRADD ;如果應(yīng)答不正確返回重來INCR0DJNZ R7,WRDALCALL STOPPOP ACCPOP PSWRET* ;(2)帶有內(nèi)部單元地址的多字節(jié)讀 操作子程序RDADD.* ;入口參數(shù)R7字節(jié)數(shù);;R0目標(biāo)數(shù)據(jù)塊首地址;R2從器件內(nèi) 部子地址;;R3器件地址(寫);R4器件地址(讀) ;相關(guān)子程序 WRBYTSTOP CACKSTA MNACK.* ;RDADD: PUSH PSW; 從PCF8563勺02H單元讀入7個參數(shù)PUSH ACC;存放于20H-26H 單元RDADD1: LCA

24、LL STAMOV A,R3 ;取器件地址(寫)LCALL WRBYT ;發(fā)送外圍地址LCALL CACK ;檢測外圍器件的應(yīng)答信號JB F0,RDADD1 ;如果應(yīng)答不正確返回重來MOV A,R2 ;取內(nèi)部地址LCALL WRBYT ;發(fā)送外圍地址LCALL CACK ;檢測外圍器件的應(yīng)答信號JB F0,RDADD1 ;如果應(yīng)答不正確返回重來LCALL STAMOV A,R4 ;取器件地址(讀)LCALL WRBYT ;發(fā)送外圍地址LCALL CACK ;檢測外圍器件的應(yīng)答信號JB F0,RDADD1 ;如果應(yīng)答不正確返回重來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;產(chǎn)生 4.7US延時NOPNOPNOPNOPCLR SDANOP;產(chǎn)生 4.7US延時NOPNOPNOPNOPCLR SCLRET;*; 停止信號子程序P.*STOP: CLR SDA ;停止彳肅號PSETB SCLNOP;產(chǎn)生 4.7US 延時NOPNOPNOPNOPSETB SDANOP;產(chǎn)生 4.7US延時NOPNOP

26、NOPNOPCLR SCLCLR SDARET ;*;應(yīng)答信號子程序 MACK;*MACK: CLR SDA;發(fā)送應(yīng)答信號ACKSETB SCLNOP ;產(chǎn)生4.7US延時NOPNOPNOPNOPCLR SCLSETB SDARET ;*;非應(yīng)答法信號子程序MNACK;*MNACK: SETB SDA ;發(fā)送非應(yīng)答 信號NACKSETB SCLNOP;產(chǎn)生 4.7US延時NOPNOPNOPNOPCLR SCLCLR SDARET;*;應(yīng)答檢測子程序CACK.*CACK: SETB SDA;應(yīng)答位檢測子程序SETB SCLCLR F0MOVC,SDA;采中¥ SDAJNCCEND;應(yīng)答正確時轉(zhuǎn) CENDSETBF0;應(yīng)答錯誤時F0置一CEND: CLRSCLRET ;* ; 發(fā)送一個字節(jié)子程序WRBYT .*WRBYT: PUSH 06HMOV R6,#08H;發(fā)送一個字節(jié)子程序WLP: RLC A;(入口參數(shù)A)MOV SDA,CSETB SCLNOP; 產(chǎn)生4.7US延時NOPNOPNOPNOPCLR SCLDJNZ R6,WLPPOP 06HRET*接收一個字節(jié)子程序RDBYT*RDBYT:PUSH 06HMOV R6,#08H個字節(jié)子程序RLP: SETB SDASETB SCL;接收J(rèn)*NOP 秒的延時!!NOPZLG

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論