單片機實驗報告SJ_第1頁
單片機實驗報告SJ_第2頁
單片機實驗報告SJ_第3頁
單片機實驗報告SJ_第4頁
單片機實驗報告SJ_第5頁
已閱讀5頁,還剩26頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 2012211117班23號沈靜單片機設計實驗報告2014年小學期單片機設計實驗報告題目:基于PIC16f877單片機的溫度監測控制系統班 級: 2012211117班 班內序號: 23號 實驗組號: 20組 學生姓名: 沈靜 指導教師: 丘老師 張老師 期中檢查教師評語指導教師簽字: 年 月 日題目:基于PIC16F877A單片機的溫度監測控制系統2012211117班 沈靜實驗摘要 在本次試驗中,為滿足溫度控制的需要,我們以PIC16F877A單片機為核心,運用DS18B20采集環境溫度的信息,并通過鍵盤人工輸入預警溫度值。若環境溫度高于預警溫度,則風扇驅動,開始降溫,以此來達到對溫度的

2、監測與控制。AbstractIn this experiment,PIC16F877A microcontroller is the center.We use DS18B20 temperature sensor to catch the information of the environmental temperature,at the same time,we input the threshold temperature by ourselves through the 4*4 matrix keyboard. If the environmental temperature is

3、higher than the threshold temperature,then the electric fan will be driven to reduce the temperature.In this way,we can successfully realize our purpose of monitoring and controlling the temperature.關鍵字單片機microcontroller 溫度傳感器temperature sensor 闕溫threshold temperature 4*4矩陣鍵盤4*4 matrix keyboard 一.實驗

4、論證與比較1.溫度信息采集模塊本實驗運用溫度傳感器DS18B20來進行環境溫度的采集。采集電路如下:Output4.7K 3 2 1 +5V 18B20 GND 104 2.4*4矩陣鍵盤模塊本實驗通過在矩陣鍵盤上輸入設定的高溫預警溫度值,并將此預警值與DS18B20測得的環境溫度進行比較,進而達到溫度檢測與控制目的。而鍵盤的模塊圖如下所示: VCC 行線 3行 RD7 1 2 3 4 2行 RD6 5 6 7 8 1行 RD5 9 0 A B 0行 RD4 C D E F 列線 RB3 RB2 RB1 RB0 3列 2列 1列 0列 4*4矩陣鍵盤: 1 2 3 4 5 6 7 8 9 0

5、A B C D E F RB3 RB2 RB1 RB0 RD7RD6 RD5 RD4二.系統總體設計進入下一時刻系統模塊總體框圖如下: 預警溫度與環境溫度比較顯示屏上顯示當前時刻環境溫度數碼管顯示輸入的預警溫度值通過鍵盤輸入二位數請輸入設置溫度環境溫度更高風扇驅動,開始降溫風扇未接通預警溫度更高進入下一時刻溫度控制模塊框圖該模塊要不斷通過溫度傳感器檢測某時刻環境溫度信息,并與輸入的預警溫度做出相應的比較和處理,因此,需要一個無限循環,在單片機上電后,持續執行,不斷監測環境溫度,若達到預警溫度值,則繼電器驅動風扇轉動,以控制溫度。框圖如下:開始主程序初始化各個端口顯示屏顯示提示信息外部輸入預警溫

6、度數碼管顯示預警溫度測量當前室溫下一時刻顯示屏上顯示出當前室溫下一時刻當前室溫是否高于預警溫度否風扇轉動,開始降溫是 3.溫度傳感器讀寫模塊框圖 開始 初始化DS18B20 發送ROM指令 發送RAM指令 進行數據讀寫工作周期1 結束工作周期2 復位skip ROM指令等待7501MS延時工作周期1 溫度轉換存儲器操作指令讀寫RAM存儲器操作指令skip ROM指令 復位工作周期2 三.硬件連接1.溫度傳感器與單片機連接(小四 宋體)溫度傳感器有三個端口,端口3連接5V電源,端口1接地,端口2是輸入輸出端口,連接到PIC16F877單片機。溫度傳感器采集外界溫度,并且可以無限循環,持續執行,不

7、斷采集當前某個時刻的環境溫度。溫度傳感器可以通過輸入輸出端口與單片機進行協議以及數據通信,從而為之后的溫度控制創造條件。 + +5V單片機 3 2 14.7KOutput DS18B20 104 GND2.LCD顯示模塊和單片機連接本實驗中應用LCD12864模塊實現輸入預警溫度的提示信息以及當前溫度值的顯示。 連接模塊如下: 單 片 機RE0 RE1 RE2 LCD12 RS 8 RW6 EN43.繼電器驅動風扇模塊和單片機連接+5V風扇 +5VVCC K1GND G1L-IN B1 H-INGNDGND RA0 單 片 機4.數碼管模塊和單片機連接單片機RA2RA3 四.調試過程在本次試驗

8、中我主要負責跑馬燈和溫度傳感器模塊。1. 跑馬燈 首先,剛開始進入實驗室的前兩天,我基本上都在熟悉MPLAB軟件以及匯編語言。老師一開始給我們一個初級任務:完成跑馬燈功能的在線仿真與燒寫。我認真研讀老師推薦的各種相關資料,明白了MPLAB 如何使用,匯編語言的使用以及如何用匯編語言編寫出能實現自己設想功能的代碼。感覺自己學習的差不多了之后,我就開始進行跑馬燈的設計,很快就成功完成了跑馬燈的在線仿真與燒寫。2.溫度傳感器準備編寫溫度傳感器部分代碼之前,我先閱讀了溫度傳感器DS18B20的結構與連接要求。大致了解了之后,我又上網查了相關的資料,明白了DS18B20有三個接口,第一個接口接地,第二個

9、接口是輸出,第三個接口連接電源。而當單片機開始調用DS18B20時,首先會初始化DS18B20,接著發送ROM指令,然后發送RAM指令,之后開始進行數據讀寫,而溫度傳感器進行數據讀寫時總會在一開始進行復位,之后可以跳過ROM指令,直接進行溫度轉換或是讀寫RAM指令。總的來說,溫度傳感器可以即時感知環境溫度值,然后將這個值發給單片機供單片機進行后續操作。3.DS18B20的溫度轉換程序DS18B20測得的環境溫度值是以二進制的形式存儲的,因此我們需要一個溫度轉換程序來將其轉換成十進制的攝氏溫度值,其中整數部分為三位,小數部分為四位。溫度傳感器中的溫度值以二進制的形式存儲兩個字節共八位。先將高位的

10、那個字節保留低三位即:二的六次方,二的五次方,二的四次方。接著將低位的那個字節進行高低半字節交換,之后組合得到七位整數部分。將這個七位整數部分先減一百,計算百位上是0還是1,再將減去100后的結果覆蓋原數據。將這個結果再減10,若減去10后結果大于0,則用這個結果覆蓋原數據。并將十位上的數值從0開始加1,此后不斷循環此過程:結果持續減去10,十位上不斷加1。直到最后一次再減10的時候結果小于0,則此時十位上加1的次數即為十位數值。因為最后一次減去10后結果為負,所以將此結果再加個10,所得的值即為個位上的數值。同理可轉換得小數部分的數值4.硬件焊接與調試軟件部分編寫完成后我們進行了在線仿真與燒

11、寫,也都成功了,所以我們小組就開始進行下一步:硬件焊接。然而在焊接過程中,我們遇到了不少“攔路虎”。我們首先焊接的是電源電路、單片機以及LCD液晶模塊。在第一次焊接好后,液晶屏怎么也不顯示。經過檢查,我們發現忘了焊上晶振。在焊好晶振后液晶屏還是不顯示,排除各種原因后,我們猜測是焊接技藝的問題,于是我們重新焊接了4遍,最終液晶屏上有了顯示,我們從中深刻體會到虛焊的危害。在焊接數碼管和鍵盤模塊時,鍵盤上輸入的數字不能在數碼管上顯示,經過檢查,發現是因為矩陣鍵盤沒加上拉電阻。加上上拉電阻后,數碼管可以顯示數字,可是若鍵盤輸入,數碼管不會將輸入的數字顯示出來。這時老師提醒我們,有些組的上拉電阻加了8個

12、,而我們只加了4個,于是我們又加了4個上拉電阻,通電后發現數碼管和鍵盤的功能都可以實現了。在這整個焊接過程中,我們又因為虛焊問題拆了板子,重新焊接了好幾次相應的部分。總的來說,硬件焊過程中最重要的還是細心和耐心,我們要保證焊接所用的導線金屬部分長度適當,并且焊接時錫不能焊多了,防止短路。總之,我們不能急躁,一步步慢慢得焊,爭取每一部分都焊的完美,不要留有虛焊的可能,最后才能更快的成功。俗話說“心急吃不了熱豆腐”,我們通過這次硬件焊接真的深刻領悟到這句話的深意,明白了一步一步腳踏實地的重要性。五.參考文獻PIC單片機實用教程基礎篇 (五號 宋體)李學海北京航空航天大學出版社使用說明:的確是一本不

13、可或缺的教材,本書列舉了很多實用的具有實戰意義的例子,單片機入門就是通過把這本書里的好例子一字一行敲進電腦去來實現的。PIC單片機實用教程提高篇李學海北京航空航天大學出版社使用說明:繼承了前面基礎篇的風格,例子也具有實戰意義,主要講RA、TMR2的使用和CCP模塊的PWM脈寬調制功能。六.實驗心得體會本次實驗歷時兩周,我們小組從6月23起就“駐守”在實驗室,除了吃飯睡覺,我們的所有時間都呆在實驗室,可以說,實驗室就像是我們的第二個家。這15天的體驗開闊了我的視野,我終于體會到那些大神們整天泡在實驗室,編著各種代碼的心情。之前我們在實驗課上所作的內容基本上兩三個小時就可以完成,而這次實驗相比之下

14、就是一個巨大的工程,15天的時間,我們需要從零開始,一步步完成我們的實驗。我們需要學習單片機的基礎知識,我們需要自行設計實驗內容,我們需要掌握溫度傳感器的原理與應用,我們需要明了焊接的方法與技巧。可以說,這15天以來,沒有一天是虛度的,我們在這次自主實驗中飛速成長。 本次實驗一開始是完成跑馬燈功能的實現,在給定的4天時間里面,我認真學習知識,了解了16f877單片機的組成,學習并掌握了匯編語言的使用,能熟練運用在現仿真與脫機燒寫,最終成功實題目現了跑馬燈功能。同時,我們小組通過查閱各種資料,在老師的建議下確定了本小組實驗與內容:完成基于16f877單片機的溫度監測控制系統。我們預期實現的功能為

15、:輸入一個預警溫度,例如31度,接著顯示屏上會顯示出溫度傳感器測得的環境溫度,接下來預警溫度的會與環境溫度進行比較。如果環境溫度高于預警溫度,則繼電器會接通,驅動小風扇轉動,開始降溫,如果環境溫度低于預警溫度,則溫度傳感器繼續測量下一時刻的環境溫度值。在本次實驗中,由于剛剛開始接觸單片機及其他元件,我們遇到一次又一次的挫折,但是經過小組的努力與堅持,最終都將這次難題一一克服,而在這個過程中,我們對于如何用匯編語言實現自己想要完成的功能,如何實現鍵盤控制數碼管顯示,如何設置更友好的顯示界面等等都有了更加深刻的理解,我們從中學到了很多很多。首先,軟件的編寫與調試就是我們有生以來遇到的最大的難題。我

16、們翻遍從圖書館借的資料,上網查各種有用的信息,與同學討論交流。兩個多星期的學習與實驗,我們小組不僅成功完成了預定的目標,更重要的是,在這15天的時間里,我們成功運用自己完全不了解的匯編語言來編寫一個巨大的工程。而在實驗過程中,我們對于毅力,忍耐,耐心,細心等也有了更深的體會,小組成員間也在15天的相處與共同努力中,建立起了深厚的友誼。最后我們共同攜手,互相幫助,小組內進行無數次激烈的討論,終于完成了一整個對我們而言無比浩大的工程。這次試驗,將在我的人生中烙下一個永不磨滅的痕跡。我忘不了最初拿到課題時的茫然與無措,忘不了一句一句背誦匯編語句時的辛酸,忘不了一次次代碼編譯失敗時的苦澀難受,忘不了埋

17、頭奮戰時靈感突現的興奮,忘不了一遍又一遍重新焊接時的痛苦,忘不了在老師提點下找到錯誤之處時的快樂,忘不了取得階段性成功時小組內每個成員臉上的愉悅笑容,忘不了最終成功實現當初設計的所有功能時內心無與倫比的成就感。這半個月內的時間,帶給我那么多那么多難以忘記的美好回憶,我學到了很多很多,也成長了很多很多。真的很感謝小組內每個成員的無私奉獻,很感謝老師諄諄的教誨,我從這次試驗中收獲頗豐。七.源代碼;改動:共陽數碼管、4*4鍵盤;4*4鍵盤(列0-行3)接(RD0-7);18B20溫度測量+LCD顯示溫度;PORTA口,RA0接繼電器L_IN,RA2,RA3控制數碼管位碼;PORTB口,數碼管段碼;所

18、有資源:;1、TMRO定時器。產生溫度轉換所需要的延時時間。;2、PORTE口。即做LCD顯示時可控制端口,RE1同時做18B20的數據接口;3、PORTC口。做LCD顯示時的數據口。;功能說明;1、通過18B20采集當前環境;最高溫度可顯示127.9375,最低溫度可顯示0.0625(無負溫度處理部分);2、將溫度在LCD上顯示(3位整數,4位小數);18B20溫度測量+LCD顯示溫度;源程序如下: LIST P=PIC16F877 TITLE="LCD DISPLAY" ERRORLEVEl -302 ;去掉編譯時的302號提示信息_CONFIG 3F72H ;晶振配置

19、HS,看門狗禁止,上電延時使能,掉電復位使能 ;低電壓編程禁止,代碼不保護;*以下是暫存器的定義*#INCLUDE<P16F877A.INC>#DEFINE RS PORTE,0 ;LCD控制信號#DEFINE RW PORTE,1 ;LCD控制信號#DEFINE E PORTE,2 ;LCD控制信號#DEFINE DAT PORTC ;LCD數據線#DEFINE DQ PORTE,1 ;18B20數據口 CBLOCK 20H DLY_CNT2 ;延時1S用的計數器2 DLY_CNT3 ;延時1S用的計數器2 KeyHigh4 ;按鍵高四位掃描值 KeyLow4 ;按鍵低四位掃描值

20、 ScanCode ;掃描碼 KeyIndex1 ;鍵值1 KeyIndex2 ;鍵值2 SetShi ;十位 SetGe ;個位 ShowTimes1 ShowTimes2 ;控制進入SHOW死循環的時間長度 DQ_DELAY1 DQ_DELAY2 TEMP TEMP1 TEMP2 ;存放采樣到的溫度值 COUNT COUNT1 RealShi RealGe LCD1 LCD2 LCD3 LCD4 LCD5 LCD6 LCD7 LCD8 LCD9 LCD10 LCD11 LCD12 LCD13 LCD14 LCD15 BAW SHW GEW KEY TEMP_CHAR ENDCTMR0_VA

21、LUE EQU 0AH ;寄存器初值為6,預分頻比1:4,中斷一次時間為4*(256-6)=1000usDQ_DELAY_VALUE1 EQU 0FAHDQ_DELAY_VALUE2 EQU 4H ;*以下是宏定義*READ_STATE MACRO ;讀18B20的狀態 BCF RS BSF RW BSF E ENDMWRITE_COMMAND MACRO ;寫命令 BCF RS BCF RW BCF E ENDMWRITE_DATA MACRO ;寫數據 BSF RS BCF RW BCF E ENDM;*以下是程序的開始* ORG 00H NOP GOTO main ;入口地址 ORG 0

22、4H RETFIE ;在中斷入口出放置一條中斷返回指令,防止干擾產生中斷;-LCDDISPLAY CALL INITIAL CALL DELAY10MS MOVF LCD1,W CALL SENDCHAR MOVF LCD2,W CALL SENDCHAR MOVF LCD3,W CALL SENDCHAR MOVF LCD4,W CALL SENDCHAR MOVF LCD5,W CALL SENDCHAR MOVF LCD6,W CALL SENDCHAR MOVF LCD7,W CALL SENDCHAR MOVF LCD8,W CALL SENDCHAR; MOVLW 0A8H; CA

23、LL SENDML MOVF LCD9,W CALL SENDCHAR MOVF LCD10,W CALL SENDCHAR MOVF LCD11,W CALL SENDCHAR MOVF LCD12,W CALL SENDCHAR MOVF LCD13,W CALL SENDCHAR MOVF LCD14,W CALL SENDCHAR MOVF LCD15,W CALL SENDCHAR RETURN;-;LCD INITIAL;-INITIAL CLRF PORTE MOVLW 08H CALL SENDML MOVLW 38H CALL SENDML MOVLW 0FH CALL SE

24、NDML MOVLW 06H CALL SENDML MOVLW 01H CALL SENDML MOVLW 02H CALL SENDML RETURN;-SENDCHAR MOVWF TEMP_CHAR BSF E MOVF TEMP_CHAR,W MOVWF PORTC NOP NOP BSF RS BCF RS BCF E CALL DELAY10MS RETURN;-SENDML MOVWF PORTC CALL SETCOM;設置EN為1,使能LCD NOP CALL CLECOM;將EN、RS、RW置0 MOVLW 0FFH MOVWF PORTC CALL DELAY1MS R

25、ETURN;-SETCOM BSF E ;設置EN為1,使能LCD RETURN;-CLECOM CLRF PORTE ;將EN、RS、RW置0 RETURN;-DELAY1MS MOVLW 40H MOVWF 23HLOOP4M DECFSZ 23H,F GOTO LOOP4M RETURN;-DELAY10MS: MOVLW .200 MOVWF DLY_CNT2 ;中循環寄存器LOOP2: MOVLW .166 MOVWF DLY_CNT3 ;內循環寄存器LOOP3: DECFSZ DLY_CNT3,F ;內循環寄存器遞減 GOTO LOOP3 ;繼續內循環 DECFSZ DLY_CNT

26、2,F ;中循環寄存器遞減 GOTO LOOP2 ;繼續中循環 RETURNScanKeypad: BANKSEL TRISD MOVLW 0xF0 MOVWF TRISD ;高四位輸入,低四位輸出 BANKSEL PORTD CLRF PORTD ;低四位輸出0 NOP ;使指令執行完畢,輸出狀態確定 MOVF PORTD,W ;讀取高四位狀態 MOVWF KeyHigh4 ;獲得高四位輸入值 MOVLW 0xF0 SUBWF KeyHigh4,W ;判斷高四位是否全為1 BZ NoKey ;全為1說明無按鍵按下 CALL DELAY10MS ;延時消抖 BANKSEL TRISD MOVL

27、W 0x0F MOVWF TRISD ;低四位輸入,高四位輸出 BANKSEL PORTD CLRF PORTD ;高四位輸出0 NOP ;使指令執行完畢,輸出狀態確定 MOVF PORTD,W ;讀取低四位狀態 MOVWF KeyLow4 ;獲得低四位輸入值 MOVLW 0x0F SUBWF KeyLow4,W ;判斷低四位是否全為1 BZ NoKey ;全為1說明無按鍵按下 MOVF KeyLow4,W IORWF KeyHigh4,W ;按位或運算,得到鍵值碼 RETURN ;掃描碼放在W中NoKey: MOVLW 0x00 RETURNSMG_TABLE: ADDWF PCL,F ;0

28、 1 2 3 DT 0x3f,0x06,0x5b,0x4f ;4 5 6 7 DT 0x66,0x6d,0x7d,0x07 ;8 9 A b DT 0x7f,0x6f,0x77,0x7c ;C d E F DT 0x39,0x5e,0x79,0x71ScanCode_Table: ADDWF PCL,F ;0 1 2 3 DT b'01110111',b'01111011',b'01111101',b'01111110' ;4 5 6 7 DT b'10110111',b'10111011',b&#

29、39;10111101',b'10111110' ;8 9 A b DT b'11010111',b'11011011',b'11011101',b'11011110' ;C d E F DT b'11100111',b'11101011',b'11101101',b'11101110' main NOP CLRF BAW CLRF SHW CLRF GEW BSF STATUS,RP0 MOVLW 03H MOVWF TRISB CLRF T

30、RISC;寄存器復位0,D全部為輸出 CLRF TRISE;寄存器復位0,E全部為輸出 BCF STATUS,RP0 MOVLW 0c7h MOVWF LCD1 MOVLW 0ebh ;請 MOVWF LCD2 MOVLW 0cah MOVWF LCD3 MOVLW 0e4h ;輸 MOVWF LCD4 MOVLW 0c8h MOVWF LCD5 MOVLW 0ebh ;入 MOVWF LCD6 MOVLW 0c9h MOVWF LCD7 MOVLW 0e8h ;設 MOVWF LCD8 MOVLW 0d6h MOVWF LCD9 MOVLW 0c3h ;置 MOVWF LCD10 MOVLW

31、 0ceh MOVWF LCD11 MOVLW 0c2h ;溫 MOVWF LCD12 MOVLW 0b6h MOVWF LCD13 MOVLW 0c8h ;度 MOVWF LCD14 MOVLW ':' ;: MOVWF LCD15 CALL LCDDISPLAY BANKSEL TRISB ;選擇TRISB寄存器的bank CLRF TRISB ;TRISB清零,即C口全為輸出 BANKSEL PORTB ;選擇PORTB寄存器的bank CLRF PORTB ;輸出為0,小燈全滅 BANKSEL TRISA CLRF TRISA BANKSEL PORTA CLRF PO

32、RTA BSF PORTA,0LOOP0: CALL ScanKeypad ;掃描碼放在W中,為0說明無按鍵按下 BZ LOOP0 ;若掃描碼為0則繼續掃描鍵盤 MOVWF ScanCode ;保存掃描碼 MOVLW 0xFF MOVWF KeyIndex1 ;為了使加1后的KeyIndex1是0NEXT_KEYCODE0: INCF KeyIndex1,F ;鍵值1索引號加1 MOVF KeyIndex1,W ;鍵值1索引號送W CALL ScanCode_Table;獲得索引號對應的掃描碼 SUBWF ScanCode,W ;相減判斷是否相等 BNZ NEXT_KEYCODE0 ;不為0,

33、說明不等,再比較下一個 ;為0說明相等,說明此時的KeyIndex1就是掃描碼對應的值了 MOVF KeyIndex1,W MOVWF SetShi CALL SMG_TABLE ;獲得鍵值對應的數碼管字形碼 MOVWF PORTB ;送B口顯示 BANKSEL PORTA ;選擇PORTA寄存器的bank BSF PORTA,3LOOP1: CALL ScanKeypad ;掃描碼放在W中,為0說明無按鍵按下 BZ LOOP1 ;若掃描碼為0則繼續掃描鍵盤 MOVWF ScanCode ;保存掃描碼 MOVLW 0xFF MOVWF KeyIndex2 ;為了使加1后的KeyIndex2是0

34、NEXT_KEYCODE1: INCF KeyIndex2,F ;鍵值索引號加1 MOVF KeyIndex2,W ;鍵值索引號送W CALL ScanCode_Table;獲得索引號對應的掃描碼 SUBWF ScanCode,W ;相減判斷是否相等 BNZ NEXT_KEYCODE1 ;不為0,說明不等,再比較下一個 ;為0說明相等,說明此時的KeyIndex就是掃描碼對應的值了 MOVF KeyIndex2,W MOVWF SetGe MOVLW 0x00 MOVWF ShowTimes1 MOVWF ShowTimes2 SHOW: MOVF SetShi,W CALL SMG_TABL

35、E ;獲得鍵值對應的數碼管字形碼 MOVWF PORTB ;送B口顯示 BANKSEL PORTA ;選擇PORTA寄存器的bank BSF PORTA,3 NOP BCF PORTA,3 MOVF SetGe,W CALL SMG_TABLE ;獲得鍵值對應的數碼管字形碼 MOVWF PORTB ;送B口顯示 BANKSEL PORTA ;選擇PORTA寄存器的bank BSF PORTA,2 NOP BCF PORTA,2 INCFSZ ShowTimes1,f GOTO SHOW INCFSZ ShowTimes2,f ;當ShowTimes2為0時跳出死循環SHOW GOTO SHOW

36、 ;*主程序*MAIN1 CLRF PORTC CLRF PORTE BANKSEL TRISE CLRF TRISE ;E口所有先設置為輸出 CLRF TRISC MOVLW 01H MOVWF OPTION_REG ;分頻比1:4,定時器,內部時鐘源 MOVLW 06H MOVWF ADCON1 ;關閉所有A/D口 BCF STATUS,RP0 MOVLW 00H MOVWF INTCON ;關閉所有中斷,且同時清零T0IF CLRF TEMP CLRF TEMP1 CLRF TEMP2 ;清零臨時寄存器 ;*循環處理部分*;先啟動18B20溫度轉換程序,在判斷溫度轉換是否完成(需750u

37、s);未完成則調用顯示子程序,直到完成溫度轉換;完成后讀取溫度值;送LCD顯示LOOP CALL RESET_18B20 ;調用復位18B20子程序 MOVLW 0CCH MOVWF TEMP CALL WRITE_18B20 ;SKIP ROM命令 MOVLW 44H MOVWF TEMP CALL WRITE_18B20 ;溫度轉換命令 CLRF STATUS BCF INTCON,T0IF CALL DELAY_750MS ;調用溫度轉換所需要的750MS延時 NOP CALL RESET_18B20 MOVLW 0CCH MOVWF TEMP CALL WRITE_18B20 ;SKI

38、P ROM命令 MOVLW 0BEH MOVWF TEMP CALL WRITE_18B20 ;讀溫度命令 CALL READ_18B20 ;調用讀溫度低字節 MOVFW TEMP MOVWF TEMP1 ;保存到TEMP1 CALL READ_18B20 ;調用讀溫度高字節 MOVFW TEMP MOVWF TEMP2 ;保存到TMEP2 CALL RESET_18B20 CALL TEMP_CHANGE ;調用溫度轉換程序 CALL DISPLAY ;調用LCD顯示程序 CALL COMPARE ;調用比較函數,看是否報警 GOTO LOOP ;循環工作;-溫度比較,輸出繼電器-COMPA

39、RE MOVF SetShi,W SUBWF RealShi,W ;實際溫度(十位)與設置溫度(十位)相減 BTFSS STATUS,C ;判進位(借位)標志 GOTO SAFE ;有借位,即RealShi小于SetShi,無需報警 BTFSS STATUS,Z ;無借位,即RealShi大于等于SetShi,判別是否相等 GOTO UNSAFE ;Z=0,說明RealShi大于SetShi,報警 MOVF SetGe,W ;Z=1,說明RealShi等于SetShi,繼續比較個位 SUBWF RealGe,W ;實際溫度(個位)與設置溫度(個位)相減 BTFSS STATUS,C ;判進位(

溫馨提示

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

評論

0/150

提交評論