版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 目 錄</b></p><p> 第1節(jié) 前 言……………………………………………………………………………1</p><p> 1.1 多路溫度采集系統(tǒng)概述…………………………………………………………1</p><p> 1.2 本設(shè)計任務(wù)和主要內(nèi)容………………………………………………………1</
2、p><p> 第2節(jié) 系統(tǒng)總體設(shè)計…………………………………………………………………2</p><p> 2.1 系統(tǒng)概述………………………………………………………………………2</p><p> 2.2 系統(tǒng)工作原理…………………………………………………………………2</p><p> 第3節(jié) 系統(tǒng)的硬件設(shè)計…………………………
3、……………………………………3</p><p> 3.1 CPU的選用……………………………………………………………………3</p><p> 3.2 ADC0809………………………………………………………………………4</p><p> 3.2.1 ADC0809的內(nèi)部邏輯結(jié)構(gòu)………………………………………………4</p><p&g
4、t; 3.2.2引腳結(jié)構(gòu)…………………………………………………………………5</p><p> 第4節(jié) 軟件編輯思路及流程……………………………………………………………6</p><p> 軟件編輯思路…………………………………………………………………6</p><p> 具體軟件編程…………………………………………………………………6</p>
5、<p> 第5節(jié) 結(jié)束語…………………………………………………………………………18</p><p> 參考文獻(xiàn)…………………………………………………………………………………19</p><p> 基于單片機(jī)的多路溫度采集系統(tǒng)</p><p><b> 前 言 </b></p><p> 本課
6、題要設(shè)計一種多路溫度采集檢測系統(tǒng),采用目前低價位但技術(shù)十分成熟的AT89C52單片機(jī)作為內(nèi)核,選用電位器代替熱敏電阻為輸入元件,利用ADC0809轉(zhuǎn)換信號,送到顯示器(8個LED數(shù)碼管)循環(huán)顯示所測的四路溫度數(shù)值,并根據(jù)現(xiàn)場工業(yè)需要,設(shè)置了一定范圍的報警值,報警優(yōu)先顯示,利用按鍵消除報警??捎冒存I查看某一路的溫度值,查看時采集不中斷。軟件算法上采用了直接擬合的方法(通過電壓-溫度關(guān)系來計算溫度值),符合課題要求。本課題構(gòu)成的多路溫度系統(tǒng)
7、具有結(jié)構(gòu)簡單、價格低廉、測量精度高、量程寬的特點(diǎn),在很多場合具有一定的適用性。</p><p> 關(guān)鍵詞: AT89單片機(jī)、溫度采集、顯示、報警</p><p> 1.1 多路溫度采集系統(tǒng)概述 </p><p> 溫度采集在工業(yè)中的應(yīng)用越來越廣泛,而且要求也越來越高,我們結(jié)合本學(xué)期所學(xué)的《單片機(jī)原理與應(yīng)用技術(shù)》課程,利用實(shí)驗(yàn)室已有的AT89系列單片機(jī),作一個
8、簡易的可多路檢測溫度并能在超出范圍時報警的系統(tǒng)。該系統(tǒng)用AT89S52單片機(jī)作為內(nèi)核,利用ADC0809轉(zhuǎn)換芯片輔助,以八個電位器作為模擬溫度輸入信號,一個5路8位數(shù)碼管作為顯示設(shè)備??蓡为?dú)循環(huán)顯示每一路的溫度值,并且有鍵盤控制顯示每路的溫度值,這樣可以滿足在工業(yè)需要。</p><p> 本設(shè)計任務(wù)和主要內(nèi)容</p><p> 設(shè)計應(yīng)解決下列各主要問題:</p><
9、p> 1、8路溫度值(可用0~5V電壓值模擬0-100℃)的數(shù)據(jù)采集,經(jīng)A/D轉(zhuǎn)換后送入單片機(jī);</p><p> 2、8個鍵盤、8個LED數(shù)碼管顯示電路,用于循環(huán)顯示每一路的溫度值(顯示精確到小數(shù)點(diǎn)后一位),通過按鍵還可以選擇任意一路顯示。</p><p> 3、設(shè)溫度值的正常范圍,若當(dāng)前溫度值超過此范圍,則LED閃爍報警;</p><p> 4、通
10、過按鍵解除報警。</p><p><b> 系統(tǒng)總體設(shè)計</b></p><p><b> 2.1 系統(tǒng)概述</b></p><p> 根據(jù)設(shè)計要求的性能指標(biāo),本系統(tǒng)不僅要滿足一定精度的溫度采集的基本功能,而且由于測量的路數(shù)為8路,還存在多路信號的循環(huán)顯示問題,還要考慮溫度超限報警輸出的功能,同時系統(tǒng)還具有顯示當(dāng)前
11、各路的測量溫度值的功能和鍵盤選擇顯示路數(shù)的功能。</p><p> 2.2 系統(tǒng)工作原理</p><p> 根據(jù)本課題的設(shè)計目標(biāo)以及硬件的特點(diǎn),本系統(tǒng)的結(jié)構(gòu)原理圖如下圖2-1所示:</p><p> 圖2-1 系統(tǒng)結(jié)構(gòu)原理圖</p><p> 圖2-2 系統(tǒng)原理圖</p><p> 第3節(jié)
12、 系統(tǒng)的硬件設(shè)計</p><p> 一個溫度采集系統(tǒng),包括被采集信息的采集、轉(zhuǎn)換、顯示等環(huán)節(jié),在本多路溫度采集系統(tǒng)中,包括A/D轉(zhuǎn)換電路的設(shè)計,CPU的選型以及包括顯示電路,存儲器、報警電路、電源電路等設(shè)計。</p><p> 3.1 CPU的選用</p><p> 目前,生產(chǎn)單片機(jī)的廠商有很多,尤其是近年來微電子技術(shù)、計算機(jī)技術(shù)的飛速發(fā)展,比較著名的有Int
13、el、Philips、Microchip、Motorola、Zilog、Atmel等半導(dǎo)體企業(yè)。</p><p> 在上述著名的半導(dǎo)體企業(yè)產(chǎn)品中,尤其在工業(yè)測控場合,運(yùn)用較多的為Intel公司的MCS-51系列,Microchip公司的PIC系列,如果作單路溫度測量,恐怕要選擇該系列的CPU,但由于本系統(tǒng)涉及的是多路,各路報警的輸出信號需要單獨(dú)輸出,而且考慮信號調(diào)理電路的切換等還需要不少的控制線,因此該系列的少
14、引腳特點(diǎn)就不適合本設(shè)計的需要,因此,本設(shè)計還是選用了ATMEL最新的8位單片機(jī)AT89S52作為本系統(tǒng)的CPU。下面簡單地介紹一下89S52。</p><p> 功能特性描述:AT89S52 是一種低功耗、高性能 CMOS8 位微控制器,具有8K 在系統(tǒng)可編程 Flash 存儲器。使用 Atmel 公司高密度易失性存儲器技術(shù)制造,與工業(yè) 80S52 產(chǎn)品指令和引腳完全兼容。片上 Flash 允許程序
15、存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的 8 位 CPU 和在系統(tǒng)可編程 Flash,使得 AT89S52 為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。</p><p> 89S52 具有以下標(biāo)準(zhǔn)功能:8k 字節(jié) Flash,256 字節(jié) RAM,32 位 I/O 口線,看門狗定時器,2 個數(shù)據(jù)指針,三個 16 位定時器/計數(shù)器,一個 6 向量 2 級中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶
16、振及時鐘電路。另外,AT89S52 可降至 0Hz 靜態(tài)邏輯操作,支持 2 種軟件可選擇節(jié)電模式??臻e模式下,CPU停止工作,允許 RAM、定時器/計數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM 內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個中斷或硬件復(fù)位為止。</p><p> 圖3-1 89C52的引腳 </p><
17、p> 3.2 ADC0809</p><p> ADC0809是把采集的模擬量轉(zhuǎn)換成數(shù)字量并傳送到89C52中。它是帶有8位A/D轉(zhuǎn)換器、8路多路開關(guān)以及微處理機(jī)兼容的控制邏輯的CMOS組件并且還是逐次逼近式A/D轉(zhuǎn)換器,可以和單片機(jī)直接接口。 </p><p> 3.2.1 ADC0809的內(nèi)部邏輯結(jié)構(gòu)</p><p>
18、; 圖3-2 ADC0809的內(nèi)部邏輯結(jié)構(gòu)</p><p> 由圖3-2可知,ADC0809由一個8路模擬開關(guān)、一個地址鎖存與譯碼器、一個A/D轉(zhuǎn)換器和一個三態(tài)輸出鎖存器組成。多路開關(guān)可選通8個模擬通道,允許8路模擬量分時輸入,共用A/D轉(zhuǎn)換器進(jìn)行轉(zhuǎn)換。三態(tài)輸出鎖器用于鎖存A/D轉(zhuǎn)換完的數(shù)字量,當(dāng)OE端為高電平時,才可以從三態(tài)輸出鎖存器取走轉(zhuǎn)換完的數(shù)據(jù)。</p><p>
19、 3.2.2 引腳結(jié)構(gòu)</p><p> 圖3-4 ADC0809的引腳</p><p> 第4節(jié) 軟件編輯思路及流程</p><p> 4.1 軟件編輯思路 </p><p> 軟件編輯思路:數(shù)字顯示----算法----一路采集----一路采集轉(zhuǎn)換及顯示---八路采集轉(zhuǎn)換及顯示----鍵盤小子程序----八路循環(huán)采集且鍵盤
20、控制------八路循環(huán)采集且鍵盤控制和報警。</p><p> 4.2 具體軟件編程</p><p><b> ORG 0000H</b></p><p> AJMP MAIN;</p><p> BUF EQU 40H ;顯示緩沖區(qū)</p><
21、p> MOTATA EQU 50H ;AD0809數(shù)據(jù)存放于此</p><p> WH EQU 48H ;溫度上限數(shù)據(jù)存放區(qū)</p><p> WL EQU 58H ;溫度下限數(shù)據(jù)存放區(qū)</p><p>
22、 BUFF1S EQU 38H;</p><p> BUFF1MS EQU 39H;</p><p> BUFF5S EQU 3AH;</p><p> INNAL EQU 3CH;</p><p> ALARMBUF EQU 33H<
23、;/p><p> BUFFH EQU 31H ;八路LED報警信號 紅燈</p><p> BUFFL EQU 32H ;八路LED報警信號 綠燈</p><p> BACK EQU 34H ;利用與
24、BUF地址的重復(fù)修改路數(shù)</p><p> CHANNEL EQU 35H</p><p> TEMPBUF EQU 36H</p><p> READ_AD BIT 30H ;是否要讀寫AD0809的標(biāo)志位</p><p> DISPIN &
25、#160; BIT 31H;</p><p> SETWARN BIT 32H</p><p> SOLIDISP BIT 33H</p><p> ENTER BIT P1.2</p><p> SETH BIT&
26、#160; 35H</p><p> SETL BIT 36H</p><p> SETIN BIT P1.3</p><p> ABYTEIN BIT p1.1</p><
27、p><b> ORG 0003H</b></p><p> AJMP INT_0;</p><p><b> ORG 000BH</b></p><p> LJMP INT_T0</p><p><b> ORG 0100H</b></p><
28、;p> MAIN: MOV SP, #70H ;設(shè)置堆棧位置</p><p> SETB READ_AD ;初始化標(biāo)志位</p><p>
29、 SETB EA ;開總中斷</p><p> CLR SETWARN ;清除溫度設(shè)置標(biāo)志位<
30、/p><p> SETB SETIN ;當(dāng)其為0時表示要進(jìn)行通道數(shù)采集</p><p> LCALL INITWARN ;初始化溫度上下限&l
31、t;/p><p> LCALL INIT_2 ;初始化2#工作寄存器區(qū)</p><p> ;主循環(huán),啟動ADC0809,從第一個通道開始讀取</p><p> LOOP: JNB READ_AD,DIS
32、 ;若不讀AD0809,則調(diào)顯示,次標(biāo)志位也表示1s延時結(jié)束</p><p> ;延時已完畢,則計算要顯示的溫度路數(shù)及溫度值送緩沖區(qū)</p><p> LCALL WARN
33、 ;報警</p><p> CLR READ_AD ;清楚標(biāo)志位</p><p> LCALL READ
34、 ;讀取一次AD0809</p><p> LCALL DLY1MS ;此處加1ms的延時,否則數(shù)碼管會因中斷的存在而產(chǎn)生閃動</p><p> LCALL ADJUST
35、60; ;調(diào)整顯示</p><p> ;在此完成鍵盤檢測及顯示任務(wù)</p><p> DIS: LCALL DISPLAY;</p><p> LCALL KEYCHK &
36、#160; ;調(diào)鍵盤檢測子程序</p><p> CJNE A,#0FFH, AKEY ;若有鍵按下,則跳轉(zhuǎn)</p><p> LJMP LOOP
37、60; ;若沒有則循環(huán)</p><p> AKEY: LCALL KEYFUNC;</p><p> CJNE A,#0FFH,CALLRPD ;驗(yàn)證按下的鍵是否為數(shù)字鍵,若是則處理輸入</p><p> LJMP LOOP
38、0; ;不為數(shù)字鍵則返回循環(huán)</p><p> CALLRPD: LCALL KEYRPD;</p><p> SJMP LOOP;</p><p> ;*********初始化2#工作寄存器區(qū)
39、************</p><p> INIT_2: PUSH PSW ;初始化2號工作寄存器區(qū)</p><p> SETB RS1;</p><p>
40、CLR RS0 ;選擇2號工作寄存器區(qū)</p><p> MOV R2, #00H
41、; ;存放要顯示的路數(shù)</p><p> CLR DISPIN ;初始化路顯示標(biāo)志位;</p><p> MOV R0, #MOTATA
42、160; ;R0充當(dāng)指向MOTATA的指針</p><p><b> POP PSW;</b></p><p><b> RET;</b></p><p> ;*******調(diào)整指針*********</p><p><b> PADJUST:&l
43、t;/b></p><p> ONADJUST: DJNZ R2,INADJUST;</p><p><b> RET;返回</b></p><p> INADJUST: INC R0;</p><p> SJMP ONADJUST;</p><p&g
44、t; ;*************計算并調(diào)整顯示緩存區(qū)的數(shù)據(jù)*******</p><p> ADJUST: PUSH PSW ;保護(hù)</p><p> SETB RS1;</p><p> CLR RS0
45、160; ;選擇2號工作寄存器區(qū)</p><p> CJNE R2,#08H,NE08;</p><p> GE08: MOV R2,#00H;</p><p> MOV R0,#MOTATA;</p>&
46、lt;p> SJMP LESS08;</p><p> NE08: JNC GE08;</p><p> LESS08: JB SETWARN, DISPWARN ;若在設(shè)定溫度,則也不調(diào)整顯示</p><p> JB SOLIDISP, ADJEND
47、0; ;若為固定顯示,則跳過調(diào)整</p><p> JB DISPIN,DLY_5S ;若有鍵盤值輸入,則延時5秒來暫時固定顯示</p><p> INC R0
48、 ;調(diào)整R0,使其指向下一個要顯示的溫度值地址</p><p> INC R2 ;調(diào)整R2&
49、lt;/p><p> mov channel,r2;</p><p> SJMP ADJEND;</p><p> DLY_5S: DJNZ BUFF5S,ADJEND;</p><p> CLR DISPIN;</p><p> LJMP ADJEND
50、</p><p> DISPWARN: JB SETH,DISHIGH ;若在調(diào)整上限值則跳轉(zhuǎn)到上限溫度顯示</p><p> JB SETL,DISLOW ;若在調(diào)整下限值則跳轉(zhuǎn)到下限溫度顯示</p>&
51、lt;p> SJMP ADJEND ;若不在調(diào)整則顯示輸入路數(shù)的當(dāng)前檢測溫度值</p><p> DISLOW: MOV R0,#WL
52、; ;將指針調(diào)整到溫度上限存放區(qū)</p><p> SJMP ADAPT ;跳轉(zhuǎn)到指針調(diào)整處</p><p> DISHIGH:MOV R0,#WH
53、160; ;將指針調(diào)整到溫度下限存放區(qū)</p><p> ADAPT: MOV R2,CHANNEL ;調(diào)整R2的值為通道數(shù)<
54、;/p><p> LCALL PADJUST ;指針指向R2</p><p> ADJEND: LCALL LOADTEMP
55、60; ;將當(dāng)前指針指向數(shù)據(jù)放到緩沖區(qū)</p><p><b> POP PSW;</b></p><p><b> RET;</b></p><p> ;**************** 將當(dāng)前指針指向數(shù)據(jù)放到緩沖區(qū)********</p><p> LOADTEMP: LC
56、ALL COMPUTE ;調(diào)用COMPUTE得到要顯示的當(dāng)前溫度值</p><p> MOV R1,#BUF;</p><p> MOV A,channel;</p><p> MOV @R1,A
57、 ;將路數(shù)送入顯示緩沖區(qū)</p><p> INC R1 ;調(diào)整到要顯示溫度值的緩沖區(qū)</p>
58、<p> JB SETH,DISPH ;若設(shè)定溫度上限,則顯示H</p><p> JB SETL,DISPL ;若設(shè)定溫度下限,則顯示L</p><p> M
59、ov a,#10h ;消隱</p><p> SJMP DISP2</p><p> DISPH: MOV A,#11H</p><p> SJMP DISP2</p
60、><p> DISPL: MOV A,#12H</p><p> DISP2: mov @r1,a;</p><p><b> INC R1;</b></p><p> MOV A,R5;</p><p> ANL
61、60; A,#0FH;</p><p> MOV @R1,A ; 最低位</p><p><b> INC R1;</b></p><
62、;p> MOV A,R5;</p><p> ANL A,#0F0H;</p><p><b> SWAP A;</b></p><p> MOV @R1,A
63、60; ;次低位 ,應(yīng)當(dāng)在此處添加小數(shù)點(diǎn)</p><p><b> INC R1;</b></p><p> MOV A,R4;</p><p> ANL A,#0FH;</p><p> MOV @R1,A
64、 ;次高位</p><p><b> INC R1;</b></p><p> MOV A,R4;</p><p> ANL&
65、#160; A,#0F0H;</p><p><b> SWAP A;</b></p><p> MOV @R1,A ;最高位</p&
66、gt;<p><b> RET;</b></p><p> ;*************讀取一次0809的內(nèi)容***********</p><p> READ: MOV R6,#08H
67、60; ;用中斷的方式讀取一次AD0809</p><p> MOV R0,#MOTATA ;0號工作寄存器區(qū)</p><p> MOV DPTR,#0FFFEH
68、 ;A0作為地址</p><p> MOV A,#00H ;表示先檢測第一個通道</p>
69、<p> MOV INNAL,A ;將檢測的路數(shù)保存</p><p> MOVX @DPTR,A
70、0; ;開啟ADC0809</p><p> SETB EX0 ;開外部中斷0</p><p> RET &
71、#160; ;若已讀取完畢,則返回</p><p> ;**********************顯示子程序************<
72、;/p><p> ;要顯示的數(shù)據(jù)入口為BUF(6位);1號工作寄存器區(qū)</p><p> DISPLAY: PUSH PSW ;壓棧保護(hù)</p><p> SETB RS0;</p><p>
73、CLR RS1 ;切換工作寄存器區(qū)到 1</p><p> MOV R0,#BUF</p><p> MOV R7,#06H</p><p> MOV R1,#01H&l
74、t;/p><p> NEXTDIS: MOV A,@R0</p><p> MOV DPTR,#TABLE</p><p> MOVC A,@A+DPTR ;取段碼</p><p> CJNE R7,#03H,NODIP ;顯示小數(shù)點(diǎn)</p><p&
75、gt; ANL A,#07FH</p><p> NODIP: MOV DPTR,#0FFDCH</p><p> MOVX @DPTR,A ;送段碼</p><p> MOV DPTR,#0FFDDH</p><
76、p><b> MOV A,R1</b></p><p> MOVX @DPTR,A ;送位碼</p><p><b> RL A</b></p><p><b> MOV R1,A<
77、;/b></p><p> LCALL DLY1MS</p><p> INC R0 ;調(diào)整顯示</p><p> DJNZ R7,NEXTDIS;</p><p><b&g
78、t; POP PSW;</b></p><p><b> RET</b></p><p> ;**************************延時1ms****************************</p><p> DLY1MS: MOV BUFF1MS,#0F9H</p>
79、<p> DJNZ BUFF1MS,$</p><p><b> RET</b></p><p> ;*************************按鍵檢查子程序********************</p><p> KEYCHK:MOV A,#00H
80、160; ;查看是否有鍵按下</p><p> MOV DPTR,#0FFDDH</p><p> MOVX @DPTR,A</p><p> MOV DPTR,#0FFDEH</p><p> MOVX A,@DPTR</p><p><b&g
81、t; CPL A</b></p><p> ANL A,#0FH</p><p> JNZ TEST ;若有鍵按下則檢測,無則返回。</p><p> MOV A,#0FFH</p><p><b>
82、 RET</b></p><p> TEST: LCALL KEYTEST</p><p> MOV BACK,A</p><p> LCALL DISPLAY</p><p> LCALL KEYTEST</p><p> CJNE A,B
83、ACK,NOKEYD</p><p> WAIT: LCALL DISPLAY;</p><p> MOV A,#00H ;等待鍵抬起</p><p> MOV DPTR,#0FFDDH</p><p> MOVX
84、160; @DPTR,A</p><p> MOV DPTR,#0FFDEH</p><p> MOVX A,@DPTR</p><p><b> CPL A</b></p><p> ANL A,#0FH</p><p> JNZ
85、0; WAIT ;若鍵未抬起,則繼續(xù)等待</p><p> MOV A,BACK ;將檢測到的鍵值送給A</p><p> SJMP CHKEND</p><p> NOKEYD: MOV A,#0FFH</p><p> CHKEND: RET</p&
86、gt;<p> ;**********************按鍵檢測子程序********************</p><p> KEYTEST: MOV R0,#0FEH</p><p> MOV R1,#00H</p><p> MOV R2,#08H</p><p> N
87、EXTL: MOV A,R0</p><p> MOV DPTR,#0FFDDH</p><p> MOVX @DPTR,A</p><p> MOV DPTR,#0FFDEH</p><p> MOVX A,@DPTR</p><p><b
88、> CPL A</b></p><p> ANL A,#0FH</p><p> JNZ KEYDWN ;看按下的鍵是否在當(dāng)前列</p><p> DJNZ R2,GOSCAN ;看是否掃描完畢,若沒有則調(diào)整繼續(xù)
89、掃描</p><p> SJMP TSTEND ;若掃描完畢,則返回。</p><p> GOSCAN: MOV A,R0</p><p><b> RL A</b></p><p><b> M
90、OV R0,A</b></p><p><b> INC R1</b></p><p> SJMP NEXTL</p><p> KEYDWN: MOV R3,#00H</p><p> LL0: RRC A</p>
91、<p><b> JC LL1</b></p><p><b> INC R3</b></p><p><b> SJMP LL0</b></p><p> LL1: MOV A,R3</p><p
92、><b> MOV B,A</b></p><p><b> MOV A,#8</b></p><p><b> MUL AB</b></p><p> ADD A,R1 ;A中返回的為按下的鍵的代碼</p>&l
93、t;p><b> RET</b></p><p> TSTEND: MOV A,#0FFH</p><p><b> RET</b></p><p> ;***********延時1s*******************</p><p> DLY_1S: MOV T
94、MOD,#01H;</p><p> SETB ET0;</p><p> MOV TH0,#0F0H ;10ms</p><p> MOV TL0,#0D8H;</p><p> MOV buff1s,#100;</p><p&g
95、t; SETB TR0;</p><p><b> RET;</b></p><p> ;*********定時器T0中斷服務(wù)程序**********</p><p> INT_T0:CLR TR0 ;關(guān)計數(shù)器</p><p> DJNZ buff1s ;NEXT_1
96、0MS;若不到1s繼續(xù)</p><p> SETB READ_AD;若到了,則置標(biāo)志位</p><p> cpl p1.0;</p><p><b> clr et0;</b></p><p> SJMP T0_END;</p><p>
97、NEXT_10MS: MOV TMOD,#01H</p><p> MOV TH0,#0F0H ;定時10ms</p><p> MOV TL0,#0D8H</p><p><b> SETB TR0</b></p><p>
98、T0_END: RETI</p><p> ;*************計算子程序,完成一路計算****************</p><p> COMPUTE: MOV A,@R0;</p><p> MOV B,#04H ;測得的溫度數(shù)乘以4</p><p><b>
99、 MUL AB;</b></p><p> MOV R6,B;</p><p> MOV R7,A;</p><p> LCALL HB2 ;調(diào)用子程序轉(zhuǎn)化為壓縮BCD碼,R4,R5為出口</p><p><b> RET;</b></p&g
100、t;<p> HB2: CLR ;BCD碼初始化</p><p><b> MOV R4,A</b></p><p><b> MOV R5,A</b></p><p> MOV R3,#10H ;轉(zhuǎn)換雙字節(jié)十六進(jìn)制整數(shù)</p><p> HB3:
101、 MOV A,R7 ;從高端移出待轉(zhuǎn)換數(shù)的一位到CY中</p><p><b> RLC A</b></p><p><b> MOV R7,A</b></p><p><b> MOV A,R6</b></p><p><b> RLC A<
102、;/b></p><p><b> MOV R6,A</b></p><p> MOV A,R5 ;BCD碼帶進(jìn)位自身相加,相當(dāng)于乘2</p><p><b> ADDC A,R5</b></p><p> DA A ;十進(jìn)制調(diào)整</p><p&
103、gt;<b> MOV R5,A</b></p><p><b> MOV A,R4</b></p><p><b> ADDC A,R4</b></p><p><b> DA A</b></p><p><b> MOV R4,A&
104、lt;/b></p><p> DJNZ R3,HB3 ;處理完16bit</p><p><b> RET;</b></p><p> ;********報警子程序*********</p><p> WARN: MOV R0,#MOTATA ;R0指向MOTATA</p>
105、<p> MOV R1,#WH ; R1指向WH</p><p> MOV R7,#08H ;R7為循環(huán)次數(shù)</p><p> WLOOP:MOV A,@R0</p><p> MOV ALARMBUF,@R1 ;與指令相適應(yīng)的必要中轉(zhuǎn)</p&
106、gt;<p> CJNE A,ALARMBUF,RED</p><p> GEHIGH: CLR C ;紅燈信號</p><p> LJMP NEXTRED</p><p> RED : JNC GEHIGH
107、0; ;讀入數(shù)值比預(yù)設(shè)大</p><p><b> SETB C</b></p><p> NEXTRED:MOV A,BUFFH</p><p> RLC A ;壓入紅燈信號</p><p> MOV&
108、#160; BUFFH,A</p><p> MOV A,R1 ;調(diào)整R1指向WL</p><p> ADD A,#10H</p><p><b> MOV R1,A</b></p><p> MOV ALARMBUF,@R1</p>
109、;<p> MOV A,@R0</p><p> CJNE A,ALARMBUF,GREEN</p><p> LSLOW: CLR C ;綠燈信號</p><p> LJMP NEXTGRN</p>&l
110、t;p> GREEN: JC LSLOW ;讀入數(shù)值比預(yù)設(shè)小</p><p><b> SETB C</b></p><p> NEXTGRN:MOV A,BUFFL</p><p><b> RLC A</b></p><p
111、> MOV BUFFL,A</p><p><b> MOV A,R1</b></p><p> SUBB A,#10H</p><p><b> MOV R1,A</b></p><p><b> INC R1</b></p><p>
112、<b> INC R0</b></p><p> DJNZ R7,WLOOP</p><p> MOV A,BUFFH ;將紅燈報警信息送出</p><p> MOV DPTR,#0FBFFH ;紅燈信號對應(yīng)地址p2.2</p><p> MOVX @D
113、PTR,A</p><p> MOV A,BUFFL ;將綠燈報警信息送出</p><p> MOV DPTR,#0F7FFH ;綠燈信號對應(yīng)地址p2.3</p><p> MOVX @DPTR,A</p><p><b> RET</b></p&g
114、t;<p> ;************鍵位調(diào)整程序************</p><p> KEYFUNC: MOV DPTR,#KEYTABLE</p><p> ANL A,#0FH ;消除鍵位干擾</p><p> MOVC A,@A+DPTR ;調(diào)整跳轉(zhuǎn)位置<
115、;/p><p> CJNE A,#0AH,K1</p><p> MOV A,#0FFH</p><p> SETB SETIN</p><p> SETB SETH ;表示要設(shè)定溫度報警上限值</p><p> CLR
116、160; SETL</p><p><b> RET;</b></p><p> K1: CJNE A,#04H,K2</p><p> MOV A,#0FFH</p><p> SETB SETIN</p><p>
117、 SETB SETL ;表示要設(shè)定溫度報警下限值</p><p> CLR SETH</p><p><b> RET</b></p><p> K2: CJNE A,#0FH,K3</p><p> MOV A,#0FF
118、H</p><p> JB SETWARN,ENDISP</p><p> SETB SETWARN</p><p> CLR ABYTEIN</p><p><b> CLR SETH</b></p><p><b> CLR&
119、#160; SETL</b></p><p> CLR ENTER</p><p><b> RET</b></p><p> ENDISP: CLR SETWARN;</p><p> CLR SETH;</p><p> CLR
120、0; SETL;</p><p><b> RET;</b></p><p> K3: CJNE A,#0EH,K4</p><p> MOV A,#0FFH</p><p> JB SOLIDISP,ENSOLID;</p><p> S
121、ETB SOLIDISP</p><p><b> RET</b></p><p> ENSOLID: CLR SOLIDISP</p><p><b> RET</b></p><p> K4: CJNE A,#0CH,K5</p>
122、;<p> MOV A,#0FFH;</p><p> CLR SETIN;</p><p> CLR SETH;</p><p> CLR SETL;</p><p><b> RET;</b></p><p> K5:&
123、#160; CJNE A,#0DH,K6</p><p> MOV A,#0FFH</p><p> SETB ENTER</p><p><b> RET;</b></p><p> K6: RET</p><p&g
124、t; KEYTABLE: db 07h,04h,08h,05h,09h,06,0Ah</p><p> ; 0, 1 ,2 ,3 ,4 ,5 ,6</p><p> db 04h,01h,00h,02h,0Fh,03h,0Eh,0Ch,0Dh</p><p> ;
125、 7 ,8 ,9 ,10 ,11,12, 13, 14 ,15</p><p> ;*********實(shí)現(xiàn)對各個設(shè)定鍵的響應(yīng)**********</p><p> KEYRPD: JB SETWARN,WARNSET ;根據(jù)SOLIDISP的值調(diào)顯示</p><p> PUSH
126、 PSW;</p><p> SETB RS1;</p><p> CLR RS0 ;選擇2號工作寄存器區(qū)</p><p> MOV R0,#MOTATA;</p><p> MOV CHANNEL,A ;將讀入的值放入通道緩沖<
127、;/p><p> MOV R2,A;</p><p> MOV BACK,A;</p><p> MOV BUF,A;</p><p> LCALL PADJUST ;調(diào)整R0,使其指向R2通道的溫度值</p><p> SETB D
128、ISPIN ;5s計時的標(biāo)志位</p><p> MOV BUFF5S,#05H ;初始化5s計時</p><p> MOV R2,CHANNEL;</p><p> POP PSW;</p><p> RET ;調(diào)整完畢,返回<
129、/p><p> WARNSET:JNB SETIN,INSET ;若未設(shè)定通道,先進(jìn)行設(shè)定</p><p> LJMP SETTEMP ;若已設(shè)定則跳轉(zhuǎn)到溫度設(shè)定處</p><p> INSET: MOV CHANNEL,A</p><p><b> RET</b&g
130、t;</p><p> SETTEMP:JB SETH,HIGHSET ;設(shè)定溫度警告上限</p><p> JB SETL,LOWSET ;設(shè)定溫度警告下限</p><p><b> RET</b></p><p> HIGHSET: LCALL READTEM
131、P</p><p> MOV R0,#WH ;調(diào)整R0使其指向溫度上限存儲區(qū)</p><p> LJMP STORESET</p><p> LOWSET: LCALL READTEMP</p><p> MOV R0,#WL ; 調(diào)整R0使其指向溫度下限存
132、儲區(qū)</p><p> STORESET:MOV A ,TEMPBUF;</p><p> LCALL COMPACT ;將輸入的數(shù)轉(zhuǎn)化為16進(jìn)制數(shù)存儲(未改變R0)</p><p> MOV R2,CHANNEL ;送入要調(diào)整到的位置</p><p> LCALL
133、160; PADJUST ;調(diào)用調(diào)整子程序</p><p> MOV @R0 ,A ; 將溫度值送到相應(yīng)的位置</p><p><b> RET</b></p><p> READTEMP: JB ABYTEIN,READLOW;若已經(jīng)有一位讀入則讀取低位</p><p&
134、gt; READHIGH: SWAP A;</p><p> MOV TEMPBUF,A;</p><p> SETB ABYTEIN;</p><p><b> RET;</b></p><p> READLOW: ORL A,TEMPBUF;</p>
135、;<p> MOV TEMPBUF,A;</p><p> CLR ABYTEIN;</p><p><b> RET;</b></p><p> ;**********將輸入溫度值轉(zhuǎn)化為16進(jìn)制數(shù)**********</p><p> COMPACT: MOV
136、 R2,A;</p><p> ANL A,#0FH ;分離出十進(jìn)制數(shù)的低位</p><p><b> SWAP A;</b></p><p> MOV R3,A;</p><p> MOV A,R2;</p><p> ANL
137、60; A,#0F0H ;分離出十進(jìn)制數(shù)的高位</p><p><b> SWAP A;</b></p><p> MOV R2,A;</p><p> LCALL BH2 ;將雙字節(jié)BCD碼轉(zhuǎn)化為十六進(jìn)制整數(shù)</p><p> MOV A,R2
138、 ;將R2R3中的數(shù)除以4</p><p><b> CLR C;</b></p><p><b> RRC A;</b></p><p> MOV R2,A;</p><p> MOV A,R3;</p><p>&
139、lt;b> RRC A;</b></p><p><b> MOV R3,A</b></p><p> MOV A,R2;</p><p><b> RRC A;</b></p><p><b> MOV
140、; A,R3</b></p><p> RRC A ;轉(zhuǎn)換完畢A中為要得到的16進(jìn)制數(shù)</p><p><b> RET;</b></p><p> ;*********雙字節(jié)BCD碼整數(shù)轉(zhuǎn)換成雙字節(jié)十六進(jìn)制整數(shù)*********</p><p> BH2: MOV A,R3
141、 ;將低字節(jié)轉(zhuǎn)換成十六進(jìn)制</p><p> LCALL BCDH</p><p><b> MOV R3,A</b></p><p> MOV A,R2 ;將高字節(jié)轉(zhuǎn)換成十六進(jìn)制</p><p> LCALL BCDH</p><p> MOV B,#
142、100 ;擴(kuò)大一百倍</p><p><b> MUL AB</b></p><p> ADD A,R3 ;和低字節(jié)按十六進(jìn)制相加</p><p><b> MOV R3,A</b></p><p><b> CLR A</b></p&
143、gt;<p><b> ADDC A,B</b></p><p><b> MOV R2,A</b></p><p><b> RET</b></p><p> ;*******單字節(jié)BCD碼整數(shù)轉(zhuǎn)換成單字節(jié)十六進(jìn)制整數(shù)</p><p> BCDH: M
144、OV B,#10H ;分離十位和個位</p><p><b> DIV AB</b></p><p> MOV R4,B ;暫存?zhèn)€位</p><p> MOV B,#10 ;將十位轉(zhuǎn)換成十六進(jìn)制</p><p><b> MUL AB</b></p>&l
145、t;p> ADD A,R4 ;按十六進(jìn)制加上個位</p><p><b> RET</b></p><p> ;********初始化WH和WL********</p><p> INITWARN: MOV R0,#WH;</p><p> MOV A,#0AFH;&l
146、t;/p><p> MOV R7,#08H;</p><p> INITHIGH: MOV @R0,A;</p><p> DJNZ R7,HIGHINC;</p><p> SJMP ENDHIGH;</p><p> HIGHINC: INC R0;<
147、;/p><p> SJMP INITHIGH;</p><p> ENDHIGH: MOV R0,#WL;</p><p> MOV A,#04BH;</p><p> MOV R7,#08H;</p><p> INITLOW: MOV @R0
148、,A;</p><p> DJNZ R7,LOWINC;</p><p> SJMP ENDLOW;</p><p> LOWINC: INC R0;</p><p> SJMP INITLOW;</p><p> ENDLOW: RET;</p>
149、<p> ;***********外部中斷0的服務(wù)程序**********</p><p> ;完成一個循環(huán)的數(shù)據(jù)讀取</p><p> INT_0: CLR EX0 ; 若轉(zhuǎn)換完畢關(guān)中斷</p><p> MOV DPTR,#0FFFEH;</p><p> MOVX
150、0; A,@DPTR ;讀取轉(zhuǎn)換完畢后的數(shù)</p><p> MOV @R0,A ;將轉(zhuǎn)換完畢的數(shù)保存</p><p> DJNZ R6,READNEXT;若未讀取完畢則調(diào)整后繼續(xù)</p><p> LCALL DLY_1S;</p><p> SJMP EX0_END;&
151、lt;/p><p> READNEXT: INC R0;</p><p> INC INNAL;</p><p> MOV A,INNAL;</p><p> MOVX @DPTR,A ;再次啟動AD0809</p><p> SETB
152、EX0 ;開外部中斷0</p><p> EX0_END: RETI;</p><p> TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H</p><p> DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH</p><p> DB
153、60; 0FFH,089H,0C7H;</p><p><b> END</b></p><p><b> 結(jié) 束 語</b></p><p> 為了完成這次設(shè)計讓我專研了很久,通過這次的設(shè)計使我深刻知道了原來學(xué)好一個東西真的很不容易,要花很多時間的研究和去請教別人,也使我知道了 原來我們的知識是多么的缺乏。<
154、/p><p> 但是這個次的設(shè)計總體自己覺得還是不錯的 ,但是也有些瑕疵,我相信在我以后不斷的學(xué)習(xí),慢慢的讓我去把自己的不足彌補(bǔ)上來 是自己的能力漸漸的上升!</p><p> 不僅僅這次多設(shè)計的了解 也多如何去寫好個文本文檔有了一個體驗(yàn) ,也給自己有了一個很深刻的訓(xùn)練!使我知道了只有每做一件事情都要認(rèn)真仔細(xì)才能成功!參考文獻(xiàn)</p><p> [1]王新賢,通
155、用集成電路速查手冊, 山東: 科學(xué)技術(shù)出版社,2004</p><p> [2]李逍華,李玲,牛艷,單片機(jī)應(yīng)用系統(tǒng)設(shè)計——入門向?qū)c設(shè)計實(shí)例, 武漢: 武漢大學(xué)出版社,2003.3</p><p> [3]魏立峰,王寶興,單片機(jī)原理與應(yīng)用技術(shù), 北京: 北京大學(xué)出版,2006.8 [4] 74HC74,74HC02,74HC164,74HC165使用手冊,http://www.eewo
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計---基于51單片機(jī)的多路溫度采集控制系統(tǒng)設(shè)計
- 多路溫度采集課程設(shè)計-基于單片機(jī)和溫度傳感器的多路溫度采集系統(tǒng)并軟件仿真
- 課程設(shè)計---基于單片機(jī)的溫度采集系統(tǒng)設(shè)計
- 單片機(jī)課程設(shè)計--基于單片機(jī)的溫度數(shù)據(jù)采集系統(tǒng)設(shè)計
- 單片機(jī)課程設(shè)計報告單片機(jī)的多路溫度測量系統(tǒng)設(shè)計
- 單片機(jī)課程設(shè)計--遠(yuǎn)程溫度采集系統(tǒng)
- 單片機(jī)課程設(shè)計--基于mcs-51單片機(jī)的溫度采集系統(tǒng)
- 單片機(jī)課程設(shè)計報告--遠(yuǎn)程溫度采集系統(tǒng)
- 單片機(jī)課程設(shè)計報--遠(yuǎn)程溫度采集系統(tǒng)
- 單片機(jī)課程設(shè)計--多路數(shù)字溫度測量系統(tǒng)設(shè)計
- 單片機(jī)課程設(shè)計報告--遠(yuǎn)程溫度采集系統(tǒng)
- 單片機(jī)課程設(shè)計---基于單片機(jī)溫度測量系統(tǒng)設(shè)計
- 基于單片機(jī)的多路溫度采集系統(tǒng)的研究.pdf
- 畢業(yè)設(shè)計---基于單片機(jī)的多路溫度采集系統(tǒng)設(shè)計與實(shí)現(xiàn)
- 基于單片機(jī)的多路溫度采集系統(tǒng)設(shè)計與實(shí)現(xiàn)畢業(yè)設(shè)計
- 畢業(yè)設(shè)計--基于單片機(jī)的多路溫度采集系統(tǒng)設(shè)計與實(shí)現(xiàn)
- 單片機(jī)課程設(shè)計—基于51單片機(jī)的溫度監(jiān)控系統(tǒng)設(shè)計
- 單片機(jī)課程設(shè)計--數(shù)字時鐘及溫度采集系統(tǒng)的設(shè)計
- 數(shù)字多路語言通信系統(tǒng)課程設(shè)計(基于單片機(jī))
- 單片機(jī)課程設(shè)計--基于51單片機(jī)的溫度控制系統(tǒng)設(shè)計
評論
0/150
提交評論