大連理工大學單片機實驗報告(共25頁)
《大連理工大學單片機實驗報告(共25頁)》由會員分享,可在線閱讀,更多相關《大連理工大學單片機實驗報告(共25頁)(25頁珍藏版)》請在裝配圖網上搜索。
1、精選優(yōu)質文檔-----傾情為你奉上 大連理工大學本科設計報告 題目: 單總線高精度溫度采集系統(tǒng) 課程名稱: 單片機綜合設計實驗 學院(系): 信息與通信工程學院 專 業(yè): 電子信息工程 班 級: 電子 學 號: 學生姓名: 成 績: 2016 年 5 月 5 日
2、 一.設計要求 1. 啟動DS18B20進行12位高精度環(huán)境溫度采集 2. 利用12864LCD屏/數碼管顯示數據 3. 具有溫度上限聲光報警器 4. 可以通過鍵盤設定報警上限值(選) 二.設計分析及系統(tǒng)方案設計 通過DS18B20進行小數12位溫度轉換、采集,通過單片機讀取DS18B20采集到的12位溫度值進行二進制到十六進制的轉換,利用ZLG7290進行八位數碼管顯示;利用鍵盤進入中斷來設定報警上限,當溫度高于上限時進入報警子程序。利用SW1進入中斷來查看當前設置的溫度報警上下限值,利用ZLG7290和數碼管來顯示。主程序不斷循環(huán)采集溫度比較,并可隨時進
3、入中斷來修改溫度上下限和查看溫度值。 三.系統(tǒng)電路圖 四.外圍接口模塊硬件電路功能描述 1.DS18B20:用于測定溫度,測量范圍-55~+125,分辨率為0.0625℃,數據格式為二進制補碼形式。 2.ZLG7290B:用于數碼管動態(tài)顯示驅動,鍵盤掃描管理。能夠驅動8位共陰極結構的LED數碼管或64位獨立的LED,同時還能掃描管理多達64個按鍵的掃描識別,其中八個鍵可以作為功能鍵使用。接口采用IC結構。 3.蜂鳴器:這里用作報警,為無源蜂鳴器。 五.主程序中主要變量定義 變量名稱 內存單元 功
4、能 TEMPER_L 36H 存放溫度低四位 TEMPER_H 35H 存放溫度高四位 TEMPER 34H 轉換后的溫度值 TEMPER_BCD 33H BCD形式溫度值 TEMPER_NUM 60H 溫度值緩沖單元 WSLA_7290 70H 7290寫控制單元 RSLA_7290 71H 7290讀控制單元 20-27H 數碼管顯示緩沖區(qū) 28H 存放溫度上限值 30-31H 存放溫度BCD碼個位十位 六.系統(tǒng)軟件中各個子程序的功能描述 子程序名稱 入口參數
5、 出口參數 功能 描述 GET_TEMPER 無 35H,36H 讀取18B20的溫度值 READ_18200 35H,36H 無 向18b20讀控制字 TEMPER_COV 35H,36H 20H,21H 溫度轉換成十進制BCD碼形式 CF 無 R3,R4 拆分子程序,拆分送數碼管顯示 INIT_1820 無 無 溫度傳感器初始化 BUZZER 無 無 無 蜂鳴器控制發(fā)聲子程序 INT_7290 無 28H 讀取按鍵外部中斷子程序 RDKEY 無 A 讀取鍵值子程序 DELAY 無 無 延時子程序
6、 七.主程序程序流程圖 8. 程序清單(要求打印格式要規(guī)范、重要的語句要有必要的注釋) SDA BIT P1.0 SCL BIT P1.1 TEMPER_L EQU 36H TEMPER_H EQU 35H TEMPER EQU 34H ;轉換后溫度值 TEMPER_BCD EQU 33H ;BCD碼溫度值 TEMPER_NUM EQU 60H ;緩沖單元 WSLA_7290 EQU 70H RSLA_7290 EQU 71H FLAG1
7、BIT 00H DQ BIT P3.3 ;總線控制單元 ORG 0000H LJMP MAIN ORG 0003H LJMP INT_7290 ORG 0100H MAIN: MOV SP,#70H ;ZLG7290復位 CLR P1.7 LCALL DELAY SETB P1.7 MOV 28H,#1EH ;溫度上限初始值30度 MOV TMOD,#01H ;模式一,16位計數器 SETB EA ;允許INTO中斷
8、 MODE: JB P1.3,SETTMP ;撥碼為0時采集溫度 ;溫度采集 TMP: CLR EX0 MOV 27H,#1FH ;t LP1: LCALL GET_TEMPER LCALL TEMPER_COV ;7290顯示 MOV R7,#08H MOV R0,#20H MOV R2,#10H MOV R3,#WSLA_7290 LCALL WRNBYT LCALL DELAY MOV A,TEMPER ;判斷溫度上限 MOV 28H,R5 CL
9、R C CJNE A,28H,rel ;此處報警溫度為30度 rel: JC NET LCALL BUZZER ;大于等于時蜂鳴器報警 ;閃爍 MOV 28H,#70H ;閃爍命令字 MOV 29H,#7FH ;閃爍命令字 MOV R7,#02H ;設定數據個數 MOV R0,#28H ;設置源數據首地址 MOV R2,#07H ;設置外圍器件內部寄存器首地址 MOV R3,#WSLA_7290 ;設定外圍器件地址 LCALL WRNBYT ;調用顯示子程序 LCALL DELAY LJMP NEX
10、TT ;設定溫度上限 SETTMP: SETB EX0 ;7290復位 CLR P1.7 LCALL DELAY SETB P1.7 ;顯示設定內容 MOV 27H,#0B6H ;S MOV 26H,#9EH ;E MOV 25H,#1FH ;T. MOV R7,#03H MOV R0,#25H MOV R2,#15H MOV R3,#WSLA_7290 LCALL WRNBYT LCALL DELAY SJMP NEXTT NET: MOV 28H,#70
11、H ;不能閃爍 MOV 29H,#00H MOV R7,#02H MOV R0,#28H MOV R2,#07H MOV R3,#WSLA_7290 LCALL WRNBYT LCALL DELAY NEXTT: CALL DELAY SJMP MODE GET_TEMPER: SETB DQ ;定時入口 BCD: LCALL INIT_1820 JB FLAG1,S22 LJMP BCD ;若ds18b20不存在則返回 S22: LCALL DELAY1 MOV A,#0CCH ;
12、跳過rom匹配0cch LCALL WRITE_1820 MOV A,#44H ;發(fā)出溫度轉換命令 LCALL WRITE_1820 LCALL DELAY CBA: LCALL INIT_1820 JB FLAG1,ABC LJMP CBA ABC: LCALL DELAY1 MOV A,#0CCH ;跳過rom匹配 LCALL WRITE_1820 MOV A,#0BEH ;發(fā)出讀溫度命令 LCALL WRITE_1820 LCALL READ_18200 RET WRITE_1820:
13、;寫ds18b20程序 MOV R2,#8 CLR C WR1: CLR DQ MOV R3,#6 ;延時24us DJNZ R3,$ RRC A MOV DQ,C MOV R3,#23 ;延時60us DJNZ R3,$ SETB DQ NOP DJNZ R2,WR1 SETB DQ RET READ_18200: ;從1820中讀出兩個字節(jié)溫度數據 PUSH 01H MOV R4,#2 MOV R1,#36H RE00: MOV R2,#8 RE01: CLR
14、C SETB DQ NOP CLR DQ NOP NOP SETB DQ MOV R3,#2 DJNZ R3,$ MOV C,DQ MOV R3,#23H DJNZ R3,$ RRC A DJNZ R2,RE01 MOV @R1,A DEC R1 DJNZ R4,RE00 POP 01H RETU8 TEMPER_COV: ;將讀出的數據轉換 PUSH DPH PUSH DPL PUSH 02H MOV A,#0F0H ANL A
15、,TEMPER_L ;舍去小數點后的四位 SWAP A MOV TEMPER_NUM,A MOV A,TEMPER_H ANL A,#07H SWAP A ADD A,TEMPER_NUM MOV TEMPER,A ;轉換成十進制數顯示 MOV B,#10 DIV AB MOV 30H,B ;個位 MOV B,#10 DIV AB MOV 31H,B ;十位 ANL A,#0FH ;百位 SWAP A ADD A,B MOV TEMPER_BCD,A
16、 LCALL CF2 ;拆分查表 MOV 25H,R3 MOV 26H,R4 MOV A,30H ANL A,#0FH LCALL CF MOV 24H,R3 ;處理四位小數位數據 MOV A,TEMPER_L ANL A,#0FH ;取低四位數據 MOV B,#02H MUL AB ;字節(jié)轉為字 MOV DPTR,#NUMSEG MOVC A,@A+DPTR MOV TEMPER_BCD,A LCALL CF2 MOV 22H,R3 MOV 23H,R4
17、 MOV A,TEMPER_L ANL A,#0FH MOV B,#02H MUL AB INC A MOVC A,@A+DPTR MOV TEMPER_BCD,A LCALL CF2 MOV 20H,R3 MOV 21H,R4 POP 02H POP DPL POP DPH RET ;--------------小數部分查表------------------------ NUMSEG: DW 0000H,0625H,1250H,1875H,2500H,3125H,3750H,4375H DW
18、 5000H,5625H,6250H,6875H,7500H,8125H,8750H,9375H ;-------------------------------------------------- ;--------------拆分顯示整數子程序------------------ CF: PUSH 02H PUSH DPH PUSH DPL MOV DPTR,#LEDSEG MOV R2,TEMPER_BCD ANL A,#0FH MOVC A,@A+DPTR ;查表得字形碼 MOV R3,A MOV A,R2 S
19、WAP A ANL A,#0FH MOVC A,@A+DPTR MOV R4,A INC R3 ;加上小數點 POP DPL POP DPH POP 02H RET ;----------------------------------------------- ;--------------拆分顯示小數子程序------------------ CF2: PUSH 02H PUSH DPH PUSH DPL PUSH ACC MOV DPTR,#LEDSEG MOV R2,TEMPER_BCD MO
20、V A,R2 ANL A,#0FH MOVC A,@A+DPTR MOV R3,A MOV A,R2 SWAP A ANL A,#0FH MOVC A,@A+DPTR MOV R4,A ;加上小數點 POP ACC POP DPL POP DPH POP 02H RET ;----------------------------------------------- ;-----------------led字型碼--------------------- LEDSEG: DB 0FCH,60H,0
21、DAH,0F2H,66H,0B6H,0BEH,0E4H DB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EH ;----------------------------------------------- INIT_1820: SETB DQ NOP CLR DQ MOV R0,#80H TSR1: DJNZ R0,TSR1 ;延時300us SETB DQ MOV R0,#25H ;96us TSR2: DJNZ R0,TSR2 JNB DQ,TSR3 LJMP TSR4 ;延時 T
22、SR3: SETB FLAG1 ;致標志位 LJMP TSR5 ;ds18b20存在 TSR4: CLR FLAG1 ;清標志位 LJMP TSR7 ;ds18b20不存在 TSR5: MOV R0,#06BH ;延時200us TSR6: DJNZ R0,TSR6 TSR7: SETB DQ RET DELAY1: MOV R7,#20H ;80us延時 DJNZ R7,$ RET ;---------------蜂鳴器驅動子程序-------------- BUZZER: PUSH 07H MOV R
23、7,#00H MOV TL0,#33H ;設置定時0.5us初值 MOV TH0,#0FEH SETB TR0 ;啟動t0 WAIT: JNB TF0,$ CLR TF0 MOV TL0,#33H MOV TH0,#0FEH CPL P1.2 DJNZ R7,WAIT CLR TR0 SETB P1.2 POP 07H RET ;--------------------------------------------- ;-------------外部中斷服務程序---------------- INT_7290: PUS
24、H 00H PUSH 01H PUSH 02H PUSH 03H PUSH 04H PUSH 07H PUSH ACC PUSH PSW SJMP RD1 RD1: JB P3.2,$ ;以查詢方式等待下一次按鍵操作 SWAP A LCALL RDKEY CJNE A,#0AH,WAITT ;容錯功能調整 WAITT: JNC RD1 MOV TEMPER_BCD,A LCALL CF2 MOV B,#0AH MUL AB MOV R5,A MOV 23H,R3
25、 MOV R7,#01H MOV R0,#23H MOV R2,#13H MOV R3,#WSLA_7290 LCALL WRNBYT KEY2: JB P3.2,$ ;以查詢方式等待下一次按鍵操作 LCALL RDKEY CJNE A,#0AH,WAITT2 WAITT2: JNC KEY2 MOV TEMPER_BCD,A LCALL CF2 MOV A,R5 ADD A,TEMPER_BCD MOV R5,A MOV 22H,R3 MOV 21H,#9CH ;C MOV
26、R7,#02H MOV R0,#21H MOV R2,#11H MOV R3,#WSLA_7290 LCALL WRNBYT ;確定鍵 COMF: JB P3.2,$ ;等待確認鍵 LCALL RDKEY CJNE A,#0FH,COMF MOV 28H,R5 ;上限值放入28h中 DOWN: ;7290復位 CLR P1.7 LCALL DELAY SETB P1.7 CLR IE0 ;必須清標志 POP PSW POP ACC POP 07H POP 04H POP 03H POP
27、 02H POP 00H RETI ;--------------------------------------------- ;------------讀取鍵值子程序(鍵值保存在A中)--- RDKEY: MOV R0,#1FH MOV R7,#01H MOV R2,#01H MOV R3,#WSLA_7290 MOV R4,#RSLA_7290 LCALL RDADD MOV A,1FH DEC A RET ;---------------------------------------------- ;---------
28、---延時子程序----------------------- DELAY: PUSH 00H ;延時子程序 PUSH 01H MOV R1,#00 LP: MOV R1,#00H DJNZ R1,$ DJNZ R0,LP POP 01H POP 00H RET ;--------------------------------------------- (I2C子程序省略) 九.系統(tǒng)調試運行結果說明、分析所出現得問題,設計體會與建議 硬件使用ZLG51單片機開發(fā)平臺,軟件使用KEil2軟件進行程序的編寫編譯以及調試。 運行結
29、果:能夠實現當前環(huán)境溫度的采集以及分為整數部分和小數部分的顯示,設定溫度上限,超過設定上限溫度進行蜂鳴器報警,數碼管同時閃爍,溫度低于設定值立刻停止閃爍和報警。能夠通過撥碼控制模式切換,切換到設定上限溫度模式,通過按鍵輸入上限溫度值改變當前上限溫度,能夠糾錯,輸入10以上的數字時不顯示,按下確定鍵時確定溫度上限值。 問題: (1)采集的溫度為十六進制數字,如何轉換成十進制BCD碼。通過查詢上學期學習的計算機原理的相關算法,解決了此問題,成功顯示。 (2)小數部分的顯示問題。通過將有可能出現的小數情況列舉并進行查表顯示,最后成功顯示。 (3)高于溫度報警閃爍之后,溫度下降以后數碼管仍然閃
30、爍,后來發(fā)現是子程序邏輯錯誤已經改正。 十.結論及設計體會 通過本次實驗,我對DS18B20芯片有了一定的了解,對于DS18B20編程的時序要求以及相應的編程操作流程有了更深度的掌握。這次實驗綜合了中斷、查詢、時鐘、ZLG7290芯片、DS18B20芯片等很多知識。本次試驗采用子程序調用的方法進行設計,可以逐一的進行調試,對于代碼量比較大的程序來說子程序設計還是很好的編程開發(fā)方式。此次試驗中遇到很多細節(jié)的錯誤,比如子程序順序混亂等邏輯錯誤,導致程序總是出現錯誤,幸好在最后都成功的改正了。 在代碼量比較大的程序設計時,不能只對軟件代碼進行修改,還要結合硬件調試,否則很難看出問題,同時不怕錯誤,會正確的調試方法,靈活使用斷點,會找錯并改錯也是很重要的素質。這次實驗對我以后的程序設計任務有很大的啟發(fā)作用,讓我明白了程序設計的基本順序和需要注意的地方以及調試方法,相信在以后的學習和工作中都會受益。最后感謝老師的悉心教導。 參考文獻 [1] 《MCS-51單片機應用實驗教程》 作者:陳育斌,秦曉梅等 專心---專注---專業(yè)
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。