版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 目 錄</b></p><p> 第1節(jié) 引 言……………………………………………………………………… 1</p><p> 1.1 設(shè)計(jì)背景……………………………………………………………………1</p><p> 1.2 系統(tǒng)功能說明………………………………………………………………1</p>
2、;<p> 第2節(jié) 硬件設(shè)計(jì)基本原理與實(shí)現(xiàn)方法……………………………………………2</p><p> 2.1 水位檢測(cè)與數(shù)據(jù)采集…………………………………………………… 2</p><p> 2.2 數(shù)碼管LED顯示…………………………………………………………4</p><p> 2.2.1 相關(guān)芯片簡(jiǎn)介……………………………………………
3、…………4</p><p> 2.2.2 顯示部分工作原理…………………………………………………5</p><p> 第3節(jié) 系統(tǒng)軟件設(shè)計(jì)……………………………………………………………8</p><p> 3.1 初始化程序………………………………………………………………8</p><p> 3.2 TMR1中斷服務(wù)程序…………
4、…………………………………………9</p><p> 3.3 數(shù)據(jù)轉(zhuǎn)換子程序…………………………………………………………10</p><p> 3.4 TMR0中斷服務(wù)程序……………………………………………………11</p><p> 3.5 程序清單…………………………………………………………………13</p><p> 第4
5、節(jié) 結(jié)束語(yǔ)……………………………………………………………………22</p><p> 參考文獻(xiàn) ……………………………………………………………………………22</p><p><b> 水位檢測(cè)儀系統(tǒng)</b></p><p><b> 第1節(jié) 引 言</b></p><p> 水位檢
6、測(cè)和顯示儀表裝置在工業(yè)上有著廣泛的應(yīng)用。本設(shè)計(jì)采用的是一種低成本的數(shù)碼管顯示驅(qū)動(dòng)方案。在對(duì)成本較敏感的小型系統(tǒng)中,該方案有著一定的參考價(jià)值。</p><p><b> 1.1 設(shè)計(jì)背景</b></p><p> 鍵盤和顯示器是單片機(jī)系統(tǒng)中人機(jī)對(duì)話不可缺少的一部分。在許多智能儀表的設(shè)計(jì)中,多用LED數(shù)碼管來顯示。這是因?yàn)長(zhǎng)ED數(shù)碼管驅(qū)動(dòng)簡(jiǎn)單,成本較低并且能適應(yīng)惡劣的
7、環(huán)境。用于數(shù)碼管顯示驅(qū)動(dòng)的芯片有很多種,常見的有MAX7219、MAX7221、ZLG7290、IMC7218B以及8279等。這些專用芯片使用方便、功能教強(qiáng),但價(jià)格偏高。本設(shè)計(jì)中采用的循環(huán)掃描的方式,充分利用單片機(jī)快速的處理能力對(duì)各顯示單元分時(shí)選通,只需普通的串行移位芯片,就可以達(dá)到顯示驅(qū)動(dòng)的目的。這種方法對(duì)單片機(jī)的CPU占用率相對(duì)較高,不適宜于CPU任務(wù)繁忙的場(chǎng)合,但是對(duì)那些功能相對(duì)簡(jiǎn)單,CPU相對(duì)空閑的中小型系統(tǒng)非常實(shí)用,能夠大大
8、降低系統(tǒng)成本。</p><p> 1.2 系統(tǒng)主要功能</p><p> 該裝置對(duì)偏離零點(diǎn)的水位進(jìn)行檢測(cè),然后將帶符號(hào)的水位值(低于或高于零點(diǎn))用數(shù)碼管顯示出來,并通過雙色發(fā)光二極管LED陣列對(duì)水位高度進(jìn)行模擬顯示。整個(gè)裝置主要包含水位檢測(cè)和顯示兩個(gè)部分,現(xiàn)將每部分功能說明如下:</p><p> ?。?)水位檢測(cè):在0mm、±10mm、±2
9、5mm、±50mm、±80mm、±120mm、±160mm、±240mm共15點(diǎn)基礎(chǔ)上,檢測(cè)水位偏離零點(diǎn)的大小。</p><p> ?。?)水位顯示:將上一步檢測(cè)結(jié)果用數(shù)碼顯示出來,顯示值以比實(shí)際水位小的最近點(diǎn)為準(zhǔn),例如:水位實(shí)際高度為35mm,則數(shù)碼管顯示25mm。同時(shí),用15個(gè)豎直排列的雙色LED陣列直觀的模擬當(dāng)前水位高度,當(dāng)水位沒有達(dá)到某點(diǎn)相應(yīng)的LED顯示紅
10、色,達(dá)到或超過則顯示綠色。當(dāng)水位低于-240mm時(shí)報(bào)警燈顯示綠色,高于+240mm時(shí)報(bào)警燈顯示紅色,當(dāng)水位恢復(fù)正常值時(shí)報(bào)警燈熄滅。</p><p> 第2節(jié) 硬件設(shè)計(jì)基本原理與實(shí)現(xiàn)方法</p><p> 2.1 水位檢測(cè)與數(shù)據(jù)采集</p><p> 本設(shè)計(jì)采用電接點(diǎn)水位檢測(cè)方法,在每一個(gè)預(yù)定水位檢測(cè)點(diǎn)處,將兩個(gè)電極安裝在容器壁,使其一端能夠與沒過該點(diǎn)的水充分接
11、觸,另一端引出到容器外面同檢測(cè)電路相連,兩個(gè)電極等高度并間隔一定距離。當(dāng)水位沒有達(dá)到該檢定點(diǎn)時(shí),兩個(gè)電極間電阻為無窮大;而一旦水位上升到該點(diǎn)高度,則兩個(gè)電極同時(shí)沒于水中,由于水的導(dǎo)電性,兩個(gè)電極導(dǎo)通。通過檢測(cè)兩個(gè)電極是否導(dǎo)通就可以檢測(cè)水位的高度了。對(duì)15個(gè)檢測(cè)點(diǎn)相應(yīng)有15個(gè)檢測(cè)通道,本設(shè)計(jì)運(yùn)用了兩片8通道的多路開關(guān)CD4051,對(duì)各通道循環(huán)檢測(cè)來實(shí)現(xiàn)數(shù)據(jù)采集。</p><p> CD4051是一種雙向8通道的多
12、路開關(guān),可以8路選通輸入,1路輸出;也可1路輸入,8路選通輸出。通過3為數(shù)據(jù)位A、B、C進(jìn)行通道選擇。禁止輸入輸出端INH可以禁止和允許工作。CD4051具有低接通電阻和低關(guān)斷電流的特點(diǎn),其引腳定義如圖2.1所示,真值表如表2.1所示。</p><p><b> IN/OUT</b></p><p> VDD 1 0 3
13、 A B C</p><p> 16 15 14 13 12 11 10 9</p><p><b> 0</b></p><p> 1 2 3 4 5 6 7 8</p><p
14、> 4 6 OUT/IN 7 5 INH VEE VSS </p><p> IN/OUT IN/OUT</p><p> 圖2.1 CD4051引腳圖</p><p> 表2.1 CD4051真值表</p><p> 盡管水位檢測(cè)原理簡(jiǎn)
15、單,但應(yīng)用時(shí)卻不能僅僅用每路的通斷來判斷水位是否沒過該路的電極。實(shí)際上,水的電阻因水中所含成分不同有很大的差異,例如蒸餾水就不導(dǎo)電,就不能用這種方法來檢測(cè),而本設(shè)計(jì)所應(yīng)用的場(chǎng)合經(jīng)試驗(yàn)測(cè)得水阻在幾K到幾十K不等;另一方面,空氣電阻也不是無窮大,也跟其成分有關(guān),例如飽和蒸汽的阻值就大概在1M歐左右。所以,不能通過判斷單片機(jī)的數(shù)據(jù)采集引腳輸入電平高低來判斷水位是否到達(dá)某點(diǎn),否則,對(duì)介于高、低電平之間的電平狀態(tài)就無法做出判斷,而這種情況是可能存
16、在的。一個(gè)可靠的方法是對(duì)輸入引腳的數(shù)據(jù)進(jìn)行采樣,然后將采樣結(jié)果與一個(gè)閾值進(jìn)行比較,從而得出正確的結(jié)論。根據(jù)這個(gè)原理設(shè)計(jì)的水位檢測(cè)電路如圖2.2所示。從圖中可以看出,通過RD0~RD3口進(jìn)行采樣通道地址譯碼,在不同時(shí)刻選通16個(gè)通道中的1個(gè)。當(dāng)水位上升到某一對(duì)電極高度時(shí),相應(yīng)通道的采樣電壓將會(huì)較低;若水位沒有上升到電極高度,那么上拉電阻將會(huì)把采樣值鉗位到+5V。RA0口作為A/D采樣通道輸入口。</p><p>
17、 圖2.2 水位檢測(cè)電路原理圖</p><p> 2.2 數(shù)碼管與LED顯示</p><p> 模擬水位高度由15個(gè)雙色發(fā)光二極管(LED)來完成,共分為4組。在某一特定時(shí)刻,每組LED與一個(gè)數(shù)碼管一起被選通(4組LED對(duì)應(yīng)4個(gè)數(shù)碼管),兩個(gè)8位的移位寄存器741S164級(jí)聯(lián),將單片機(jī)送出的2個(gè)字節(jié)串行數(shù)據(jù)轉(zhuǎn)化為16位并行數(shù)據(jù),分別送選通的LED和數(shù)碼管。在不同時(shí)刻,系統(tǒng)對(duì)4組LED
18、和數(shù)碼管快速地循環(huán)掃描,就完成了面板顯示的功能。</p><p> 2.2.1 相關(guān)芯片簡(jiǎn)介</p><p> 顯示部分用到的芯片包括移位寄存器74LS164、數(shù)據(jù)緩沖器74LS244以及多路開關(guān)CD4051。下面就74LS164和74LS244作簡(jiǎn)單介紹。 </p><p> ?。?)移位寄存器74LS164。74LS164引腳定義如圖2.3所示,起真值表如
19、表2.2所示,其功能是將外部輸入的串行數(shù)據(jù)轉(zhuǎn)化為8位的并行數(shù)據(jù)輸出具有鎖寸功能。A、B端為串行數(shù)據(jù)輸入端,QA ~ QH,CLK為外部時(shí)鐘輸入端,CLR為清零端。74LS164在高電平輸出時(shí),為并行數(shù)據(jù)輸出端其輸出最大電流為0.4mA;低電平輸出時(shí),其輸出最大電流為8mA,不足以驅(qū)動(dòng)數(shù)碼管或發(fā)光二極管正常工作,所以在本設(shè)計(jì)中外加數(shù)據(jù)緩沖器以增大驅(qū)動(dòng)能力。</p><p> 圖2.3 74LS164引腳圖<
20、;/p><p> 表2.2 74LS164真值表</p><p> 注 QA0、 QB0、QH0為在穩(wěn)態(tài)輸入條件建立之前QA 、QB 和QH相應(yīng)的電平;QAn 、QGn 為在最近的時(shí)鐘↑轉(zhuǎn)換前QA或QG的電平,表示移1位。</p><p> ?。?)數(shù)據(jù)緩沖器74LS244。74LS244 緩沖器常用作三態(tài)緩沖或總線驅(qū)動(dòng),+5V供點(diǎn),其高電平時(shí)輸出最大電流可達(dá)
21、15mA,低電平輸出時(shí)最大電流可達(dá)24mA,足以驅(qū)動(dòng)數(shù)碼管和LED工作。74LS244共8個(gè)輸入輸出通道,通過門控端G1和G2來選擇其通斷,其功能原理及引腳如圖2.4所示。</p><p> 圖2.4 74LS244內(nèi)部結(jié)構(gòu)及引腳圖</p><p> 從圖中可以看出,當(dāng)引腳1G為低電平時(shí),輸入通道1A~1A4與輸出通道1Y1~1Y4連通;當(dāng)引腳1G為高電平時(shí)則截止。同理引腳2G控制著
22、輸入通道2A1~2A4與輸出通道2Y1~2Y4的通斷。</p><p> 2.2.2顯示部分工作原理</p><p> 首先介紹一下雙色二極管的功能和用法。如圖1.5所示,1個(gè)雙色二極管有3個(gè)引腳,引腳1、2均為信號(hào)“+”端,引腳3為GND端(信號(hào)“—”端)。引腳電平(TTL電平)與LED顯示顏色如表1.6所示。</p><p> 表1.5 雙色二極管功能表&
23、lt;/p><p> 圖1.5 雙色二極管外觀圖</p><p> 數(shù)碼管及LED顯示電路如圖1.6所示,RC5口作為串行數(shù)據(jù)的同步時(shí)鐘端,與74LS164的數(shù)據(jù)輸入端相連;RC3口作為串行數(shù)據(jù)的同步時(shí)鐘端,與74LS164的同步時(shí)鐘輸出端均與SPI方式時(shí)端口一樣;實(shí)際應(yīng)用中,若不用SPI方式,而用第5章中提到的模擬數(shù)據(jù)串行口時(shí),可以用任何普通I/O端口代替)。兩片移位寄存器74LS164
24、的并行數(shù)據(jù)輸出端則分別與兩片數(shù)據(jù)緩沖器74LS244的輸入端相連,RD7口作為數(shù)據(jù)緩沖器74LS244的門控信號(hào)輸出端,控制74LS244的通斷。</p><p> 圖1.6 數(shù)碼管和LED顯示電路</p><p> 每4個(gè)雙色二極管和1個(gè)數(shù)碼管一組,二極管的8個(gè)信號(hào)“+”端分別與第一片74LS244的8位數(shù)據(jù)輸出端相連,數(shù)碼管的8位數(shù)據(jù)輸入端分別與第二片74LS244的8位數(shù)據(jù)輸入
25、端相連,每組二極管和數(shù)碼管的GND端都與CD4051的1個(gè)輸入通道相連,CD4051的輸出端與系統(tǒng)的“地”相連。RE0~RE1口作為地址譯碼輸出端口,用于多路開關(guān)CD4051的4路通道選擇,每一時(shí)刻只有一組共4個(gè)二極管和1個(gè)數(shù)碼管被選通,其GND端同系統(tǒng)的“地”構(gòu)成通路,其他的二極管與數(shù)碼管則不能構(gòu)成通路。</p><p> 每向74LS164傳送完兩個(gè)字節(jié)共16位數(shù)據(jù),通過RD7口使能74LS244,將數(shù)據(jù)送
26、到二極管和數(shù)碼管的輸入口,然后通過RE0~RE1口打開一條通道,則被選通的數(shù)碼管和二極管就會(huì)按照接收的數(shù)據(jù)進(jìn)行相應(yīng)的顯示。不斷地發(fā)送新數(shù)據(jù)并利用CD4051循環(huán)的掃描4個(gè)通道,則所有的二極管和數(shù)碼管 就會(huì)持續(xù)的發(fā)光顯示。</p><p> 另外由一個(gè)雙色二極管作為報(bào)警燈,RD5口與二極管的引腳1相連,RD4口與二極管的引腳2相連。</p><p> 第3節(jié) 系統(tǒng)的軟件設(shè)計(jì)</
27、p><p> 本系統(tǒng)的軟件的核心是兩個(gè)不斷循環(huán)執(zhí)行的中斷程序:TMR0中斷用于驅(qū)動(dòng)數(shù)碼管和LED顯示:TMR1中斷用于采集水位值并且將采集結(jié)果送緩沖寄存器供顯示部分讀取,同時(shí)對(duì)采集結(jié)果進(jìn)行簡(jiǎn)單的分析,判斷其是否超過水位上限或下限,若超過則點(diǎn)亮相應(yīng)的報(bào)警燈。</p><p> 整個(gè)軟件部分大體可分為初始化程序、TMR1中斷服務(wù)程序、數(shù)據(jù)轉(zhuǎn)化子程序、TIMR0中斷服務(wù)程序4個(gè)部分,以下分別加以
28、描述。</p><p><b> 初始化程序</b></p><p> 初始化程序位于主程序開始部分,主要對(duì)3個(gè)部分進(jìn)行初始化:I/0端口、TMR1和TMR0各部分初始化步驟如下描述,不再給出流程圖。</p><p> 1.I/O端口方向控制寄存器</p><p> A/D輸入端口RA0設(shè)置為輸入方式,串行時(shí)鐘及
29、串行數(shù)據(jù)輸出端口RC,采樣通道地址譯碼端口RD、顯示部分地址譯碼及報(bào)警輸出端口RE均設(shè)置為輸出方式。</p><p> 2. TIMR1初始化 </p><p> TIMR1初始化步驟如下:</p><p> ●將第一位外設(shè)中斷標(biāo)志寄存器PIR1中的中斷標(biāo)志位TMR1IF清零。</p><p> ●將第一位外設(shè)中斷屏蔽寄存器PIE1中
30、的中斷允許位TMR1IE置位。</p><p> ●通過TMR1中斷控制器I1CON設(shè)置時(shí)鐘及分頻比等</p><p> ●給TMR1計(jì)數(shù)器TMR1H、TMR1L賦初值。</p><p> ●將中斷控制寄存器INTCON中的全局中斷屏蔽位GIE置位。</p><p> ●將外設(shè)中斷屏蔽位PEIE置位。</p><p
31、> 3. TIMR0初始化 </p><p> TIMR0初始化步驟如下:</p><p> ●通過選項(xiàng)寄存器OPTION_REG設(shè)置TMR0的分頻比及時(shí)鐘。</p><p> ●將INTCON寄存器中的TMR0中斷標(biāo)志位清零并將中斷屏蔽位置位。</p><p> ●給TMR0計(jì)數(shù)器賦初值。</p><p&
32、gt; TMR1中斷服務(wù)程序</p><p> 設(shè)計(jì)系統(tǒng)的水位值刷新時(shí)間為1s,即單片機(jī)每秒鐘對(duì)采樣通道一遍A/D轉(zhuǎn)換。軟件上則設(shè)定TMR1定時(shí)器每秒產(chǎn)生一次中斷,執(zhí)行數(shù)據(jù)采樣程序,從最高水位采樣通道向下執(zhí)行,并不斷將每次采樣結(jié)果與系統(tǒng)設(shè)定的門限值比較,當(dāng)檢測(cè)到水位超過某一對(duì)電極時(shí),則退出采樣程序。接下來判斷水位是否越限,若是則點(diǎn)亮相應(yīng)的報(bào)警燈,否則使報(bào)警燈滅。然后調(diào)用數(shù)據(jù)轉(zhuǎn)換子程序,將水位采樣結(jié)果轉(zhuǎn)化為相應(yīng)
33、數(shù)碼管和LED顯示段碼值,存入顯示數(shù)據(jù)緩沖寄存器。由于PIC單片機(jī)的中斷矢量只有一個(gè),而本設(shè)計(jì)用到兩個(gè)中斷,故而在中斷服務(wù)程序入口處,需要對(duì)中斷源進(jìn)行判斷,這是通過判斷相應(yīng)的中斷標(biāo)志寄存器倆實(shí)現(xiàn)的。</p><p> 設(shè)置TMR1定時(shí)器分頻比為1:8,采用內(nèi)部時(shí)鐘源,系統(tǒng)采用2M晶振。那么TMR1的時(shí)鐘脈沖周期為2 s,由于分頻比為1:8,則每16s計(jì)數(shù)一次,1s需要計(jì)數(shù)62500次,即從計(jì)時(shí)開始到62500個(gè)
34、計(jì)數(shù)周期后,TMR1寄存器達(dá)到上限65536并產(chǎn)生溢出,所以TMR1寄存器初始值為65536-62500=3036,即0BDCH。TMR1中斷服務(wù)程序流程圖如圖3.7所示。</p><p> 圖3.7 TMR1中斷服務(wù)程序流程圖</p><p><b> 數(shù)據(jù)轉(zhuǎn)換子程序</b></p><p> 在進(jìn)行水位檢測(cè)后,會(huì)產(chǎn)生一個(gè)水位的高度值
35、(設(shè)為HEIGHT),但它并不是一個(gè)真實(shí)的水位值,只是一個(gè)標(biāo)志水位高度的通道號(hào),其值為0~15中的某個(gè)數(shù),分別表示沒有水以及15種水位高度共16種情況。故而需要將其轉(zhuǎn)化為L(zhǎng)ED和數(shù)碼管的實(shí)際顯示段碼值。表3.6列出了高度值HEIGHT、LED段碼值LED1~LED4和數(shù)碼管顯示數(shù)據(jù)SEG1~SEG4d的對(duì)應(yīng)關(guān)系,表3.7則為數(shù)碼管的七段碼值與顯示符號(hào)對(duì)應(yīng)關(guān)系。</p><p> 表3.6 高度值與顯示段碼對(duì)照
36、表</p><p> 注 空白處表示不顯示任何數(shù)據(jù)。</p><p> 表3.7 數(shù)碼管七段碼</p><p> 有3種方法對(duì)LED和數(shù)碼管顯示緩沖寄存器寫入數(shù)據(jù):第一鐘是采用查表方法,將各個(gè)高度值對(duì)應(yīng)的數(shù)據(jù)預(yù)先存入一塊緩沖區(qū)內(nèi),通過對(duì)指令指針賦值來訪問特定數(shù)據(jù)單元,返回轉(zhuǎn)換后的數(shù)值;第二種是采用逐個(gè)比較的方法,將采樣結(jié)果與0~15的數(shù)逐個(gè)比較,若相等則向緩
37、沖區(qū)賦相應(yīng)的值;第三種方法是根據(jù)表的特征來賦值,例如當(dāng)HEIGHT≥8時(shí),LED1的值為0FFH,SEG2沒有顯示。</p><p> 很顯然,第二種、三種方法比較費(fèi)時(shí)間,第一種方法雖然程序代碼量較大,但執(zhí)行起來速度快,本設(shè)計(jì)采用第一種方法,具體可參見查表子程序的程序代碼。</p><p> TMR0中斷服務(wù)程序</p><p> TMR0中斷用于數(shù)碼管及LE
38、D顯示,每次中斷將兩個(gè)字節(jié)的數(shù)據(jù)串行發(fā)送至移位寄存器,后經(jīng)74LS244驅(qū)動(dòng)1組LED和1個(gè)數(shù)碼管發(fā)光。由于每個(gè)LED或數(shù)碼管兩次被選通的時(shí)間最大不能超過100ms(利用人的視覺暫留現(xiàn)象,否則就會(huì)出現(xiàn)閃爍),加之TMR1中斷可能占用的時(shí)間,所以每次TMR0中斷溢出時(shí)間不能太長(zhǎng);另一方面,TMR0中斷溢出時(shí)間又不能太短,必須保證串行發(fā)送完畢。綜合這兩個(gè)方面因素,將TMR0溢出時(shí)間設(shè)為10ms。</p><p>
39、TMR1寄存器初始值計(jì)算方法與TMR1初始值計(jì)算方法類似,只是分頻比設(shè)為1:128,計(jì)算結(jié)果為0D9H。</p><p> 圖3.8所示為TMR0中斷服務(wù)程序流程圖。</p><p> 圖3.8 TMR0中斷服務(wù)程序流程圖</p><p><b> 程序清單及注釋</b></p><p> ??;*********
40、*************************************************************************</p><p> ?。弧端粰z測(cè)儀》 程序清單</p><p> ?。怀绦蛭募麨椋?Leval_TEST.ASM</p><p> ?。?***************************************
41、******************************************</p><p> LIST P=16F877</p><p> INCLUDE P16F877.INC</p><p> STATUS EQU 03H ;定義狀態(tài)寄存器地址</p>&
42、lt;p> PCL EQU 02H ;定義程序計(jì)數(shù)器低8位指針地址</p><p> PORTA EQU 05H ;定義端口RA的數(shù)據(jù)寄存器地址</p><p> PORTC EQU 07H ;定義端口RC的數(shù)據(jù)寄存器地
43、址</p><p> PORTD EQU 08H ;定義端口RC的數(shù)據(jù)寄存器地址</p><p> PORTE EQU 09H ;定義端口RC的數(shù)據(jù)寄存器地址</p><p> TRISA EQU 85H
44、;定義端口RA的方向控制寄存器地址</p><p> TRISD EQU 87H ;定義端口RC的方向控制寄存器地址</p><p> TRISE EQU 88H ;定義端口RC的方向控制寄存器地址</p><p> INTCON EQU
45、 89H ;定義中斷控制寄存器地址</p><p> T1CON EQU 10H ;定義TMR1中斷控制寄存器</p><p> TMR0 EQU 01H ;定義TMR0寄存器地址</p><p> PIR1
46、 EQU 0CH ;定義第一外設(shè)中斷標(biāo)志寄存器地址</p><p> PIE1 EQU 8CH ;定義第一外設(shè)中斷屏蔽寄存器地址</p><p> ADRESH EQU 1EH ;定義ADC結(jié)果寄存器高子節(jié)地址</p><p>
47、 ADCON0 EQU 1FH ;定義ADC控制寄存器0地址</p><p> ADCON1 EQU 9FH ;定義ADC控制寄存器1地址</p><p> T1CON EQU 10H ;定義TMR1控制寄存器地址</p>
48、<p> TMR1L EQU 0EH ;定義TMR1低字節(jié)地址</p><p> TMR1H EQU 0FH ;定義TMR1高字節(jié)地址</p><p> SSPBUF EQU 13H ;定義SPI收發(fā)緩沖寄存器地址<
49、;/p><p> SSPCON EQU 14H ;定義同步控制串口寄存器地址</p><p> SSPSR EQU 94H ;定義同步串口狀態(tài)寄存器地址</p><p> ??;======================================變量======
50、==================================</p><p> TEMP EQU 20H ;定義暫存寄存器</p><p> HEIGHT EQU 22H ;定義采樣結(jié)果寄存器,用以標(biāo)志水位高度</p><p> SELECT_COU
51、NT EQU 23H ;定義翻轉(zhuǎn)計(jì)數(shù)器,用以標(biāo)志選通的顯示通道</p><p> AD_COUNT EQU 24H ;定義翻轉(zhuǎn)計(jì)數(shù)器,用以標(biāo)志選通的采樣通道</p><p> TX_LED EQU 25H ;LED數(shù)據(jù)串行發(fā)送暫存寄存器</p>
52、<p> TX_DATA EQU 6H ;數(shù)碼管數(shù)據(jù)串行發(fā)送暫寄存器</p><p> LED1 EQU 29H ;發(fā)光二極管顯示數(shù)據(jù)寄存器1</p><p> LED2 EQU 30H ;發(fā)光二極管顯示數(shù)據(jù)寄存器2&l
53、t;/p><p> LED3 EQU 31H ;發(fā)光二極管顯示數(shù)據(jù)寄存器3</p><p> LED4 EQU 32H ;發(fā)光二極管顯示數(shù)據(jù)寄存器4</p><p> SEG1 EQU 33H ;數(shù)碼管顯
54、示數(shù)據(jù)寄存器1</p><p> SEG2 EQU 34H ;數(shù)碼管顯示數(shù)據(jù)寄存器2</p><p> SEG3 EQU 35H ;數(shù)碼管顯示數(shù)據(jù)寄存器3</p><p> SEG4 EQU 36H
55、;數(shù)碼管顯示數(shù)據(jù)寄存器4</p><p> ?。?=====================================常量========================================</p><p> TMR1LB EQU 0DCH ;定義TMR1低字節(jié)寄存器初始值(定時(shí)1s)</p><p&g
56、t; TMR1HB EQU 0BH ;定義TMR1高字節(jié)寄存器初始值</p><p> TMR0B EQU 0D9H ;定義TMR0寄存器初始值(定時(shí)10ms)</p><p> GATE_VALUE EQU 07FH ;定義采樣結(jié)果門檻值,用以區(qū)
57、分水和空氣阻值</p><p> ??;********************************復(fù)位矢量和中斷矢量********************************</p><p> ORG 000H</p><p> NOP </p><p> GOTO M
58、AIN </p><p> ORG 004H</p><p> ?。?********************************中斷服務(wù)程序*************************************</p><p> BTFSC PIR1,0 ;檢測(cè)是否是TMR1中斷</p><p&
59、gt; GOTO TMR1_INT ;是,則轉(zhuǎn)TMR1中斷</p><p> BTFSC INTCON,2 ;否,檢測(cè)是否是TMR0中斷 </p><p> GOTO TMR0_INT ;是,則轉(zhuǎn)TMR0中斷</p><p> REFIE
60、 ;否,中斷返回</p><p> ??;===============================TMR1中斷服務(wù)程序==================================</p><p> TMR1_INT BCF PIR1,0 ;清TMR1中斷標(biāo)志位 </p><p> BCF
61、STATUS,5 </p><p> MOVLW 0FH</p><p> MOVWF AD_COUNT ;通道數(shù)送翻轉(zhuǎn)計(jì)數(shù)器</p><p> TEST_LOOP DECF AD_COUNT,0 </p><p> IORLW OFOH ;屏
62、蔽高4位</p><p> ANDWF PORTD,1 ;輸出到CD4051通道譯碼端,以選通某一采樣通道</p><p> BSF STATUS,5 </p><p> MOVLW 41H </p><p> MOVWF ADCON0 ;
63、選擇系統(tǒng)時(shí)鐘8分頻,通道0,關(guān)閉AD啟位</p><p> NOP ;等待采樣值穩(wěn)定</p><p> NOP ;等待采樣值穩(wěn)定</p><p> NOP ;等待采樣值穩(wěn)定</p><p> BSF
64、ADCON0,2 ;啟動(dòng)AD采樣</p><p> AD_LOOP NOP </p><p> BTFSC ADCON0,2 ;檢測(cè)采樣是否結(jié)束</p><p> GOTO AD_LOOP ;否,繼續(xù)檢測(cè)</p><p> MOVF ADRESH,0
65、 ;是,讀取采樣結(jié)果高8位</p><p> MOVWF HEIGHT ;將當(dāng)前通道數(shù)送HEIGHT</p><p> DECFSZ AD_COUNT,1 ;當(dāng)前通道數(shù)減1后是否為0</p><p> GOTO TMR1_NEXT2 ;退出采樣循環(huán)</p><p> TMR1_NE
66、XT1 MOVF TEMP</p><p> SUBWF GATE_VALUE,0 ;門限值減去采樣結(jié)果</p><p> BTFSC STATUS,0 ;檢測(cè)是否產(chǎn)生借位</p><p> GOTO TEST_LOOP ;否,繼續(xù)進(jìn)行下一個(gè)通道采樣</p><p> T
67、MR1_NEXT2 BCF PORTD,4 ;是,熄燈下限報(bào)警燈</p><p> BCF PORTD,5 ;熄燈下限報(bào)警燈</p><p> BCF STATUS,0 ;清借位標(biāo)志位</p><p> MOVLW 15H </p><p>
68、 SUBWF HEIGHT ;采樣結(jié)果與上限值比較</p><p> BTFSS STATUS,0 ;檢測(cè)借位標(biāo)志位是否為1</p><p> GOTO TMR1_NEXT3 ;否,轉(zhuǎn)下限檢測(cè)</p><p> BSF PORTD,5 ;是,點(diǎn)亮下限報(bào)警燈</p>
69、<p> TMR1_NEXT3 BCF STATUS,2 ;清零標(biāo)志位是否為1</p><p> MOVLW 00H </p><p> SUBWF HEIGHT ;采樣結(jié)果與下限比較</p><p> BTFSS STATUS,2 ;檢測(cè)零標(biāo)志位是否為1&l
70、t;/p><p> GOTO TMR1_NEXT4 ;否,轉(zhuǎn)采樣結(jié)果轉(zhuǎn)換</p><p> BFS PORTD,4 ;是,點(diǎn)亮下限報(bào)警燈</p><p> TMR1_NEXT4 CALL ADRES_CON ;調(diào)轉(zhuǎn)采樣結(jié)果轉(zhuǎn)換子程序</p><p> MOVLW
71、04H </p><p> MOVWF SELECT_COUNT ;將顯示通道選擇翻轉(zhuǎn)計(jì)數(shù)器賦初值</p><p> MOVLW TMR1LB </p><p> MOVWF TMR1L ;寫入TMR1寄存器低字節(jié)數(shù)</p><p>
72、MOVLF TMR1HB </p><p> MOVWF TMR1H ;寫入TMR1寄存器高字節(jié)數(shù)</p><p> RETFIE ;中斷返回</p><p> ?。?=============================TMR0中斷服務(wù)程序============
73、=======================</p><p> TMRO_INT BCF INTCON,2 ;清TMR0中斷標(biāo)志位</p><p> BCF STATUS,0</p><p> DECF SELECT_COUNT,0</p><p> MOVWF TEMP
74、 ;將翻轉(zhuǎn)計(jì)數(shù)器內(nèi)容減1送TEMP寄存器</p><p> RLF TEMP,0 ;TEMP寄存器內(nèi)容乘以2,作為查詢顯示數(shù)據(jù)</p><p><b> ??;的偏移地址量</b></p><p> ADDWF PCL,1 ;將地址偏移量與程序計(jì)數(shù)器值疊加</p&g
75、t;<p> MOVF LED1 </p><p> GOTO TMR0_NEXT1</p><p> MOVF LED2</p><p> GOTO TMR0_NEXT1</p><p> MOVF LED3</p><p&g
76、t; GOTO TMR0_NEXT1</p><p> MOVF LED4</p><p> TMR0_NEXT1 MOVWF TX_LED ;將本次顯示的LED數(shù)據(jù)送LED發(fā)送寄存器</p><p> RLF TEMP ;TEMP寄存器內(nèi)容乘以2,作為查詢顯示數(shù)據(jù)<
77、/p><p><b> ?。坏牡刂菲屏?lt;/b></p><p> ADDWF PCL,1 ;將地址偏移量與程序計(jì)數(shù)器值疊加</p><p> MOVF SEG1 </p><p> GOTO TMR0_NEXT2</p><p
78、> MOVF SEG2</p><p> GOTO TMR0_NEXT2</p><p> MOVF SEG3</p><p> GOTO TMR0_NEXT2</p><p> MOVF SEG4</p><p> TMR0_NEXT2 MOVWF
79、 TX_DATA ;將本次顯示的數(shù)碼管數(shù)據(jù)送數(shù)碼管發(fā)送</p><p><b> ;寄存器</b></p><p> BCF PORTD,7 ;清74LS244使能位,暫時(shí)禁止數(shù)據(jù)輸出</p><p><b> ;顯示</b></p><
80、p> BSF STATUS,5 </p><p> CLRF SSPSTAT ;SPI方式清SMP位,CKE位和BF位,在</p><p> ;脈沖上沿移位輸出數(shù)據(jù)跳</p><p> MOVLW 30H </p><p> MOVWF
81、SSPCON ;允許串口工作,時(shí)鐘頻率為系統(tǒng)時(shí)鐘1/4</p><p> MOVF TX_LED,0 ;將第一個(gè)待發(fā)送的字節(jié)送緩沖寄存器</p><p> CALL SPI_TX ;調(diào)發(fā)送完成查詢子程序</p><p> DECF SELECT_COUNT,0 ;
82、通道寄存器減1</p><p> MOVWF PORTE ;選通待顯示的通道</p><p> BSF PORTD,7 ;置74LS244使能位,允許數(shù)據(jù)輸出顯示</p><p> DECFSZ SELECT_COUNT,1 ;通道寄存器減1,并檢測(cè)是否為0</p>&l
83、t;p> GOTO TMR0_NEXT3 ;否,轉(zhuǎn)TMR0_NEXT3</p><p> MOVLW 04H ;是,重新對(duì)通道寄存器賦初值</p><p> MOVWF SELECT_COUNT </p><p> TMR0_NEXT3 MOVLW
84、TMR0B</p><p> MOVWF TMR0 ;TMR1寄存器賦初值</p><p> RETFIE ;中斷返回</p><p> ;**************************************主程序******************************
85、********</p><p> MAIN BSF STATUS,5</p><p> MOVLW 01H</p><p> MOVWF TRISA ;置RA0口為輸入方式</p><p> MOVLW 00H</p><p>
86、; MOVWF TRISC ;置RC口為輸出方式</p><p> MOVWF TRISC ;置RD口為輸出方式</p><p> MOVWF TRISC ;置RE口為輸出方式</p><p> ;===========================
87、=========TMR0初始化===================================</p><p> MOVLW 07H</p><p> MOVWF OPTION_REG ;分頻器給TMR0,分頻比1:128,選用</p><p><b> ;系統(tǒng)時(shí)鐘</b></p>&l
88、t;p> BCF STATUS,5</p><p> MOVLW 0E0H</p><p> MOVWF INTCON ;開全局中斷,允許響應(yīng)TMR0及第二梯</p><p><b> ?。魂?duì)中斷</b></p><p> ?。徽?qǐng)求(TMR1中斷),TM0中斷
89、標(biāo)志清零</p><p> MOVLW TMR0B</p><p> MOVWF TMR0 ;TMR0寄存器賦初值</p><p> ;====================================TMR1初始化==================================</p>&l
90、t;p> BSF STATUS,5</p><p> MOVLW 01H </p><p> MOVWF PIE1 ;允許TMR1中斷</p><p> BCF STATUS,5</p><p> MOVLW 00H</p><p>
91、 MOVWF PIR1 ;TMR1中斷標(biāo)志位清零</p><p> MOVLW 30H </p><p> MOVWF T1CON ;分頻比為1:8,選用內(nèi)部時(shí)鐘源</p><p> MOVLW TMR1LB</p>
92、<p> MOVWF TMR1L ;TMR1寄存器低字節(jié)賦初值</p><p> BSF T1CON,0 ;啟動(dòng)TMR1定時(shí)</p><p> MOVLW 04H </p><p> MOVWF SELECT_COUNT
93、 ;顯示通道寄存器賦初值</p><p> MOVWF MAIN_LOOP</p><p> ??;******************************SPI發(fā)送完成查詢子程********************************</p><p> SPI_TX MOVWF SSPBUF</p><p&g
94、t; BCF STATUS,6</p><p> SPI_LOOP BSF STATUS,5</p><p> BTFSS SSPSTAT,BF ;查詢發(fā)送是否完成</p><p> GOTO SPI_LOOP ;否,繼續(xù)查詢</p><p>
95、; BCF STATUS,5 ;是,選擇BANK0</p><p> MOVF SSPBUF ;將緩沖器的數(shù)據(jù)讀出,不管數(shù)據(jù)是否</p><p><b> ?。挥杏?lt;/b></p><p> RETURN ;子程序返回
96、</p><p> ??;********************************數(shù)據(jù)轉(zhuǎn)換子程序************************************</p><p><b> ADRES_CON</b></p><p> ;==================================LED1賦初值=====
97、================================</p><p> MOVF HEIGHT,0</p><p> CALL LED1_CON</p><p> MOVWF LED1</p><p> ??;==================================LED2賦初值=======
98、==============================</p><p> MOVF HEIGHT,0</p><p> CALL LED2_CON</p><p> MOVWF LED2</p><p> ??;==================================LED3賦初值=========
99、============================</p><p> MOVF HEIGHT,0</p><p> CALL LED4_CON</p><p> MOVWF LED4</p><p> ?。?==================================LED4賦初值==========
100、===========================</p><p> MOVF HEIGHT,0</p><p> CALL LED4_CON</p><p> MOVWF LED4</p><p> ?。?=================================SEG1賦初值============
101、==========================</p><p> MOVF HEIGHT,0</p><p> CALL SEG1_CON</p><p> MOVWF SEG1</p><p> ??;=================================SEG2賦初值==============
102、========================</p><p> MOVF HEIGHT,0</p><p> CALL SEG2_CON</p><p> MOVWF SEG2</p><p> ; =================================SEG3賦初值===============
103、=======================</p><p> MOVF HEIGHT,0</p><p> CALL SEG3_CON</p><p> MOVWF SEG3</p><p> ??;==================================SEG4賦初值================
104、====================</p><p> MOVF HEIGHT,0</p><p> CALL SEG4_CON</p><p> MOVWF SEG4</p><p><b> RETURN</b></p><p> ?。?===========
105、=======================LED1表子程序===================================</p><p> LED1_CON ADDWF PCL,1</p><p> RETLW 0F0H</p><p> RETLW 0E1H </p><p> RETL
106、W 0C3H</p><p> RETLW 87H</p><p> RETLW 0FH</p><p> RETLW 0FH</p><p> RETLW 0FH</p><p> RETLW 0FH</p><p> RETLW 0FH&
107、lt;/p><p> RETLW 0FH</p><p> RETLW 0FH</p><p> RETLW 0FH</p><p> RETLW 0FH</p><p> RETLW 0FH</p><p> RETLW 0FH</p>
108、<p> RETLW 0FH</p><p> ;=================================LED2查表子程序==================================</p><p> LED2_CON ADDWF PCL,1</p><p> RETLW OF0H</p
109、><p> RETLW 0F0H</p><p> RETLW OF0H</p><p> RETLW OF0H</p><p> RETLW OF0H </p><p> RETLW 0E1H</p><p> RETLW 0C3H</p>
110、;<p> RETLW 87H</p><p> RETLW 0FH</p><p> RETLW 0FH </p><p> RETLW 0FH </p><p> RETLW 0FH </p><p> RETLW 0FH </p><
111、;p> RETLW 0FH </p><p> RETLW 0FH </p><p> RETLW 0FH</p><p> ;===================================LED3查表子程序=================================</p><p> LED3
112、_CON ADDWF PCL,1</p><p> RETLW 0F0H</p><p> RETLW 0F0H</p><p> RETLW 0F0H</p><p> RETLW 0F0H</p><p> RETLW 0
113、F0H</p><p> RETLW 0F0H</p><p> RETLW 0F0H</p><p> RETLW 0F0H</p><p> RETLW 0F0H</p><p> RETLW 0F0H</p><p>
114、 RETLW 0E1H</p><p> RETLW 0C3H</p><p> RETLW 87H</p><p> RETLW 0FH</p><p> RETLW 0FH</p><p> RETLW 0FH</p>
115、<p> RETLW 0FH</p><p> ??; =================================LED4查表子程序==================================</p><p> LED4_CON ADDWF PCL,1</p><p> RETLW 0F0H
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 酒精濃度檢測(cè)儀畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)-環(huán)境噪聲檢測(cè)儀
- 畢業(yè)設(shè)計(jì)(論文)-酒精濃度檢測(cè)儀設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---家庭環(huán)境檢測(cè)儀設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)--電動(dòng)機(jī)轉(zhuǎn)速檢測(cè)儀
- 畢業(yè)設(shè)計(jì)----溫度檢測(cè)儀的設(shè)計(jì)與制作
- 基于單片機(jī)的水位檢測(cè)儀系統(tǒng)的設(shè)計(jì)課程設(shè)計(jì)
- 車燈照度和車燈燈泡電流檢測(cè)儀畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)--基于zigbee的空氣質(zhì)量檢測(cè)儀設(shè)計(jì)
- 基于pt100的溫度檢測(cè)儀的設(shè)計(jì)【畢業(yè)設(shè)計(jì)】
- 基于pt100的溫度檢測(cè)儀的設(shè)計(jì)【畢業(yè)設(shè)計(jì)】
- 單片機(jī)的溫濕度檢測(cè)儀畢業(yè)設(shè)計(jì)
- 甲醛檢測(cè)儀設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)--便攜式可燃?xì)怏w檢測(cè)儀
- 便攜式光照度檢測(cè)儀的設(shè)計(jì)【畢業(yè)設(shè)計(jì)】
- 酒精濃度檢測(cè)儀設(shè)計(jì)畢業(yè)論文
- 酒精濃度檢測(cè)儀設(shè)計(jì)【畢業(yè)論文】
- 畢業(yè)設(shè)計(jì)--超聲檢測(cè)儀器設(shè)計(jì)
- 基于單片機(jī)的溫濕度檢測(cè)儀【畢業(yè)設(shè)計(jì)】
- 畢業(yè)設(shè)計(jì)論文 單片機(jī)pm2.5濃度檢測(cè)儀設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論