可燃?xì)怏w報警器設(shè)計畢業(yè)論文_第1頁
可燃?xì)怏w報警器設(shè)計畢業(yè)論文_第2頁
可燃?xì)怏w報警器設(shè)計畢業(yè)論文_第3頁
可燃?xì)怏w報警器設(shè)計畢業(yè)論文_第4頁
可燃?xì)怏w報警器設(shè)計畢業(yè)論文_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、畢業(yè)論文設(shè)計可燃?xì)怏w報警器設(shè)計第1章 單片機(jī)相關(guān)知識介紹1.1 單片機(jī)中斷與復(fù)位2.1.1單片機(jī)中斷系統(tǒng)1. 中斷的概念中斷是通過硬件來改變cpu程序運行的方向。計算機(jī)在執(zhí)行程序的過程中,由于cpu以外的某種原因,有必要盡快中止當(dāng)前程序的執(zhí)行,而去執(zhí)行相應(yīng)的處理程序,在處理結(jié)束后,再回來繼續(xù)執(zhí)行被中止了的源程序。這種程序在執(zhí)行過程中由于外界的原因而被中間打斷的情況稱為“中斷”。2. 89c51 的中斷系統(tǒng)89c51的中斷系統(tǒng)主要由幾個與中斷有關(guān)的特殊功能的寄存器,中斷入口,順序查詢邏輯電路等組成。與中斷有關(guān)的特殊功能寄存器有四個,分別為中斷源寄存器(即專用寄存器tcon和scon的相關(guān)位),中

2、斷允許控制寄存器ie和中斷優(yōu)先級控制寄存器ip。89c51單片機(jī)有5個中斷源,可提供兩個中斷優(yōu)先級,即可實現(xiàn)二級中斷嵌套。5個中斷源的排列順序由中斷優(yōu)先級控制寄存器ip和順序查詢邏輯電路共同決定。5個中斷源對應(yīng)5個固定的中斷入口地址。(1) 中斷請求源: 外部中斷請求源:即外中斷0和1,經(jīng)由外部引腳引入的,在單片機(jī)上有兩個引腳,名稱為int0、int1,也就是p3.2、p3.3這兩個引腳。在內(nèi)部的tcon中有四位是與外中斷有關(guān)的。it0:int0觸發(fā)方式控制位,可由軟件進(jìn)和置位和復(fù)位,it0=0,int0為低電平觸發(fā)方式,it0=1,int0為負(fù)跳變觸發(fā)方式。ie0:int0中斷請求標(biāo)志位。當(dāng)

3、有外部的中斷請求時,這位就會置1(這由硬件來完成),在cpu響應(yīng)中斷后,由硬件將ie0清0。it1、ie1的用途和it0、ie0相同。(2)內(nèi)部中斷請求源:tf0:定時器t0的溢出中斷標(biāo)記,當(dāng)t0計數(shù)產(chǎn)生溢出時,由硬件置位tf0。當(dāng)cpu響應(yīng)中斷后,再由硬件將tf0清0。tf1:與tf0類似。ti、ri:串行口發(fā)送、接收中斷。(3) 中斷允許寄存器ie中斷的允許或禁止是由片內(nèi)可進(jìn)行位尋址的8位中斷允許寄存器ie來控制的。見表2-1 表2-1 8位中斷允許寄存器eaxxeset1ex1et0ex0其中ea是總開關(guān),如果它等于0,則所有中斷都不允許。es串行口中斷允許et1定時器1中斷允許,ex1

4、外中斷1中斷允許。et0定時器0中斷允許,ex0外中斷0中斷允許。(4)五個中斷源的自然優(yōu)先級與中斷服務(wù)入口地址外中斷0:0003h 定時器0:000bh外中斷1:0013h 定時器1:001bh串口 :0023h它們的自然優(yōu)先級由高到低排列。中斷優(yōu)先級中由中斷優(yōu)先級寄存器ip來置值的,ip中某位設(shè)為1,相應(yīng)的中斷就是高優(yōu)先級,否則就是低優(yōu)先級。xxxpspt1px1pt0px02.1.2單片機(jī)復(fù)位電路復(fù)位是單片機(jī)的初始化操作,其主要功能是把pc初始化位0000h單元開始執(zhí)行程序。除了進(jìn)入系統(tǒng)的正常初始化之外,當(dāng)由于程序運行出錯或操作錯誤使系統(tǒng)處于死鎖狀態(tài)時,為擺脫困境,也需按復(fù)位鍵重新啟動。

5、除pc之外,復(fù)位操作還對其它一些專用寄存器有影響,他們的復(fù)位狀態(tài)如下;pc 0000h tcon 00hacc 00h tlo 00hpsw 00h th0 00hsp 07h tl1 00hdptr 0000h th1 00hp0p3 0ffh scon 00hip xx000000b sbuf 不定ie 0x000000b pcon 0xx0000btmod 00h復(fù)位操作還對單片機(jī)的個別引腳信號有影響,例如把a(bǔ)le和信號變?yōu)闊o效狀態(tài),即ale = 0, = 1。本實驗采用按鍵電平復(fù)位方式,晶振為12mhz,r1為200,r2為2k,c為10uf。復(fù)位電路雖然簡單,但其作用非常重要。一個單

6、片機(jī)是否正常工作,首先要檢查是否能復(fù)位成功。1.2 at89c51單片機(jī)對adc0809的接口mcs-51與adc接口時必須弄清并處理好三個問題:1要給start線送一個100ns寬的啟動正脈沖;2. 獲取eoc線上的狀態(tài)信息,因為它是a/d轉(zhuǎn)換的結(jié)束標(biāo)志;3.要給“三態(tài)輸出鎖存器”分配一個端口地址,也就是給oe線上送一個地址譯碼器輸出信號。mcs-51和adc接口通??梢圆捎貌樵兒椭袛鄡煞N方式。采用查詢法傳送數(shù)據(jù)時mcs-51應(yīng)對eoc線查詢它的狀態(tài):若它為低電平,表示a/d轉(zhuǎn)換正在進(jìn)行,則mcs-51應(yīng)當(dāng)繼續(xù)查詢;若查詢到eoc變?yōu)楦唠娖?,則給oe線送一個高電平,以便提取a/d轉(zhuǎn)換后的數(shù)字

7、量。采用中斷方式傳送數(shù)據(jù)時,eoc線作為cpu的中斷請求輸入線。cpu響應(yīng)中斷后,應(yīng)字中斷服務(wù)程序中使oe線變?yōu)楦唠娖剑蕴崛/d轉(zhuǎn)換后的數(shù)字量。 mcs-51對adc0809的接口adc0809內(nèi)部有一個8位“三態(tài)輸出鎖存器”可以鎖存a/d轉(zhuǎn)換后的數(shù)字量,故它本身既可看作一種輸入設(shè)備,也可認(rèn)為是并行i/o接口芯片。因此,adc0809可以直接和mcs-51接口,當(dāng)然也可通過像8255這樣的其他芯片連接。但在大多數(shù)情況下,51系列單片機(jī)是和adc0809直接相連的1.3 at89c51的介紹是一個低電壓,高性能cmos 8位單片機(jī),片內(nèi)含4k bytes的可反復(fù)擦寫的flash只讀程序存儲器

8、和128 bytes的隨機(jī)存取數(shù)據(jù)存儲器(ram),器件采用atmel公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)mcs-51指令系統(tǒng),片內(nèi)置通用8位中央處理器和flash存儲單元,內(nèi)置功能強(qiáng)大的微型計算機(jī)的at89c51提供了高性價比的解決方案。at89c51是一個低功耗高性能單片機(jī),40個引腳,32個外部雙向輸入/輸出(i/o)端口,同時內(nèi)含2個外中斷口,2個16位可編程定時計數(shù)器,2個全雙工串行通信口,at89c51可以按照常規(guī)方法進(jìn)行編程,也可以在線編程。其將通用的微處理器和flash存儲器結(jié)合在一起,特別是可反復(fù)擦寫的flash存儲器可有效地降低開發(fā)成本。第2章 硬件部分的設(shè)計及調(diào)試

9、2.1 硬件部分的設(shè)計2.1.1 系統(tǒng)的組成整個報警器由三個部分組成:濃度檢測及顯示模塊。主控模塊和報警及事故處理模塊。系統(tǒng)的組成框圖如圖3-4所示。故障處理報警控制濃度顯示at89c51氣體濃度檢測工作狀態(tài)設(shè)置圖3-4 系統(tǒng)組成框圖2.1.2 系統(tǒng)各模塊功能1.氣體濃度檢測模塊系統(tǒng)采用三點單獨檢測的方法,可用來巡回檢測三個不同的房間;也可用來巡回檢測同一個房間的不同方位.檢測器件選用高溫一氧化碳?xì)怏w傳感器(gs-a1),該傳感器對一氧化碳具有很高的靈敏度,穩(wěn)定性和抗?jié)裥粤己?加活性碳罩后,可防止乙醇等有機(jī)氣體的干擾.檢測結(jié)果經(jīng)高精度運放器op07放大后,送入adc0809模p數(shù)轉(zhuǎn)換芯片進(jìn)行模

10、)數(shù)轉(zhuǎn)換,單個傳感器檢測電路圖如圖5。 2.模數(shù)轉(zhuǎn)換模塊在本設(shè)計中,另一重要模塊就是a/d模數(shù)轉(zhuǎn)換模塊。因為模擬信號不能直接送往單片機(jī)進(jìn)行處理,必須進(jìn)行a/d轉(zhuǎn)換。模數(shù)轉(zhuǎn)換的過程有四個階段,即:采樣,保持,量化和編碼。本設(shè)計利用adc0809實現(xiàn)模數(shù)轉(zhuǎn)換。adc0809是8位逐次漸進(jìn)型的a/d轉(zhuǎn)換器,它采用coms工藝20個引腳雙列直插式封裝,它有三態(tài)瑣存器,直接驅(qū)動數(shù)據(jù)總線,與微機(jī)相連時不需要附加接口電路。adc0809的主要性能如下:1分辨率為8位。2最大轉(zhuǎn)換誤差為1lsb。3轉(zhuǎn)換時間為100us。4邏輯點平與coms和ttl相兼容。5+5v單電源供電。6可對0到+5v的輸入模擬信號進(jìn)行轉(zhuǎn)

11、換。圖3-5 a/d轉(zhuǎn)換模塊引腳圖程序中預(yù)采用模數(shù)轉(zhuǎn)換電路由adc0809芯片組成,三路檢測結(jié)果從in0、in1、in2輸入,轉(zhuǎn)換順序由adda、addb、addc控制,轉(zhuǎn)換結(jié)果送單片機(jī)p0口供單片機(jī)進(jìn)行數(shù)據(jù)處理。3.顯示電路由p0口輸入的數(shù)據(jù),在單片機(jī)內(nèi)部進(jìn)行標(biāo)度變換后,從單片機(jī)的串行口輸出進(jìn)行顯示.系統(tǒng)的工作狀態(tài)和氣體濃度,采用led數(shù)碼管顯示,每30秒刷新一次.為了不再擴(kuò)展ipo口,系統(tǒng)采用串行口的移位功能擴(kuò)展為4位靜態(tài)顯示電路.第一位為系統(tǒng)工作狀態(tài)顯示,后三位為一氧化碳?xì)怏w濃度顯示.當(dāng)?shù)谝晃粸椤?0”時,表示系統(tǒng)工作在三點巡回檢測同一個房間狀態(tài);為“8”時表示系統(tǒng)工作在三點巡回檢測同一

12、個房間正常工作狀態(tài);為“1”、“2”、“3”時表示系統(tǒng)工作在單獨檢測狀態(tài),此時后三位顯示的數(shù)據(jù)分別為第1號、第2號、第3號傳感器所檢測到的一氧化碳?xì)怏w濃度。濃度顯示單位為5ppm.74ls164為串行輸入,并行輸出寄存器,當(dāng)p2.0=1且at89c51的txd端有輸出時,74ls164接收串行數(shù)據(jù),更新顯示;當(dāng)p2.0=0時,顯示的內(nèi)容不變。4.主控模塊系統(tǒng)采用單片機(jī)進(jìn)行控制,選用at89c51單片機(jī).該單片機(jī)為atmel公司的產(chǎn)品,其指令系統(tǒng)完全與8031/8051兼容,內(nèi)帶4k字節(jié)的內(nèi)存和程序保護(hù)系統(tǒng),便于程序的調(diào)試修改和保密,各管腳的功能如下:1)ale端的功能:ale端與adc0809

13、的clock相連,為adc0809輸入時鐘脈沖.2)p0口的功能:p0口與adc0809的數(shù)據(jù)輸出口相連,接收apd轉(zhuǎn)換結(jié)果.3)p1口的功能:p1.0端接工作狀態(tài)控制開關(guān),開關(guān)閉合時,系統(tǒng)進(jìn)入正常工作狀態(tài);p1.1端外接的開關(guān)為三點巡回測量同一個房間控制開關(guān),當(dāng)開關(guān)閉合時有效;p1.2p1.4端接adc0809的adda、addb、addc三端,控制adc0809的八路模擬輸入轉(zhuǎn)換.4)p2口的功能:p2.1端與wr端通過外接的與門求反后與adc0809的start和ale相連,用以啟動apd轉(zhuǎn)換,且將8路地址鎖存;p2.1端與rd端通過外接的與門求反后與adc0809的oe端相連,用以允許

14、將apd轉(zhuǎn)換結(jié)果輸出,讓單片機(jī)讀取轉(zhuǎn)換結(jié)果;p2.2端用作系統(tǒng)音樂報警信號控制端,高電平有效;p2.3端用作排風(fēng)扇啟動信號控制端,高電平有效;p2.4端用作電磁閥啟動信號控制端,高電平有效.5)p3口的功能:p3.0、p3.1端和p2.0端用于控制系統(tǒng)的顯示輸出.5.報警與事故處理模塊當(dāng)氣體濃度超過允許值時,該模塊動作,發(fā)出警報信號并根據(jù)不同情況進(jìn)行事故處理.p2.2端為音樂控制端,p2.3端為電磁閥啟動控制端,p2.4為排風(fēng)扇控制端,均為高電平有效.為防止市電對系統(tǒng)的干擾,p2.3和p2.4端都經(jīng)過光電耦合管對電磁閥和排風(fēng)扇進(jìn)行控制.系統(tǒng)各模塊之間的接線圖如圖6所示.圖5 單個傳感器電路圖

15、2.1.3 系統(tǒng)的控制1系統(tǒng)要求設(shè)置正常工作狀態(tài),除正常工作狀態(tài)外,電磁閥要求處于關(guān)閉狀態(tài),以切斷煤氣通道,防止煤氣外泄。2在非正常工作狀態(tài)下,當(dāng)室內(nèi)一氧化碳的濃度達(dá)到100ppm時系統(tǒng)應(yīng)啟動音樂報警,若2min報警無效,系統(tǒng)應(yīng)啟動排風(fēng)扇進(jìn)行通風(fēng)排氣。3系統(tǒng)進(jìn)入正常工作狀態(tài)后,先啟動排風(fēng)扇進(jìn)行通風(fēng),然后啟動電磁閥供給煤氣。4系統(tǒng)進(jìn)入正常工作狀態(tài),自45min后,每隔10min音樂響起一次,用來提醒用戶在工作完畢后,停止供氣。5在正常工作狀態(tài)下,當(dāng)系統(tǒng)檢測到一氧化碳的濃度達(dá)到300ppm時,應(yīng)關(guān)閉電磁閥,切斷煤氣通道以防止意外事故的發(fā)生。2.1.4 系統(tǒng)主要器件的介紹3.1.4.1 gs傳感器介

16、紹設(shè)計中所用到的氣體傳感器是gs系列傳感器,下面具體介紹一下gs系列氣體傳感器:gs系列氣敏元件采用半導(dǎo)體敏感材料,工藝獨特為國內(nèi)首創(chuàng),其靈敏度、選擇性、穩(wěn)定性、抗干擾性、響應(yīng)時間及壽命等主要性能,均達(dá)到國內(nèi)先進(jìn)水平.用該系列元件組裝成易燃易爆和有毒氣體泄漏報警器及檢測裝置,可廣泛運用于礦山、油田、化工、國防、醫(yī)藥及家庭.gs系列傳感器主要有以下特點:(1)靈敏度高、功耗低,輸出信號強(qiáng).(2)選擇性好、對被檢測的氣體非常敏感,而對干擾氣體則靈敏度很低(3)穩(wěn)定性、可靠性強(qiáng)(4)具有抗高溫、抗高濕性能(5)元件不含任何貴金屬催化劑,具有抗中毒及抗飽和性能.但由于氣體傳感器是使用半導(dǎo)體材料來制作,

17、不可避免的是有溫度漂移問題,如何處理好氣體傳感器溫度補(bǔ)償問題是報警器設(shè)計的關(guān)鍵(圖3-1、圖 3-2).以前的一般做法是把報警器的報警閥值電壓作補(bǔ)償,這樣的電路會簡單一些,但溫度補(bǔ)償?shù)男Ч惶硐耄饕窃诘蜏丨h(huán)境里,氣體傳感器的表面溫度降低導(dǎo)致氣體傳感器的性能變差,解決的方法是在低溫環(huán)境里提高氣體傳感器的加熱功率,使氣體傳感器的表面溫度維持相對恒定,達(dá)到使氣體傳感器穩(wěn)定工作的目的。圖3-1 傳感器輸出特性曲線圖圖3-2 傳感器加溫度補(bǔ)償所需的加熱電壓曲線 氣體傳感器加熱電源的原理見圖 3-3,利用 pic 單片機(jī)的脈沖寬度調(diào)制輸出功能(簡稱 pwm), 及 a/d 轉(zhuǎn)換輸入功能實現(xiàn)電源電壓的

18、穩(wěn)定和自我調(diào)整。 如圖所示,是降壓式開關(guān)電源(buck 式)的基本電路。其中,vin 為輸入電壓,vout 為輸出電壓,q1、q2 為開關(guān)三極管,r1、r2、r3 為電阻,l 為電感,d 為肖特基二極管;c 為電容,mqk 為氣體傳感器,通常有:,;。其中,n 為脈寬占空比,ton 為開關(guān)三極管導(dǎo)通時間,toff 為開關(guān)三極管關(guān)閉時間,rx 為開關(guān)電源的負(fù)載電阻,vp 為輸出紋波電壓.實際使用開關(guān)速度為 20khz,輸出的電壓為 2.250.01v,輸出電流為 120ma,vp0.1v.該電路的工作原理是:預(yù)先設(shè)定目標(biāo)工作電壓值,輸出 at89c51 單片機(jī)的 pwm,啟動開關(guān)電源工作,通過a

19、/d 轉(zhuǎn)換電路將電源電壓值讀入單片機(jī),如果電壓值偏離給定值,則調(diào)整 pwm 輸出,這樣形成一個電壓調(diào)整的閉合環(huán)路,直到電壓值維持恒定,而環(huán)境溫度將決定電壓給定值的大小,達(dá)到隨外界溫度的改變而改變加熱功率的目的,以補(bǔ)償氣體傳感器的溫度變化,同時使用開關(guān)電源減少了線性穩(wěn)壓電源的壓降損耗.該開關(guān)電源電路的電壓穩(wěn)定精度取決于單片機(jī) a/d 和 pwm 的精度,該 at89c51 單片機(jī)基本能夠滿足氣體泄漏報警器的性能需求。圖3-3 傳感器加熱電源原理圖 3.1.4.2 74ls164移位寄存器介紹74ls164 8 位移位寄存器(串行輸入,并行輸出) 簡要說明 164 為 8 位移位寄存器,其主要電特

20、性的典型值如下:當(dāng)清除端(clear)為低電平時,輸出端(qaqh)均為低電平。 串行數(shù)據(jù)輸入端(a,b)可控制數(shù)據(jù)。當(dāng) a、b 任意一個為低電平,則禁 止新數(shù)據(jù)輸入,在時鐘端(clock)脈沖上升沿作用下 q0 為低電平。當(dāng) a、b 有一個為高電平,則另一個就允許輸入數(shù)據(jù),并在 clock 上升沿作用下決定 q0 的狀態(tài)。 引出端符號 clock 時鐘輸入端 clear 同步清除輸入端(低電平有效) a,b 串行數(shù)據(jù)輸入端 qaqh 輸出端邏輯及封裝圖雙列直插封裝極限值 電源電壓7v 輸入電壓 5.5v 工作環(huán)境溫度 54164 -070 儲存溫度 -65150真值表h高電平 l低電平 x任

21、意電平 低到高電平跳變 qa0,qb0,qh0 規(guī)定的穩(wěn)態(tài)條件建立前的電平 qan,qgn 時鐘最近的前的電平時序圖下面再介紹一下74ls164驅(qū)動數(shù)碼管:在單片機(jī)應(yīng)用系統(tǒng)中,顯示器顯示常用兩種方法:靜態(tài)顯示和動態(tài)掃描顯示。所謂靜態(tài)顯示,就是每一個顯示器都要占用單獨的具有鎖存功能的i/o接口用于筆劃段字形代碼。這樣單片機(jī)只要把要顯示的字形代碼發(fā)送到接口電路,就不用管它了,直到要顯示新的數(shù)據(jù)時,再發(fā)送新的字形碼,因此,使用這種方法單片機(jī)中cpu的開銷小??梢蕴峁﹩为氭i存的i/o接口電路很多,這里以常用的串并轉(zhuǎn)換電路74ls164為例,介紹一種常用靜態(tài)顯示電路,以使大家對靜態(tài)顯示有一定的了解。 m

22、cs-51單片機(jī)串行口方式0為移位寄存器方式,外接6片74ls164作為6位led顯示器的靜態(tài)顯示接口,把8031的rxd作為數(shù)據(jù)輸出線,txd作為移位時鐘脈沖。74ls164為ttl單向8位移位寄存器,可實現(xiàn)串行輸入,并行輸出。其中a、b(第1、2腳)為串行數(shù)據(jù)輸入端,2個引腳按邏輯與運算規(guī)律輸入信號,共一個輸入信號時可并接。t(第8腳)為時鐘輸入端,可連接到串行口的txd端。每一個時鐘信號的上升沿加到t端時,移位寄存器移一位,8個時鐘脈沖過后,8位二進(jìn)制數(shù)全部移入74ls164中。r(第9腳)為復(fù)位端,當(dāng)r=0時,移位寄存器各位復(fù)0,只有當(dāng)r=1時,時鐘脈沖才起作用。q1q8(第3-6和1

23、0-13引腳)并行輸出端分別接led顯示器的hga各段對應(yīng)的引腳上。在給出了8個脈沖后,最先進(jìn)入74ls164的第一個數(shù)據(jù)到達(dá)了最高位,然后再來一個脈沖會有什么發(fā)生呢?再來一個脈沖,第一個脈沖就會從最高位移出,搞清了這一點,下面讓我們來看電路,6片7ls164首尾相串,而時鐘端則接在一起,這樣,當(dāng)輸入8個脈沖時,從單片機(jī)rxd端輸出的數(shù)據(jù)就進(jìn)入到了第一片74ls164中了,而當(dāng)?shù)诙€8個脈沖到來后,這個數(shù)據(jù)就進(jìn)入了第二片74ls164,而新的數(shù)據(jù)則進(jìn)入了第一片74ls164,這樣,當(dāng)?shù)诹鶄€8個脈沖完成后,首次送出的數(shù)據(jù)被送到了最左面的164中,其他數(shù)據(jù)依次出現(xiàn)在第一、二、三、四、五片74ls1

24、64中。2.2 硬件電路的調(diào)試本設(shè)計的元器件較少,所以采用萬用板手工焊接。焊接完成后,檢查有無可能出現(xiàn)的虛焊、漏焊,檢查電源線和接地線。確定無問題后將電路板通電。首先用示波器觀察單片機(jī)at89c51的18、19管腳有無頻率為10mhz的三角波。若有,表示晶振正常工作,單片機(jī)能保證正常工作。若無,檢查晶振電路,排除故障。接著用單片機(jī)仿真器向p1口送數(shù)值,檢查led數(shù)碼管能否正常顯示,若不能,檢查譯碼器7448是否工作,有無電壓輸出,檢查led是否損壞。最后檢查adc0809在有電壓15v接入的情況下,有無電壓輸出。若無問題,硬件調(diào)試完畢。第3章 軟件部分的設(shè)計及調(diào)試3.1 軟件部分的設(shè)計本設(shè)計的

25、主要功能實現(xiàn)在于程序的編寫,流程圖如圖4-1: 圖4-1 軟件流程圖如圖所示,整個報警器程序上分成中斷取值轉(zhuǎn)換、調(diào)零、報警、顯示四大模塊3.1.1 主程序整個程序一共使用了兩個中斷,一個外部中斷即int0中斷,一個定時/計數(shù)器中斷即it0中斷.這兩個中斷各有其作用,int0中斷是用來判斷a/d轉(zhuǎn)換器adc0809對模擬信號的轉(zhuǎn)換是否完成,當(dāng)a/d轉(zhuǎn)換結(jié)束后,adc0809發(fā)出結(jié)束eoc(高電平)信號,該信號可供單片機(jī)查詢,也可反相后作為向單片機(jī)發(fā)出中斷信號,而本設(shè)計正是用的這個方法,使得程序進(jìn)入中斷取值程序.而程序中所用到的it0中斷,是為產(chǎn)生一個周期為2s的方波而設(shè)計的,其作用是為看門狗產(chǎn)生

26、喂狗子信號.具體程序如下: org 00h jmp start ;主程序入口地址 org 03h jmp into ;外中斷into入口 org 0bh jmp itop ; 定時器0中斷入口 org 0100hstart: mov ie,#10000001b ;int0中斷使能 mov ip,#00000001b ;int0中斷優(yōu)先 mov tcon,#00000000b ;設(shè)置int0為電平觸發(fā) mov scon,#00000000b ;串行口發(fā)送,接收標(biāo)志位請0 mov sp,#60h ;設(shè)堆棧指針 mov tmod,#01h ;設(shè)置t0為方式1 call pt0m0here: ajmp

27、 here ;自身跳轉(zhuǎn)pt0m0: mov tl0,#0ch ;t0中斷服務(wù)程序,t0重新置初值 mov th0,#0feh setb tr0 ;啟動t0 setb et0 ;允許t0中斷 setb ea ;cpu開中斷 retitop: mov tl0,#0ch ;t0中斷服務(wù)程序,t0置初值 mov th0,0feh cpl p1.0 ;p1.0狀態(tài)取反 reti acall led ;調(diào)用led自檢子程序 mov 33h,#00h ;設(shè)置中斷完成標(biāo)志為0 mov dptr,#0feffh ;adc0809的端口地址 movx dptr,a ;使bus為高阻抗,令adc0809開始轉(zhuǎn)換wa

28、it:mov a,33h ;等待a/d轉(zhuǎn)換完成信號 jnz intok jmp wait ;未完成則跳回等待intok: mov a,32h ;將最新的濃度值存入累加器中,(若a/d未工作,則a=0) jnz l1 mov a,30h jmp l2l1: mov 30h,31h mov a,31h ;將新濃度載入累加器l2: call bcd ;調(diào)用bcd碼調(diào)整程序 call disp ;顯示當(dāng)前濃度 call adzero ;調(diào)用零點調(diào)整子程序 call alarm ;調(diào)用判斷報警程序 call bcd call disp ;調(diào)用顯示子程序 clr a ;清除累加器值 jmp start ;

29、返回在主程序通過對33h中數(shù)值的判斷斷定a/d是否轉(zhuǎn)換完成,當(dāng)33h中為1時,轉(zhuǎn)換完成,程序調(diào)用調(diào)零、報警、顯示模塊對輸入數(shù)據(jù)進(jìn)行處理。3.1.2 調(diào)零子程序:由于未知問題,可能造成送入單片機(jī)中顯示的模擬電壓量與真實電壓存在區(qū)別,這種誤差可以通過在中斷處理中對a/d轉(zhuǎn)換的數(shù)值加上一個調(diào)整值來解決。這樣,我們就能根據(jù)實際情況來對報警器輸出的數(shù)值進(jìn)行控制,使其記數(shù)更加精確,使用更方便。我們可以利用對端口的電平高低來判斷是否需要進(jìn)行調(diào)零處理,故可將按鍵開關(guān)接于端口p2.2.若開關(guān)按下,則說明有調(diào)零需要,于是進(jìn)入調(diào)零處理程序;若開關(guān)沒有按下,則說明沒有調(diào)零需要,系統(tǒng)進(jìn)入下一步.通過設(shè)置一個按鍵,既可保

30、證程序順利進(jìn)行,又方便用戶使用.具體程序如下:adzero:call delayjb p2.2,jmp1 ;判斷調(diào)零按鈕是否按下,沒按則跳jmp1.jmp1:ret通過對p2.2位的判斷來分辨是否有調(diào)零請求,若有則跳入調(diào)零模式,調(diào)零模式中程序如下:loop1:call delay jnb p2.2,$ ;消除抖動延時 mov a,40h ;將調(diào)零預(yù)設(shè)值40h送入 clr c ;清除進(jìn)位標(biāo)志 subb a,#01h ;調(diào)零值減1 jnc loop2 ;未借位則跳loop2 mov a,#05h ;有借位則重設(shè)調(diào)零值為5loop2:mov 40h,a ;將調(diào)零值送回40h保存 mov a,r3 ;

31、將當(dāng)前濃度值送入a jz xend dec a ;當(dāng)前濃度值減1(響應(yīng)調(diào)整變化)xend1 :mov 30h,a ;送回30h保存 mov 31h,a ;送回31h保存 call bcd ;調(diào)用bcd碼調(diào)整 call disp ;調(diào)用顯示子程序jmp loopxend: mov a,#63h jmp xend1進(jìn)入調(diào)零模式后,若有按鍵則,led數(shù)碼管示數(shù)響應(yīng)按鍵變化。若3秒無任何按鍵,則退出調(diào)零模式返回主程序。3.1.3 顯示子程序因為通過a/d轉(zhuǎn)換進(jìn)入單片機(jī)8051的濃度值以十六進(jìn)制存在,為了讓led顯示需要轉(zhuǎn)換為bcd碼,其bcd碼轉(zhuǎn)換程序如下:bcd:mov 55h,#00h ;存放bc

32、d轉(zhuǎn)換中的百位數(shù)mov 56h,#00h ;存放bcd轉(zhuǎn)換中的十位數(shù)clr c ;清除進(jìn)位標(biāo)志為下面的subb準(zhǔn)備 mov r2,#00h ;清除r2chan:subb a,#64h ;減100jc chan1 ;不能減,轉(zhuǎn)inc r1 ;百位值jmp chan ;循環(huán)判斷百位chan1: add a,#64h ;還原百位數(shù) clr c ;清除進(jìn)位標(biāo)志為下面的subb準(zhǔn)備chan2: subb a,#0ah ;減10jc chan3 ;不夠減,跳inc r2 ;夠減十位加1jmp chan2 ;重復(fù)減10chan3: add a,#0ah ;還原十位數(shù)mov 60h,r2 ;把十位數(shù)放60h中

33、mov 61h,a ;把個位數(shù)放61h中ret這樣把轉(zhuǎn)換成的bcd碼,個位存于61h中,十位存入60h中,再編寫顯示模塊如下:disp: mov r7,#03h mov r0,#60hled1: mov a,r0 mov dptr,#tableled2: movc a,a+dptr mov sbuf,a jnb ti,$ clr ti inc r0 djnz r7,led1 ret將數(shù)值送入到led顯示74ls164驅(qū)動數(shù)碼管的過程:在單片機(jī)應(yīng)用系統(tǒng)中,顯示器顯示常用兩種方法:靜態(tài)顯示和動態(tài)掃描顯示。所謂靜態(tài)顯示,就是每一個顯示器都要占用單獨的具有鎖存功能的i/o接口用于筆劃段字形代碼。這樣單

34、片機(jī)只要把要顯示的字形代碼發(fā)送到接口電路,就不用管它了,直到要顯示新的數(shù)據(jù)時,再發(fā)送新的字形碼,因此,使用這種方法單片機(jī)中cpu的開銷小??梢蕴峁﹩为氭i存的i/o接口電路很多,這里以常用的串并轉(zhuǎn)換電路74ls164為例,介紹一種常用靜態(tài)顯示電路,以使大家對靜態(tài)顯示有一定的了解。 mcs-51單片機(jī)串行口方式0為移位寄存器方式,外接3片74ls164作為3位led顯示器的靜態(tài)顯示接口,把8031的rxd作為數(shù)據(jù)輸出線,txd作為移位時鐘脈沖。74ls164為ttl單向8位移位寄存器,可實現(xiàn)串行輸入,并行輸出。其中a、b(第1、2腳)為串行數(shù)據(jù)輸入端,2個引腳按邏輯與運算規(guī)律輸入信號,共一個輸入信

35、號時可并接。t(第8腳)為時鐘輸入端,可連接到串行口的txd端。每一個時鐘信號的上升沿加到t端時,移位寄存器移一位,8個時鐘脈沖過后,8位二進(jìn)制數(shù)全部移入74ls164中。r(第9腳)為復(fù)位端,當(dāng)r=0時,移位寄存器各位復(fù)0,只有當(dāng)r=1時,時鐘脈沖才起作用。q1q8(第3-6和10-13引腳)并行輸出端分別接led顯示器的hga各段對應(yīng)的引腳上。在給出了8個脈沖后,最先進(jìn)入74ls164的第一個數(shù)據(jù)到達(dá)了最高位,然后再來一個脈沖會有什么發(fā)生呢?再來一個脈沖,第一個脈沖就會從最高位移出,搞清了這一點,下面讓我們來看電路,3片7ls164首尾相串,而時鐘端則接在一起,這樣,當(dāng)輸入8個脈沖時,從單

36、片機(jī)rxd端輸出的數(shù)據(jù)就進(jìn)入到了第一片74ls164中了,而當(dāng)?shù)诙€8個脈沖到來后,這個數(shù)據(jù)就進(jìn)入了第二片74ls164,而新的數(shù)據(jù)則進(jìn)入了第一片74ls164,這樣,當(dāng)?shù)诹鶄€8個脈沖完成后,首次送出的數(shù)據(jù)被送到了最左面的164中,其他數(shù)據(jù)依次出現(xiàn)在第一、二、三片74ls164中。由于本設(shè)計采用的是機(jī)械按鍵,與地線想連,按鍵按下,輸入為低電平,釋放按鍵則輸入為高電平。實際上,機(jī)械式按鍵的落片存在著輕微的彈跳現(xiàn)象其時間由操作員按鍵的動作所確定,為了確保cpu對按鍵的一次閉合僅做一次處理,必須去除抖動,一般通過調(diào)用子程序延時來解決,在鍵的穩(wěn)定閉合或釋放時才讀出鍵的狀態(tài),具體程序如下:delay:

37、movr 5,#60 設(shè)定30毫秒d1: mov r6,#248 ;設(shè)定0.5毫秒djnz r6,$ djnz r5,d1 ret因為石英晶體為12mhz,一個機(jī)器周期為1微秒,這樣如上程序可達(dá)到延時30毫秒的目的。3.1.4 報警子程序本設(shè)計采用了聲光報警,當(dāng)探測器探測的濃度超過報警設(shè)定值時就會同時產(chǎn)生音樂報警和燈光報警,此時紅燈亮啟,喇叭發(fā)出音樂,而正常時,喇叭關(guān)閉,紅燈關(guān)閉,而顯示正常的綠色led亮啟,本設(shè)計為了安全起見,還設(shè)置了事故處理裝置,即出現(xiàn)危險使,探測器除了報警外,還會使排氣扇的閥門打開,對室內(nèi)進(jìn)行排氣,以免產(chǎn)生氣體爆炸或是中毒.具體程序如下alarm: mov a,30h ;

38、將當(dāng)前濃度值送如累加器 clr c ;清除進(jìn)位標(biāo)志 subb a,50h ;與預(yù)警值進(jìn)行判斷 jnc good1 ;若無借位,則當(dāng)前濃度值高于或者等于預(yù)警值,跳good1報警 setb p1.6 ;關(guān)閉聲光報警 setb p1.7 clr p2.3 ;關(guān)閉排氣閥門 setb p1.5 ;關(guān)閉黃色led clr p1.4 ;打開綠色led(顯示正常) ret good1: clr p1.6 ;打開聲光報警(危險報警) clr p1.7 clr p2.3 ;打開排氣閥門 setb p1.5 ;關(guān)閉黃色led setb p1.4 ;關(guān)閉綠色led(顯示不正常? ret3.1.5 中斷取值子程序:從硬

39、件電路圖可以看出,a/d0809的intr端通過反相器與單片機(jī)的外部中斷int0相連,由a/d0809的管腳功能可知,當(dāng)a/d開始轉(zhuǎn)換送入的模擬電壓時,intr端為低電平,轉(zhuǎn)換完成后,intr端變成高電平,通過反相器變成低電平使單片機(jī)89c51產(chǎn)生外部中斷,進(jìn)入中斷處理程序:;* * * * * * * * * * * * * * * * *into: push acc ;將累加器值壓入堆棧保存 push psw ;將psw值壓入堆棧保存 movx a,dptr ;將a/d轉(zhuǎn)換好的值送入累加器 mov 32h,a ;將a/d讀得的值存入32h保存 clr c subb a,51h ;判斷獲得的

40、電壓是否小于1v(50) jnc ok1 mov 32h,#00h ;當(dāng)前a/d轉(zhuǎn)換的電壓小于1v,則a/d轉(zhuǎn)換得的示數(shù)為00 jmp emp1 ok1: mov a,32h call adjust ;調(diào)用adjust將其調(diào)整為濃度對應(yīng)的16進(jìn)制 call addd ;調(diào)用addd將其與調(diào)零預(yù)設(shè)值相加,得到調(diào)整后的16進(jìn)制 mov 31h,a ;將調(diào)整后的值送入31h保存 emp1: mov ie,#10000000b ;關(guān)閉int0中斷使能,關(guān)閉中斷 pop psw ;至堆棧取回psw值 pop acc ;至堆棧取回acc值 mov 33h,#01h ;中斷完成,設(shè)置完成標(biāo)記33h為1 re

41、ti;* * * * * * * * * * * * * * * * *; 調(diào)整相加子程序;* * * * * * * * * * * * * * * * * adjust: clr c subb a,#32h ;將a/d轉(zhuǎn)換的值減50再除10乘5可得當(dāng)前濃度的16進(jìn)制值 mov b,#0ah div ab mov b,#05h mul ab ret addd: add a,40h table: db 0c0h,0f9h,0a4h,0b0h,99h db 92h, 82h, 0f8h,80h, 90h end在中斷處理過程中,因為a/d0809在模擬電壓為15v時送入單片機(jī)的數(shù)值為50250,

42、為了使示數(shù)在099間變化,編寫數(shù)值轉(zhuǎn)換程序如下:adjust: clr c subb a,#32h ;將a/d轉(zhuǎn)換的值減50再除10乘5可得當(dāng)前濃度的16進(jìn)制值 mov b,#0ah div ab mov b,#05h mul ab ret中斷處理過程中斷處理過程可分為三個階段,即中斷響應(yīng),中斷處理和中斷返回。圖2-1單片機(jī)中斷流程圖圖中,保護(hù)現(xiàn)場之后的開中斷是為了允許有更高級中斷打斷此中斷服務(wù)程序。3.2 軟件程序的調(diào)試程序輸入完后就進(jìn)入調(diào)試階段。調(diào)試時采用逐個調(diào)試的方法,即先調(diào)試其中每個子程序,確保無誤后再對整個程序進(jìn)行整體調(diào)試,直到程序順利運行,達(dá)到設(shè)計目的。事實證明了調(diào)試過程是極其緩慢

43、與艱苦的,在軟件調(diào)試過程中,由于對中斷操作的處理不當(dāng),使我很長時間一直停滯不前,通過對自己耐心極限的挑戰(zhàn),最終發(fā)現(xiàn)了問題,我相信這是對自己獨立工作能力的一個很好的鍛煉,一次難得的經(jīng)歷。附錄軟件設(shè)計源程序;30h:存放舊濃度地址31h:現(xiàn)在濃度值(a/d轉(zhuǎn)換后換算取得的新濃度);40h:初始調(diào)零值=0 32h:a/d轉(zhuǎn)換后的值 33h:a/d轉(zhuǎn)換完成(中斷完成)標(biāo)志;50h:初始預(yù)警值=5055h:存放bcd轉(zhuǎn)換中的百位數(shù);56h:存放bcd轉(zhuǎn)換中的十位數(shù)60h:轉(zhuǎn)換完的個位存放地址;61h:轉(zhuǎn)換完的十位存放地址62h:轉(zhuǎn)換完的百位存放地址;63h:存放轉(zhuǎn)換完的壓縮bcd碼供顯示用 r1:bcd

44、轉(zhuǎn)換中存放的百位數(shù)(可做百位報警);r2:bcd轉(zhuǎn)換中存放十位數(shù)60hr3:當(dāng)前濃度值保存;r4:設(shè)置改變模式延時時間r5,r6:延時程序中用到;sp:堆棧-#70h;* * * * * * * * * * * * * * * * *; 可燃?xì)怏w探測報警器; 2008.5.20;* * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *; 各引腳用途及系統(tǒng)功能說明;p1.4 接綠燈,指示正常;p1.5 接黃燈,指示故障;p1.6 接紅燈,燈光報警;p1.7 接喇叭,音樂報警;p2.0 接adc0809;p2.2 接調(diào)零開關(guān);p2.3 接繼電器,控制排氣閥門;* * * * * * * * * * * * * * * * *; 主 程 序;* * * * * * * * * * * * * * * * * org 00h jmp start ;主程序入口地址 org 03h jmp into ;外中斷into入口 org 0bh jmp itop ; 定時器0中斷入口 org 0100hstart: mov ie,#10000001b ;int0中斷使能 mov ip,#00000001b ;int0中斷優(yōu)先 mov tcon,#000000

溫馨提示

  • 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

提交評論