基于單片機(jī)的超聲波測(cè)距儀設(shè)計(jì)1_第1頁(yè)
基于單片機(jī)的超聲波測(cè)距儀設(shè)計(jì)1_第2頁(yè)
基于單片機(jī)的超聲波測(cè)距儀設(shè)計(jì)1_第3頁(yè)
基于單片機(jī)的超聲波測(cè)距儀設(shè)計(jì)1_第4頁(yè)
基于單片機(jī)的超聲波測(cè)距儀設(shè)計(jì)1_第5頁(yè)
已閱讀5頁(yè),還剩41頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

摘要在日常生產(chǎn)生活中,很多場(chǎng)合如汽車(chē)倒車(chē)、機(jī)器人避障、工業(yè)測(cè)井、水庫(kù)液位測(cè)量等需要自動(dòng)進(jìn)行非接觸測(cè)距。超聲波是指頻率大于20kHz的在彈性介質(zhì)中產(chǎn)生的機(jī)械震蕩波,其具有指向性強(qiáng)、能量消耗緩慢、傳播距離相對(duì)較遠(yuǎn)等特點(diǎn),因此常被用于非接觸測(cè)距。由于超聲波對(duì)光線(xiàn)、色彩和電磁場(chǎng)不敏感,因此超聲波測(cè)距對(duì)環(huán)境有較好的適應(yīng)能力,此外超聲波測(cè)量在實(shí)時(shí)、精度、價(jià)格也能得到很好的折衷。為此,嘗試以單片機(jī)AT89S51為核心,利用CXA20106A超聲波芯片設(shè)計(jì)一款體積較小、價(jià)格低廉、精度較高、具有溫度補(bǔ)償、實(shí)時(shí)LCD顯示和報(bào)警的超聲波測(cè)距儀。關(guān)鍵詞:?jiǎn)纹瑱C(jī);超聲波;C語(yǔ)言UltrasonicrangingsystemAbstractAbstractIndailylife,manyoccasionssuchascarbackingup,robotobstacleavoidance,industriallogging,reservoirlevelmeasurementandneedtobeautomaticnocontactranging.Ultrasonicistopointtomorethan20kHzfrequencyintheelasticmediumproducedinmechanicalshockwaves,ithasthedirectionalityofstrong,energyconsumptionisrelativelyslow,thetransmissiondistancefarandothercharacteristics,soisoftenusedtonon-contactranging.Duetothelight,colourandultrasonicnotsensitiveelectromagneticfield,sotheultrasonicrangingtoenvironmenthasgoodadaptability,inadditiontheultrasonicmeasureinrealtime,theprecisionandthepricetoalsocangetagoodcompromise.Therefore,thispapertrytomonolithicintegratedcircuitAT89S52asthecore,useCXA20106Aultrasoundsensordesignasmallsize,lowcost,highaccuracy,temperaturecompensation,withreal-timeLCDdisplayandalarmofultrasonicranger.KeyWords:LCD;Single-chipmicrocomputer;UltrasonicrangingsystemAbstract;CLanguage目錄摘要 IAbstract II引言 11超聲波簡(jiǎn)介22系統(tǒng)功能設(shè)計(jì)32.1超聲波測(cè)距系統(tǒng)的基本原理32.2AT89S51芯片超聲波簡(jiǎn)介42.3AT89S51芯片的引腳結(jié)構(gòu)43硬件設(shè)計(jì)53.1硬件電路主控53.2復(fù)位電路53.3顯示電路63.4驅(qū)動(dòng)電路73.5接口電路83.6時(shí)鐘模塊84軟件設(shè)計(jì)114.1程序流程設(shè)計(jì)114.2延時(shí)程序144.3中斷系統(tǒng)144.4完整程序設(shè)計(jì)165系統(tǒng)仿真、制作、調(diào)試325.1系統(tǒng)總體仿真325.2硬件電路制作34結(jié)論 35參考文獻(xiàn) 36致謝 37引言隨著科技的迅猛發(fā)展越來(lái)越多科技成果被廣泛的運(yùn)用到人們的日常生活當(dāng)中,給我們的生活帶來(lái)了諸多方便。本設(shè)計(jì)就是本著這個(gè)宗旨出發(fā),利用超聲波的特性來(lái)為我們服務(wù)。由于超聲波指向性強(qiáng),因而常于距離的測(cè)量。超聲波發(fā)射器向某一方向發(fā)射超聲波,在發(fā)射時(shí)刻的同時(shí)開(kāi)始計(jì)時(shí),超聲波在空氣中傳播,途中碰到障礙物就立即返回來(lái),超聲波接收器收到反射波就立即停止計(jì)時(shí)。超聲波在空氣中的傳播速度為v,根據(jù)計(jì)時(shí)器記錄的時(shí)間t,就可以計(jì)算出發(fā)射點(diǎn)距障礙物的距離s,即:s=vt/2。這就是所謂的時(shí)間差測(cè)距法。利用超聲波檢測(cè)往往比較迅速、方便、計(jì)算簡(jiǎn)單、易于做到實(shí)時(shí)控制,并且在測(cè)量精度方面能達(dá)到工業(yè)實(shí)用的要求,隨著科學(xué)技術(shù)的快速發(fā)展,超聲波將的應(yīng)用將越來(lái)越廣。但就目前技術(shù)水平來(lái)說(shuō),人們可以具體利用的超聲波技術(shù)還十分有限,因此,這是一個(gè)正在蓬勃發(fā)展而又有無(wú)限前景的技術(shù)及產(chǎn)業(yè)領(lǐng)域。超聲波測(cè)距技術(shù)在社會(huì)生活中已有廣泛的應(yīng)用如汽車(chē)倒車(chē)?yán)走_(dá)等,它們測(cè)距精度一般較低。目前對(duì)超聲波高精度測(cè)距系統(tǒng)的需求越來(lái)越大。展望未來(lái),超聲波作為一種新型的非常重要有用的工具在各方面都將有很大的發(fā)展空間,它將朝著更加高定位高精度的方向發(fā)展,以滿(mǎn)足日益發(fā)展的社會(huì)需求。未來(lái)的超聲波測(cè)距技術(shù)將朝著更高精度,更大應(yīng)用范圍,更穩(wěn)定方向發(fā)展,死角問(wèn)題也能得以解決。1超聲波簡(jiǎn)介由于超聲波所具有的能量很大,就有可能使物質(zhì)分子產(chǎn)生顯著的聲壓作用、例如當(dāng)水中通過(guò)一般強(qiáng)度的超聲波時(shí)超聲波流量計(jì)的基本原理及類(lèi)型超聲波在流動(dòng)的流體中傳播時(shí)就載上流體流速的信息。因此通過(guò)接收到的超聲波就可以檢測(cè)出流體的流速,從而換算成流量。根據(jù)檢測(cè)的方式,可分為傳播速度差法、多普勒法、波束偏移法、噪聲法及相關(guān)法等不同類(lèi)型的超聲波流量計(jì)。起聲波流量計(jì)是近十幾年來(lái)隨著集成電路技術(shù)迅速發(fā)展才開(kāi)始應(yīng)用的一種非接觸式儀表,適于測(cè)量不易接觸和觀(guān)察的流體以及大管徑流量。它與水位計(jì)聯(lián)動(dòng)可進(jìn)行敞開(kāi)水流的流量測(cè)量。使用超聲波流量比不用在流體中安裝測(cè)量元件故不會(huì)改變流體的流動(dòng)狀態(tài),不產(chǎn)生附加阻力,儀表的安裝及檢修均可不影響生產(chǎn)管線(xiàn)運(yùn)行因而是一種理想的節(jié)能型流量計(jì)。眾所周知,目前的工業(yè)流量測(cè)量普遍存在著大管徑、大流量測(cè)量困難的問(wèn)題,這是因?yàn)橐话懔髁坑?jì)隨著測(cè)量管徑的增大會(huì)帶來(lái)制造和運(yùn)輸上的困難,造價(jià)提高、能損加大、安裝不僅這些缺點(diǎn),超聲波流量計(jì)均可避免。因?yàn)楦黝?lèi)超聲波流量計(jì)均可管外安裝、非接觸測(cè)流,儀表造價(jià)基本上與被測(cè)管道口徑大小無(wú)關(guān),而其它類(lèi)型的流量計(jì)隨著口徑增加,造價(jià)大幅度增加,故口徑越大超聲波流量計(jì)比相同功能,其它類(lèi)型流量計(jì)的功能價(jià)格比越優(yōu)越。被認(rèn)為是較好的大管流量測(cè)量?jī)x表,多普勒法超聲波流量計(jì)可測(cè)雙相介質(zhì)的流量,故可用于下水道及排污水等臟污流的測(cè)量。在發(fā)電廠(chǎng)中,用便攜式超聲波流量計(jì)測(cè)量水輪機(jī)進(jìn)水量、汽輪機(jī)循環(huán)水量等大管徑流量,比過(guò)去的皮脫管流速計(jì)方便得多。超聲被流量汁也可用于氣體測(cè)量。管徑的適用范圍從2cm到5m,從幾米寬的明渠、暗渠到500m寬的河流都可適用。另外,超聲測(cè)量?jī)x表的流量測(cè)量準(zhǔn)確度幾乎不受被測(cè)流體溫度、壓力、粘度、密度等參數(shù)的影響,又可制成非接觸及便攜式測(cè)量?jī)x表,故可解決其它類(lèi)型儀表所難以測(cè)量的強(qiáng)腐蝕性、非導(dǎo)電性、放射性及易燃易爆介質(zhì)的流量測(cè)量問(wèn)題。超聲波具有較好的指向性頻率越高,指向性越強(qiáng)。這在諸如探傷和水下聲通訊等應(yīng)用場(chǎng)合是主要的考慮因素。頻率高時(shí),相應(yīng)地波長(zhǎng)將變短,因而波長(zhǎng)可與傳播超聲波的試樣材料的尺寸相比擬,甚至波長(zhǎng)可遠(yuǎn)小于試樣材料的尺寸.這在厚度尺寸很小的測(cè)量應(yīng)用中以及在高分辨率的探傷應(yīng)用中是非常重要的。超聲波用起來(lái)很安靜,人們聽(tīng)不到它。這一點(diǎn)在高強(qiáng)度工作場(chǎng)合尤為重要。這些高強(qiáng)度的工作用可聞?lì)l率的聲波來(lái)完成時(shí)往往更有效,然而遺憾的是,可聞聲波工作時(shí)所產(chǎn)生的噪聲令人難以忍受,有時(shí)甚至是對(duì)人體有害的。2系統(tǒng)功能設(shè)計(jì)2.1超聲波測(cè)距系統(tǒng)的基本原理本系統(tǒng)包括以下幾部分:以單片機(jī)AT89S51為核心,周?chē)娐钒@示電路、超聲波發(fā)射電路、超聲波檢測(cè)接收電路、掃描驅(qū)動(dòng)等。AT89S51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲(chǔ)器的低電壓,高性能CMOS8位微處理器。采用AT89S51來(lái)實(shí)現(xiàn)對(duì)CX20106A紅外接收芯片和TCT40-10系列超聲波轉(zhuǎn)換模塊的控制。單片機(jī)通過(guò)P1.0引腳經(jīng)反相器來(lái)控制超聲波的發(fā)送,然后單片機(jī)不停的檢測(cè)INT0引腳,當(dāng)INT0引腳的電平由高電平變?yōu)榈碗娖綍r(shí)就認(rèn)為超聲波已經(jīng)返回。計(jì)數(shù)器所計(jì)的數(shù)據(jù)就是超聲波所經(jīng)歷的時(shí)間,通過(guò)換算就可以得到傳感器與障礙物之間的距離。AT89S51超聲波接收AT89S51超聲波接收超聲波發(fā)送LED顯示掃描驅(qū)動(dòng)圖2.12.2AT89S51芯片超聲波簡(jiǎn)介AT89S51控制超聲波信號(hào)的發(fā)送和接收,串行數(shù)據(jù)發(fā)送,及溫度校正采樣頻率的輸入,并通過(guò)運(yùn)算轉(zhuǎn)換成溫度數(shù)據(jù),校正不同溫度下,距離誤差后,在LED上顯示所測(cè)距的離厘米數(shù)據(jù)并和已輸入的預(yù)置數(shù)進(jìn)行比較,如達(dá)到預(yù)置值則進(jìn)行開(kāi)或關(guān)的開(kāi)關(guān)量信號(hào)輸出.LED顯示為動(dòng)態(tài)循環(huán)顯示,共陽(yáng)極接法.DS18B20在本電路中取得外界溫度值,以利于AT89S51的運(yùn)算并校正不同溫度下測(cè)距的回波數(shù)值以及在LED上顯示實(shí)時(shí)環(huán)境的溫度值.接收電路接收物體反射超聲波回波信號(hào),該芯片內(nèi)部包括了前置放大,限幅放大,整形,輸出數(shù)據(jù)信號(hào)以便MCU檢測(cè),判斷回波的數(shù)據(jù)正確與否及時(shí)差,并計(jì)算出測(cè)距的距離數(shù)值.該板接收可預(yù)置超聲波控制器,發(fā)送的1200BIT串行數(shù)據(jù)信號(hào),直接用導(dǎo)線(xiàn)和超聲波控制器串口連接時(shí),可傳送幾十米,如通過(guò)485串口發(fā)送可傳送2千米以上。2.3AT89S51芯片的引腳結(jié)構(gòu)本次設(shè)計(jì)采用了常見(jiàn)的AT89S51單片機(jī)為核心處理器。AT89S51是一個(gè)低功耗,高性能CMOS8位單片機(jī),器件采用ATMEL公司的高密度、非易失性存儲(chǔ)技術(shù)制造,兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng)及80S51引腳結(jié)構(gòu),AT89S51具有40個(gè)引腳,4kBytesFlash片內(nèi)程序存儲(chǔ)器,128Bytes的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM),32個(gè)外部雙向輸入/輸出(I/O)口,5個(gè)中斷優(yōu)先級(jí)2層中斷嵌套中斷,2個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口,看門(mén)狗(WDT)電路,片內(nèi)時(shí)鐘振蕩器。AT89S51單片機(jī)共有40個(gè)引腳,其引腳圖2.2如下: 圖2.2 3硬件設(shè)計(jì)3.1硬件電路該設(shè)計(jì)的硬件電路由主控部分(單片機(jī)AT89S51)、計(jì)時(shí)部分(實(shí)時(shí)時(shí)鐘芯片DS1302)、顯示部分(八段數(shù)碼管)、電源部分(三端穩(wěn)壓器7805)4個(gè)部分組成。各部分之間相互協(xié)作,構(gòu)成一個(gè)統(tǒng)一的有機(jī)整體,實(shí)現(xiàn)功能。各部分的硬件電路設(shè)計(jì)如下。3.2復(fù)位電路單片機(jī)AT89S51作為主控芯片,控制整個(gè)電路的運(yùn)行。單片機(jī)外圍需要一個(gè)復(fù)位電路,復(fù)位電路的功能是:系統(tǒng)上電時(shí)提供復(fù)位信號(hào),直至系統(tǒng)電源穩(wěn)定后,撤消復(fù)位信號(hào)。為可靠起見(jiàn),電源穩(wěn)定后還要經(jīng)一定的延時(shí)才撤銷(xiāo)復(fù)位信號(hào),以防電源開(kāi)關(guān)或電源插頭分-合過(guò)程中引起的抖動(dòng)而影響復(fù)位。該設(shè)計(jì)采用含有電阻的復(fù)位電路,復(fù)位電路可以有效的解決電源毛刺和電源緩慢下降(電池電壓不足)等引起的問(wèn)題,在電源電壓瞬間下降時(shí)可以使電容迅速放電,一定寬度的電源毛刺也可令系統(tǒng)可靠復(fù)位。復(fù)位電路的設(shè)計(jì)圖如圖3.1示:圖3.1復(fù)位是單片機(jī)的初始化操作,使CPU及各專(zhuān)用存儲(chǔ)器處于一個(gè)確定的初始狀態(tài),其中把PC的內(nèi)容初始化為0000H,使單片機(jī)從0000H單元開(kāi)始執(zhí)行程序,除了系統(tǒng)的正常開(kāi)機(jī)(上電)復(fù)位外,當(dāng)程序運(yùn)行出錯(cuò)或操作錯(cuò)誤使系統(tǒng)處于死循環(huán)狀態(tài)時(shí),為擺脫困境,可按復(fù)位鍵進(jìn)行復(fù)位,復(fù)位電路由片外和片內(nèi)兩部分電路組成。AT89S51的RST引腳為復(fù)位引腳,只要在RST引腳上出現(xiàn)兩個(gè)機(jī)器周期以上的高電平,即可實(shí)現(xiàn)復(fù)位。復(fù)位通常有上電復(fù)位和按鍵復(fù)位兩種方法。本設(shè)計(jì)采用的是按鍵復(fù)位,當(dāng)按下按鍵后,電容被短路,RST引腳就處于高電平,就可以達(dá)到復(fù)位的目的。電路如圖3.2所示。圖3.23.3顯示電路四段數(shù)碼顯示管有兩種,一種是共陽(yáng)極數(shù)碼管,其內(nèi)部是由八個(gè)陽(yáng)極相連接的發(fā)光二極管組成;另一種是共陽(yáng)極數(shù)碼管,其內(nèi)部是由四個(gè)陽(yáng)極相連接的發(fā)光二極管組成。二者原理不同但功能相同。本設(shè)計(jì)的時(shí)間顯示選用四個(gè)共陰極四段數(shù)碼管LED,其外形和內(nèi)部結(jié)構(gòu)如圖3.3所示:圖3.33.4驅(qū)動(dòng)電路而LED顯示電路就像單片機(jī)系統(tǒng)的眼睛,實(shí)時(shí)地向人們傳遞著系統(tǒng)工作的各種狀態(tài)信息和處理結(jié)果。因此,高效、方便的LED顯示驅(qū)動(dòng)電路是構(gòu)成完善的單片機(jī)系統(tǒng)必不可少的元素。常用的LED顯示驅(qū)動(dòng)電路有并行譯碼方式、串行—并行轉(zhuǎn)換方式、顯示驅(qū)動(dòng)接口芯片方式等。圖3.43.5接口電路MCS-51系列單片機(jī)的并行I/O口:接口電路是微機(jī)必不可少的組成部分,并行輸入確出接口是CPU和外部進(jìn)行信息交換的主要通道。MSC-51系列單片有4個(gè)8位并行雙向I/O口P0~P3,共32根I/O線(xiàn)。每一根線(xiàn)能獨(dú)立用作輸入或輸出。單片機(jī)可以外接鍵盤(pán)、顯示器等外圍設(shè)備.還可以進(jìn)行系統(tǒng)擴(kuò)展,以解決硬件資源不足問(wèn)題。4個(gè)并行口都是雙向口,既可以輸入又可以輸出。P0、P2口經(jīng)常作外部擴(kuò)展存儲(chǔ)器時(shí)的數(shù)據(jù)、地址線(xiàn),P3口除作I/O口外,每一根都有第二功能。這4個(gè)I/O口結(jié)構(gòu)基本相同,但仍存在差別。P1口:通道1,雙向I/O口,本次設(shè)計(jì)連接按鍵,用語(yǔ)按鍵信號(hào)的輸入3.6時(shí)鐘模塊3.6.1時(shí)鐘模塊設(shè)計(jì)本模塊由DS1302串行時(shí)鐘芯片和32.768K的晶振組成,負(fù)責(zé)給系統(tǒng)提供實(shí)時(shí)時(shí)鐘。DS1302采用的是串行接口,簡(jiǎn)單的三根連線(xiàn)就可以完成和單片機(jī)的通信,具有體積小、節(jié)省IO口、接口簡(jiǎn)單等優(yōu)點(diǎn)。另外此芯片內(nèi)部建有31字節(jié)的靜態(tài)RAM,可以用于儲(chǔ)存單片機(jī)系統(tǒng)設(shè)置的一些參數(shù)。為了保證意外斷電不會(huì)造成時(shí)鐘復(fù)位和參數(shù)丟失,本設(shè)計(jì)給DS1302芯片外接了一個(gè)CR2032電池。圖3.5時(shí)鐘模塊3.6.2DS1302時(shí)鐘芯片簡(jiǎn)介DS1302實(shí)時(shí)時(shí)鐘具有能計(jì)算2100年之前的秒分時(shí)日日期月年的能力還有閏年調(diào)整的能力,318位暫存數(shù)據(jù)存儲(chǔ)RAM,串行I/O口方式使得管腳數(shù)量最少,簡(jiǎn)單3線(xiàn)接口,與TTL兼容VCC=5V[1]。圖3.6DS1302時(shí)鐘芯片表3.1DS1302引腳功能說(shuō)明X1,X2–32.768kHzCrystalPins晶振管腳GND–Ground地 RST–Reset復(fù)位腳I/O–DataInput/Output數(shù)據(jù)輸入輸出引腳SCLK–SerialClock串行時(shí)鐘引腳VCC1,VCC2–PowerSupplyPins主電源和后備電源引腳DS1302共有12個(gè)寄存器,其中有7個(gè)寄存器與日歷、時(shí)鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式。其日歷、時(shí)間寄存器及其控制字見(jiàn)表3.2。表3.2DS1302的日歷、時(shí)鐘寄存器及其控制字寄存器名命令字取值范圍各位內(nèi)容寫(xiě)操作讀操作76543210秒寄存器80H81H00--59CH10SECSEC分寄存器82H83H00--59010MINMIN時(shí)寄存器84H85H01-12或00-2312/24010HRHR日寄存器86H87H01-28,29,30,310010DATEDATE月寄存器88H89H01--1200010MMONTH周寄存器8AH8BH01--0700000DAY年寄存器8CH8DH00--9910YEARYEAR此外,DS1302還有年份寄存器、控制寄存器、充電寄存器、時(shí)鐘突發(fā)寄存器及與RAM相關(guān)的寄存器等。時(shí)鐘突發(fā)寄存器可一次性順序讀寫(xiě)除充電寄存器外的所有寄存器的內(nèi)容。DS1302與RAM相關(guān)的寄存器分為兩類(lèi),一類(lèi)是單個(gè)RAM單元,共31個(gè),每個(gè)單元組態(tài)為一個(gè)8位的字節(jié),其命令控制字為C0H--FDH,其中奇數(shù)為讀操作,偶數(shù)為寫(xiě)操作;再一類(lèi)為突發(fā)方式下的RAM寄存器,此方式下可一次性讀寫(xiě)所有的RAM的31個(gè)字節(jié),命令控制字為FEH(寫(xiě))、FFH(讀)。4軟件設(shè)計(jì)4.1程序流程設(shè)計(jì)4.1.1主程序設(shè)計(jì)開(kāi)始初始化單片機(jī)開(kāi)始初始化單片機(jī)機(jī)設(shè)置中斷檢測(cè)按鍵數(shù)碼管顯示結(jié)束是否顯示完?圖按鍵中斷處理流程圖4.2按鍵中斷處理流程圖4.1.3軟件去抖動(dòng)流程圖4.3軟件去抖動(dòng)流程4.2延時(shí)程序延時(shí)程序延與MCS-51執(zhí)行指令的時(shí)間有關(guān),如果使用6MHz晶振,一個(gè)機(jī)器周期為2μs,計(jì)算出一條指令以至一個(gè)循環(huán)所需要的執(zhí)行時(shí)間,給出相應(yīng)的循環(huán)次數(shù),便能達(dá)到延時(shí)的目的。10秒延時(shí)程序如下:DELAY:MOVR5,#100DEL0:MOVR6,#200DEL1:MOVR7,#248DEL2:DJNZR7,DEL2DJNZR6,DEL1DJNZR5,DEL0RET上例程序中采用了多重循環(huán)程序,即在一個(gè)循環(huán)體中又包含了其它的循環(huán)程序,這種方式是實(shí)現(xiàn)延時(shí)程序的常用方法。使用多重循環(huán)時(shí),必須注意:(1)循環(huán)嵌套,必須層次分明,不允許產(chǎn)生內(nèi)外層循環(huán)交叉。(2)外循環(huán)可以層層向內(nèi)循環(huán)進(jìn)入,結(jié)束時(shí)由里往外層層退出。(3)內(nèi)循環(huán)可以直接轉(zhuǎn)入外循環(huán),實(shí)現(xiàn)一個(gè)循環(huán)由多個(gè)條件控制的循環(huán)結(jié)構(gòu)方式。74LS04反相器,管腳圖如附圖所示。 圖4.44.3中斷系統(tǒng)4.3.1中斷的概述程序執(zhí)行過(guò)程中,容許外部或內(nèi)部事件通過(guò)硬件打斷程序的執(zhí)行,使其轉(zhuǎn)向?yàn)樘幚硗獠炕騼?nèi)部事件的中斷服務(wù)程序中去;完成中斷服務(wù)程序后,CPU繼續(xù)原來(lái)被打斷的程序,這樣的過(guò)程稱(chēng)為中斷過(guò)程,4.3.2中斷響應(yīng)的一般過(guò)程(1)在每條指令結(jié)束后,系統(tǒng)都自動(dòng)檢測(cè)中斷請(qǐng)求信號(hào),如果有中斷請(qǐng)求,且CPU處于開(kāi)中斷狀態(tài)下,則響應(yīng)中斷。(2)保護(hù)現(xiàn)場(chǎng),在保護(hù)現(xiàn)場(chǎng)前,一般要關(guān)中斷,以防止現(xiàn)場(chǎng)被破壞。保護(hù)現(xiàn)場(chǎng)一般是用堆棧指令將原程序中用到的寄存器推入堆棧。4.3.380S51中有五個(gè)中斷源MCS-51單片機(jī)有5個(gè)(8052有6個(gè))中斷源,為了使每個(gè)中斷源都能獨(dú)立地被允許或禁止,以便用戶(hù)能靈活使用,CPU內(nèi)部在每個(gè)中斷信號(hào)的通道中設(shè)置了一個(gè)中斷允許觸發(fā)器,它控制CPU能否響應(yīng)中斷。只有對(duì)應(yīng)的中斷允許觸發(fā)器被使能(置“1”),相應(yīng)的中斷才能得到相應(yīng)。4.3.4MCS—51中斷系統(tǒng)圖中斷系統(tǒng)的應(yīng)用例1單步操作的中斷實(shí)現(xiàn)。把一個(gè)外部中斷(設(shè)為INT0])設(shè)置為電平激活方式。其中斷服務(wù)程序的末尾寫(xiě)上如下幾條指令:JNBP3.2,$;在INT0變高前,原地等待(死循環(huán))JBP3.2,$;在INT0變低前,原地等待(死循環(huán))RETI;返回并執(zhí)行一條指令現(xiàn)在,若INT0保持低電平,且允許INT0中斷,則CPU就進(jìn)入外部中斷0服務(wù)程序,由于有上述幾條指令,它就會(huì)停在JNB處,原地等待。當(dāng)INT0端出現(xiàn)一個(gè)正脈沖(由低到高,再到低)時(shí),程序就會(huì)往下執(zhí)行,執(zhí)行RETI后,將返回主程序,往下執(zhí)行一條指令,然后又立即響應(yīng)中斷,以等待INT0端,出現(xiàn)的下一個(gè)正脈沖。這樣在INT0端每出現(xiàn)一個(gè)正脈沖,主程序就執(zhí)行一條指令,實(shí)現(xiàn)了單步執(zhí)行的目的,要注意的是,這個(gè)正脈沖的高電平持續(xù)時(shí)間不小于2個(gè)周期,以確保CPU能采集到高電平值。4.4完整程序設(shè)計(jì)VOUTEQUP1.0;紅外脈沖輸出端口;********************************************;*中斷入口程序*;********************************************;ORG0000HLJMPSTARTORG0003HLJMPPINT0ORG000BHretiORG0013H RETI ORG001BH LJMPINTT1 ORG0023H RETI ORG002BH RETI;;********************************************;*主程序*;********************************************;START:MOVSP,#4FHMOVR0,#40H;40H-43H為顯示數(shù)據(jù)存放單元(40H為最高位)MOVR7,#0BHCLEARDISP:MOV@R0,#00HINCR0DJNZR7,CLEARDISPMOV20H,#00HMOVTMOD,#11H;T1為T(mén)0為16位定時(shí)器MOVTH0,#00H;65毫秒初值MOVTL0,#00HMOVTH1,#00HMOVTL1,#00HMOVP0,#0FFHMOVP1,#0FFHMOVP2,#0FFHMOVP3,#0FFHMOVR4,#04H;超聲波肪沖個(gè)數(shù)控制(為賦值的一半)SETBPX0SETBET1SETBEASETBTR1;開(kāi)啟測(cè)距定時(shí)器start1:LCALLDISPLAYJNB00H,START1;收到反射信號(hào)時(shí)標(biāo)志位為1CLREALCALLWORK;計(jì)算距離子程序clrEAMOVR2,#32h;#64H;測(cè)量間隔控制(約4*50=200MS)LOOP:LCALLDISPLAYDJNZR2,LOOPCLR00Hsetbet0movth0,00hmovtl0,00hSETBTR1;重新開(kāi)啟測(cè)距定時(shí)器SETBEASJMPStart1;;****************************************************;*中斷程序**;****************************************************;T1中斷,發(fā)超聲波用;T1中斷,65毫秒中斷一次INTT1:CLREACLRTR0clrex0MOVTH0,#00HMOVTL0,#00HMOVTH1,#00HMOVTL1,#00HSETBET0SETBEASETBTR0;啟動(dòng)計(jì)數(shù)器T0,用以計(jì)intt11:CPLVOUT;40KHZnopnop;nop;nop;nop;nop;nop;nop;nopDJNZR4,intt11;超聲波發(fā)送完畢,MOVR4,#04Hlcalldelay_250;延時(shí),避開(kāi)發(fā)射的直達(dá)聲波信號(hào)SETBEX0;開(kāi)啟接收回波中斷RETIOUT:RETI;外中斷0,收到回波時(shí)進(jìn)入PINT0:nopjbp3.2,pint0_exitCLRTR0;關(guān)計(jì)數(shù)器CLREA;CLREX0;MOV44H,TL0;將計(jì)數(shù)值移入處理單元MOV45H,TH0;movth0,#00hmovtl0,#00hjnbp3.2,$SETB00H;接收成功標(biāo)志pint0_exit:RETI;;****************************************************;*顯示程序*;****************************************************DISPLAY: MOVR1,#40H;GMOVR5,#7fH;GPLAY:MOVA,R5MOVP0,#0FFHMOVP2,AMOVA,@R1MOVDPTR,#TABMOVCA,@A+DPTRMOVP0,ALCALLDL1MSINCR1MOVA,R5JNBACC.4,ENDOUT;GRRAMOVR5,AAJMPPLAYENDOUT:MOVP2,#0FFHMOVP0,#0FFHRET;TAB:DB18h,7Bh,2Ch,29h,4Bh,89h,88h,3Bh,08h,09h,0ffh; TAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH;共陽(yáng)段碼表"0""1""2""3""4""5""6""7""8""9""不亮""A""-";;****************************************************;*延時(shí)程序*;****************************************************;DL1MS:push06hpush07hMOVR6,#14HDL1:MOVR7,#19HDL2:DJNZR7,DL2DJNZR6,DL1pop07hpop06hRET;;****************************************************;*距離計(jì)算程序(=計(jì)數(shù)值*17/1000cm)*;****************************************************;work: PUSHACCPUSHPSWPUSHBMOVPSW,#18hMOVR3,45HMOVR2,44HMOVR1,#00DMOVR0,#17DLCALLMUL2BY2MOVR3,#03HMOVR2,#0E9HLCALLDIV4BY2LCALLDIV4BY2MOV40H,R4MOVA,40HJNZJJ0MOV40H,#0AH;最高位為零,不點(diǎn)亮JJ0:MOVA,R0MOVR4,AMOVA,R1MOVR5,AMOVR3,#00DMOVR2,#100DLCALLDIV4BY2MOV41H,R4MOVA,41HJNZJJ1MOVA,40H;次高位為0,先看最高位是否為不亮SUBBA,#0AHJNZJJ1MOV41H,#0AH;最高位不亮,次高位也不亮JJ1:MOVA,R0MOVR4,AMOVA,R1MOVR5,AMOVR3,#00DMOVR2,#10DLCALLDIV4BY2MOV42H,R4MOVA,42HJNZJJ2MOVA,41H;次次高位為0,先看次高位是否為不亮SUBBA,#0AHJNZJJ2MOV42H,#0AH;次高位不亮,次次高位也不亮JJ2:MOV43H,R0 POPBPOPPSWPOPACCRET;;****************************************************;*兩字節(jié)無(wú)符號(hào)數(shù)乘法程序*;****************************************************;R7R6R5R4<=R3R2*R1R0;MUL2BY2:CLRAMOVR7,AMOVR6,AMOVR5,AMOVR4,AMOV46H,#10HMULLOOP1:CLRCMOVA,R4RLCAMOVR4,AMOVA,R5RLCAMOVR5,AMOVA,R6RLCAMOVR6,AMOVA,R7RLCAMOVR7,AMOVA,R0RLCAMOVR0,AMOVA,R1RLCAMOVR1,AJNCMULLOOP2MOVA,R4ADDA,R2MOVR4,AMOVA,R5ADDCA,R3MOVR5,AMOVA,R6ADDCA,#00HMOVR6,AMOVA,R7ADDCA,#00HMOVR7,AMULLOOP2:DJNZ46H,MULLOOP1RET;;****************************************************;*四字節(jié)/兩字節(jié)無(wú)符號(hào)數(shù)除法程序*;****************************************************;R7R6R5R4/R3R2=R7R6R5R4(商)...R1R0(余數(shù));DIV4BY2:MOV46H,#20HMOVR0,#00HMOVR1,#00HDIVLOOP1:MOVA,R4RLCAMOVR4,AMOVA,R5RLCAMOVR5,AMOVA,R6RLCAMOVR6,AMOVA,R7RLCAMOVR7,AMOVA,R0RLCAMOVR0,AMOVA,R1RLCAMOVR1,ACLRCMOVA,R0SUBBA,R2MOVB,AMOVA,R1SUBBA,R3JCDIVLOOP2MOVR0,BMOVR1,ADIVLOOP2:CPLCDJNZ46H,DIVLOOP1MOVA,R4RLCAMOVR4,AMOVA,R5RLCAMOVR5,AMOVA,R6RLCAMOVR6,AMOVA,R7RLCAMOVR7,ARETdelay_250:pushpswpush07hmovr7,#033h;16delay_250_1:nopnopnopnopdjnzr7,delay_250_1pop07hpoppswret;END//51單片機(jī)制作的超聲波測(cè)距,原程序//測(cè)距范圍是70~400CM,精度是1CM。//原程序如下:#include<REG51.H>sbitk1=P3^4;sbitcsbout=P1^0;//超聲波發(fā)送sbitcsbint=P3^2;//超聲波接收sbitbg=P3^3;#defineLEDP0sbitLED1=P2^4;//LED控制sbitLED2=P2^5;//LED控制sbitLED3=P2^6;//LED控制#definecsbc0.0347unsignedcharcl,mqzd,csbs,csbds,buffer[3],xm1,xm2,xm0,jpjs;//顯示標(biāo)識(shí)unsignedcharconvert[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//0~9段碼unsignedints,t,i,xx,j,sj1,sj2,sj3,mqs,sx1;voidcsbcj();voiddelay(j);//延時(shí)函數(shù)voidscanLED();//顯示函數(shù)voidtimeToBuffer();//顯示轉(zhuǎn)換函數(shù)voidkeyscan();voidk1cl();voidk2cl();voidk3cl();voidk4cl();voidoffmsd();voidmain()//主函數(shù){EA=1;//開(kāi)中斷TMOD=0x11;//設(shè)定時(shí)器0為計(jì)數(shù),設(shè)定時(shí)器1定時(shí)ET0=1;//定時(shí)器0中斷允許ET1=1;//定時(shí)器1中斷允許TH0=0x00;TL0=0x00;TH1=0x9E;TL1=0x57;csbds=0;csbout=1;cl=0;csbs=8;jpjs=0;sj1=50;sj2=200;sj3=580;k4cl();TR1=1;while(1){keyscan();if(jpjs<1){csbcj();//調(diào)用超聲波測(cè)距程序if(s>sj3)//大于時(shí)顯示“CCC”{buffer[2]=0xC6;buffer[1]=0xC6;buffer[0]=0xC6;}elseif(s<sj1)//小于時(shí)顯示“---”{buffer[2]=0xBF;buffer[1]=0xBF;buffer[0]=0xBF;}elsetimeToBuffer();}elsetimeToBuffer();//將值轉(zhuǎn)換成LED段碼offmsd();scanLED();//顯示函數(shù)if(s<sj2)bg=0;bg=1;}}voidscanLED()//顯示功能模塊{LED=buffer[0];LED3=0;delay(200);LED3=1;LED=buffer[1];LED2=0;delay(200);LED2=1;LED=buffer[2];LED1=0;delay(200);LED1=1;}voidtimeToBuffer()//轉(zhuǎn)換段碼功能模塊{xm0=s/100;xm1=(s-100*xm0)/10;xm2=s-100*xm0-10*xm1;buffer[2]=convert[xm2];buffer[1]=convert[xm1];buffer[0]=convert[xm0];}voiddelay(i){while(--i);}voidtimer1int(void)interrupt3using2{TH1=0x9E;TL1=0x57;csbds++;if(csbds>=40){csbds=0;cl=1;}}voidcsbcj(){if(cl==1){TR1=0;TH0=0x00;TL0=0x00;i=csbs;while(i--){csbout=!csbout;}TR0=1;i=mqs;//盲區(qū)while(i--){}i=0;while(csbint){i++;if(i>=4000)//上限值csbint=0;}TR0=0;TH1=0x9E;TL1=0x57;t=TH0;t=t*256+TL0;t=t-29;s=t*csbc/2;TR1=1;cl=0;csbint=1;if(s<sj1){if(csbs>6){csbs=csbs-2;sj1=40;}sj1=sj1+2;k4cl();}elseif(s>=sj3){if(csbs<32){csbs=csbs+2;sj1=sj1+10;k4cl();}}}}voidkeyscan()//健盤(pán)處理函數(shù){xx=0;if(k1!=1)//判斷開(kāi)關(guān)是否按下{delay(100);//延時(shí)去抖動(dòng)if(k1!=1)//判斷開(kāi)關(guān)是否按下{while(!k1){delay(25);xx++;}if(xx>1000){jpjs++;if(jpjs>3){k4cl();jpjs=0;}}xx=0;switch(jpjs)

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論