《單片機(jī)原理及應(yīng)用》
單片機(jī)課程設(shè)計報告
超聲波測距報告
目錄 第1 章 課程設(shè)計概述……………………………………………………………2
1.1 課程設(shè)計選題及原理………………………………………………2 1.2 課程設(shè)計選題調(diào)研…………………………………………………2 1.2.1 選題目的與意義………………………………………………2 1.2.2 國內(nèi)外研究綜述………………………………………………3 第2 章 方案設(shè)計……………………………………………………………………………4 2.1 主要任務(wù)…………………………………………………………………… 4 2.2 設(shè)計框圖…………………………………………………………………… 4 2.3 設(shè)計所需元器件及簡介………………………………………………… 4 2.4 設(shè)計程序流程簡圖…………………………………………………………5 2.5 編程語言的選擇 第3 章 電路及部分代碼設(shè)計…………………………………………………………… 6 3.1 Stc12c5a60s2最小系統(tǒng)……………………………………………………6 3.2 超聲波測距模塊……………………………………………………7 3.3 數(shù)碼管顯示模塊…………………………………………………………… 8 3.4 蜂鳴器報警模塊…………………………………………………………… 9 3.5 總仿真結(jié)果及實物測量結(jié)果……………………………………………10 第4 章 課程設(shè)計心得體會和總結(jié)………………………………………………………11 4.1 心得體會…………………………………………………………………… 11 4.2 總結(jié)……………………………………………………………… 11 附 1 課程設(shè)計仿真圖………………………………………………………… 附 2 課程設(shè)計實物圖………………………………………………………… 附 3 課程設(shè)計程序設(shè)計代碼……………………………………………………………
第1 章 課程設(shè)計概述
1.1 課程設(shè)計選題及原理
課程設(shè)計題目
超聲波測距儀
設(shè)計原理
通過超聲波發(fā)射裝置發(fā)出超聲波,根據(jù)接收器接到超聲波時的時間差就可以知道距離了。這與雷達(dá)測距原理相似。 超聲波發(fā)射器向某一方向發(fā)射超聲波,在發(fā)射時刻的同時開始計時,超聲波在空氣中傳播,途中碰到障礙物就立即返回來,超聲波接收器收到反射波就立即停止計時。 最常用的超聲測距的方法是回聲探測法,超聲波發(fā)射器向某一方向發(fā)射超聲波,在發(fā)射時刻的同時計數(shù)器開始計時,超聲波在空氣中傳播,途中碰到障礙物面阻擋就立即反射回來,超聲波接收器收到反射回的超聲波就立即停止計時。超聲波在空氣中的傳播速度為340m/s,根據(jù)計時器記錄的時間t,就可以計算出發(fā)射點距障礙物面的距離s,即:s=340t/2。 由于超聲波也是一種聲波,其聲速V與溫度有關(guān)。在使用時,如果傳播介質(zhì)溫度變化不大,則可近似認(rèn)為超聲波速度在傳播的過程中是基本不變的。如果對測距精度要求很高,則應(yīng)通過溫度補償?shù)姆椒▽y量結(jié)果加以數(shù)值校正。聲速確定后, 只要測得超聲波往返的時間,即可求得距離。這就是超聲波測距儀的基本原理。
1.2 課程設(shè)計選題調(diào)研
1.2.1 選題目的與意義
超聲波是指頻率在20KHz以上的聲波,它屬于機(jī)械波的范疇,可用于非接觸測量,具有不受光、電磁波以及粉塵等外界因素的干擾的優(yōu)點,利用計算超聲波在發(fā)送端和接收端之間的傳輸時間和聲速來測量距離,對被測目標(biāo)無損害。而且超聲波傳播速度在很大范圍內(nèi)與頻率無關(guān)。超聲波的這些獨特優(yōu)點越來越受到人們的重視。 目前對于超聲波精確測距的需求也越來越大,比如油庫和水箱液面的精確測量和控制,汽車輔助泊位系統(tǒng)的應(yīng)用,物體內(nèi)氣孔大小的檢測和機(jī)械內(nèi)部損傷的檢測等。在機(jī)械制造,電子冶金,航海,宇航,石油化工,等工業(yè)領(lǐng)域也有廣泛地應(yīng)用。此外,在材料科學(xué),醫(yī)學(xué),生物科學(xué)等領(lǐng)域中也占具重要地位。
1.2.2 國內(nèi)外研究綜述
歷史上使用超聲波來測量距離是從第二次世界大戰(zhàn)時海軍的聲納技術(shù)的發(fā)展開始。聲納是一種利用聲波在水下測定目標(biāo)距離和運動速度的儀器。經(jīng)過幾個世紀(jì),科學(xué)家們對此反復(fù)研究,最終發(fā)現(xiàn)了超聲波的原理。超聲波測距應(yīng)用于各種工業(yè)領(lǐng)域,如工業(yè)自動控制,建筑工程測量和機(jī)器人視覺識別等方面。 超聲波作為一種檢測技術(shù),采用的是非接觸式測量,由于它具有不受外界因素影響,對環(huán)境有一定的適應(yīng)能力,且操作簡單,測量精度高等優(yōu)點而被廣泛應(yīng)用。這些特點可使測量儀器不受被測介質(zhì)的影響,大大解決了傳統(tǒng)測量儀器存在的問題,比如,在粉塵多的情況下對人引起的身體接觸傷害,腐蝕性質(zhì)的被測物對測量儀器腐蝕,觸電接觸不良造成的誤測等。此外該技術(shù)對被測元件無磨損,使測量儀器牢固耐用,使用壽命加長,而且還降低了能量損耗,節(jié)省人力和勞動的強(qiáng)度。因此,利用超聲波檢測既迅速、方便、計算簡單,又易于實時控制,在測量精度方面能達(dá)到工業(yè)實用的要求。 然而超聲波測距在實際應(yīng)用中也有很多局限性。由于超聲波在傳播過程中,聲壓會隨距離的增大而呈指數(shù)規(guī)律衰減,遠(yuǎn)目標(biāo)的回波信號幅度小,信噪比低,用固定閾值的比較器檢測回波,可能導(dǎo)致越過門檻的時間前后移動,從而影響計時的準(zhǔn)確性,這必然會影響到測距的準(zhǔn)確度。此外,構(gòu)成超聲波傳感器的壓電陶瓷片在壓電的雙向轉(zhuǎn)換過程中,存在慣性,滯后等現(xiàn)象,以及超聲波脈沖在空氣中傳播本身及多重的反射路徑,均導(dǎo)致回波信號被展寬,也會使測量產(chǎn)生較大的誤差,影響了測距的分辨率。其它如溫度,風(fēng)速等也會對測量造成一定的影響。工程師針對這些誤差提出的可變閾值的超聲波測距方法,從回波信號處理的角度出發(fā),分析了超聲波回波曲線的特性,利用回波包絡(luò)的峰值檢測技術(shù)以確定回波到達(dá)的時刻,另外,利用溫度補償電路可以降低溫度對聲速的影響,這些改進(jìn)都大大的提高了超聲波測距的準(zhǔn)確性。 計量學(xué)在制造業(yè)中越來越重要。直接在機(jī)器上測量尤其能推動制造業(yè)的發(fā)展。目前為止大部分還是采用視覺的或觸覺的測量方法。但是墻的厚度就不能用這些來測量,因此德國人把超聲系統(tǒng)結(jié)合到機(jī)器設(shè)計出了測距方法。隨著超聲波的發(fā)展,早在2000年時英國人就設(shè)計出了可觀察,識別并測距的超聲波集成系統(tǒng)。
第2 章方案設(shè)計
2.1 主要任務(wù)
設(shè)計制作一個超聲波測距儀,通過單片機(jī)控制超聲波測距模塊,計算并顯示所測距離以及實現(xiàn)報警功能。 整體電路的控制核心為單片機(jī)STC12C5A60S2。超聲波發(fā)射和接收電路中都對相應(yīng)信號進(jìn)行整形及放大,以保證測量結(jié)果盡可能精確。超聲波探頭接OUT口實現(xiàn)超聲波的發(fā)射和接收。另外超聲波發(fā)射和接受模塊hc-sr04還有具有溫度補償?shù)淖饔茫箿y量精度能夠達(dá)到要求。整體結(jié)構(gòu)圖包括超聲波發(fā)射接收電路,單片機(jī)電路,顯示電路與蜂鳴器報警電路等幾部分模塊組成。
2.2 設(shè)計框圖
本設(shè)計主要的四個模塊:超聲波發(fā)射和接收模塊,蜂鳴器報警模塊,單片機(jī) STC12C5A60S2,四位數(shù)碼管顯示模塊。以下是設(shè)計框圖 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image001.gif 圖1 設(shè)計框圖
2.3 設(shè)計所需元器件及簡介
STC12C5A60S2
增強(qiáng)型 8051 CPU,1T,單時鐘/ 機(jī)器周期,指令代碼完全兼容傳統(tǒng)8051。工作電壓5.5V-3.3V。STC12C5A60S2/AD/PWM系列單片機(jī)是宏晶科技生產(chǎn)的單時鐘/機(jī)器周期(1T)的單片機(jī),是高速/低功耗/超強(qiáng)抗干擾的新一代8051單片機(jī),指令代碼完全兼容傳統(tǒng)8051,但速度快8-12倍。內(nèi)部集成MAX810專用復(fù)位電路,2路PWM,8路高速10位A/D轉(zhuǎn)換(250K/S),針對電機(jī)控制,強(qiáng)干擾場合。 通用I/O口(36/40/44個),復(fù)位后為:準(zhǔn)雙向口/弱上拉(普通8051傳統(tǒng)I/O口) 可設(shè)置成四種模式:準(zhǔn)雙向口/弱上拉,推挽/強(qiáng)上拉,僅為輸入/高阻,開漏每個I/O口驅(qū)動能力均可達(dá)到20mA,但整個芯片最大不要超過55mA。 本設(shè)計中用到的單片機(jī)管腳有P1,P2.0-P2.3,P3.5-P3.7。
超聲波測距模塊HC-SR04
超聲波測距模塊HC-SR04 可提供2-400cm的非接觸式距離感測功能,測距精度可高達(dá)3mm。模塊包括超聲波發(fā)器、接收器與控制電路本模塊性能穩(wěn)定,測度距離精確。能和國外的SRF05,SRF02等超聲波測距模塊相媲美。模塊高精度,盲區(qū)(2cm)超近,穩(wěn)定的測距是此產(chǎn)品成功走向市場的有力根據(jù) file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.gif 圖2 HC-SR04正面圖
主要技術(shù)參數(shù):1:使用電壓:DC5V 2:靜態(tài)電流:小于2mA
3:電平輸出:高5V 4:電平輸出:底0V
5:感應(yīng)角度:不大于15度 6:高精度 可達(dá)0.2cm 7:探測距離:2cm-450cm 接線方式:VCC,trig(控制端),echo(接收端),GND 模塊工作原理:(1)采用IO觸發(fā)測距,給至少10us的高電平信號; (2)模塊自動發(fā)送8個40khz的方波,自動檢測是否有信號返回; (3)有信號返回,通過IO輸出一高電平,高電平持續(xù)的時間就是超聲波從發(fā)射到返回的時間.測試距離=(高電平時間*聲速(340M/S))/2; 超聲波發(fā)射器向某一方向發(fā)射超聲波,在發(fā)射超聲波的同時開始計時,超聲波在空氣中傳播,途中碰到障礙物反射后立即返回來,超聲波接收器收到反射波就立即停止計時。超聲波在空氣中的傳播速度約為340m/s,根據(jù)計時器記錄的時間t,就可以計算出超聲波發(fā)射點距障礙物的距離(s),即為:s=340t/2,這就是所謂的時間差測距法。 存在4個因素限制了該系統(tǒng)的最大可測距離:超聲波的幅度、反射的質(zhì)地、反射回波和入射聲波之間的夾角。
四位數(shù)碼管顯示模塊
數(shù)碼管(LED SegmentDisplays)是由多個發(fā)光二極管封裝在一起組成“8”字型的器件,引線已在內(nèi)部連接完成,只需引出它們的各個筆劃,公共電極。led數(shù)碼管常用段數(shù)一般為7段有的另加一個小數(shù)點,還有一種是類似于3位“+1”型。位數(shù)有半位,1,2,3,4,5,6,8,10位等等....,led數(shù)碼管根據(jù)LED的接法不同分為共陰和共陽兩類。本設(shè)計用到的是共陽極,靜態(tài)驅(qū)動也稱直流驅(qū)動數(shù)碼管。靜態(tài)驅(qū)動是指每個數(shù)碼管的每一個段碼都由一個單片機(jī)的I/O端口進(jìn)行驅(qū)動,或者使用如BCD碼二-十進(jìn)制譯碼器譯碼進(jìn)行驅(qū)動。 共陽TAB: DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,088H
本設(shè)計還需要的元件有蜂鳴器,電阻,電容,12M晶振,按鍵,三極管,面包板等
2.4 設(shè)計程序流程簡圖 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image004.gif 圖3 設(shè)計程序流程簡圖
設(shè)計流程圖說明:本設(shè)計P3.5連接超聲波發(fā)射端,P3.7口接超聲波接收端。首先單片機(jī)開始工作,系統(tǒng)初始化后單片機(jī)向P3.5口發(fā)送40KHZ的方波,使超聲波發(fā)射和接受模塊開始工作,當(dāng)P3.7口接收到高電平時計時器開始計時,選用的是計時器工作方式1,16位。當(dāng)P3.7口接收到低電平的時候計時器關(guān)閉。此時時間存在TH0,TL0中,這是通過計算子程序把時間換算成距離四位,從高到底分別存在78H,77H,76H,75H。此時調(diào)用顯示子程序把距離顯示在四位數(shù)碼管中。再調(diào)用報警子程序,根據(jù)距離的判斷,使蜂鳴器發(fā)出不同頻率的聲音。延時很短的時間,繼續(xù)下次的測量。
2.5 編程語言的選擇 在編程語言的選擇上,我們主要考慮使用我所學(xué)過的匯編語言和C語言。 匯編語言是一種面向機(jī)器的低級的程序設(shè)計語言。它直接利用機(jī)器提供的指令系統(tǒng)編寫程序,該類程序的可執(zhí)行指令是與機(jī)器語言程序的指令一一對應(yīng)的。匯編語言由于是面向機(jī)器的程序設(shè)計語言,與具體的計算機(jī)硬件有著密切的關(guān)系,因此,可移植性差。但由于匯編指令與機(jī)器語言指令一一對應(yīng),即一條匯編語言的可執(zhí)行指令對應(yīng)著一條機(jī)器語言指令,反之亦然。因此,匯編語言可直接利用機(jī)器硬件系統(tǒng)的許多特性,如寄存器、標(biāo)志位以及一些特殊指令等,具有執(zhí)行速度快、占用內(nèi)存少等優(yōu)點。 在本設(shè)計中,設(shè)計程序過程相對不復(fù)雜,用匯編語言完全可以實現(xiàn),所以本設(shè)計選擇了使用匯編語言進(jìn)行編程。 第3 章電路及部分代碼設(shè)計
3.1 Stc12c5a60s2最小系統(tǒng) 在電源旁接了開關(guān)控制電源。復(fù)位電路旁還接了按鍵,方便復(fù)位操作。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg 圖4 單片機(jī)工作最小系統(tǒng)
3.2 超聲波測距模塊 設(shè)計思路:單片機(jī)P3.5發(fā)送40KHZ的方波,超聲波接收到后開始測距,返回一段高電平到P3.7就是超聲波的測量的時間,所以程序設(shè)計時P3.7接收到高電平時開啟定時器,P3.7口接收到低電平時關(guān)閉定時器,這樣定時器TH0,TL0里存儲的就是測量的時間,根據(jù)公式s=340t/2就可以計算出距離。 流程圖 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image007.gif 圖5超聲波發(fā)射和接收流程圖 電路部分 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image009.jpg 圖6 超聲波發(fā)射和接收電路 根據(jù)超聲波測距模塊原理代碼設(shè)計部分如下 P3.5發(fā)射,P3.7接受 MOV TMOD,#01H ;置定時器T0工作方式樣3,對內(nèi)部機(jī)器周期計數(shù) CJZCX: MOV TL0,#00H ;裝入定時器初值 MOV TH0,#00H puzel:MOV 14H,#08H ;超聲波發(fā)射持續(xù)200us Here:CPL P3.5 ;輸出40kHz方波 NOP ; NOP ; NOP ; DJNZ 14H,Here ; QBA:JB P3.7,QBC ;等待1跳到QBC DJNZ R1,QBA DJNZ R0,QBA QBC:SETB TR0 ;測到1開始計時 SETB P3.2 QBB:JNB P3.7,QBD ;等待0跳到QBD JMP QBB QBD:CLR P2.3 ;測到0關(guān)閉計時 CLR TR0 3.3 數(shù)碼管顯示模塊
設(shè)計思路:此時通過計算后四位數(shù)據(jù)分別從高到底存在78H,77H,76H,75H里,顯示數(shù)據(jù)時從高到低,P1口接a-h,P2.0-P2.3口接共陽極。首先賦值P2口0FEH,讓78H中的數(shù)據(jù)給高位,在左移,把77H數(shù)據(jù)給次高位,這樣循環(huán)知道四位數(shù)據(jù)全部顯示,此時跳到主程序。 電路部分如圖6 代碼部分(說明顯示四位左端為高位,代碼中78H,77H,76H,75H分別存了四位,P1口接a-h,P2.0-P2.3接共陽極) DISPLAY: MOV R1,#78H ;立即數(shù)78H送寄存器中 MOV R5,#0FEH ;立即數(shù)FEH送寄存器R5中 PLAY: MOV A,R5 ;寄存器R5中的數(shù)值送累加器A中 MOV P2,A ;累加器A中的數(shù)值送P2口 MOV A,@R1 ;以寄存器R1中的數(shù)為地址單元的數(shù)值送累加器中 MOV DPTR,#TAB ;16位地址送地址寄存器中 MOVC A,@A+DPTR ;以中的地址為基地變址尋址單元中的數(shù)送累加器 MOV P1,A ;累加器A中的數(shù)值送P1口 MOV R6,#14H ;立即數(shù)據(jù)14送寄存器R6中 DL1:MOV R7,#19H ;立即數(shù)據(jù)19送寄存器R7中 DL2:DJNZ R7,DL2 ;寄存器中的數(shù)據(jù)減1,不為零時則轉(zhuǎn)移 DJNZ R6,DL1 ;寄存器中的數(shù)據(jù)減1,不為零時則轉(zhuǎn)移 DEC R1 ;寄存器R1中的數(shù)值減1 MOV A,R5 ;寄存器R5中的數(shù)值送累加器A中 JNB ACC.3,ENDOUT ;地址位為0則轉(zhuǎn)到ENDOUT RL A ;累加器循環(huán)右移 MOV R5,A ;累加器A中的數(shù)值送寄存器R5中 AJMP PLAY ;絕對短轉(zhuǎn)移 ENDOUT: SETB P3.5 ;置P3.5口 RET ;返回 TAB: DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,088H
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image011.jpg 圖 7 數(shù)碼管顯示電路 3.4 蜂鳴器報警模塊
設(shè)計思路:如圖P3.6口接的是蜂鳴器電路,實現(xiàn)蜂鳴器不同頻率報警,首先要距離分段,此程序判斷的是最高位,所以是78H里的值,控制蜂鳴器報警頻率不同是通過改變P3.6口0和1翻轉(zhuǎn)的狀態(tài)時間不同來實現(xiàn)的。 電路部分 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image013.jpg 圖8 蜂鳴器報警電路 蜂鳴器報警分5種頻率 分段為<1m,1-2m,2-3m,3-4m,>4m 距離不同設(shè)定的蜂鳴器報警的頻率不同
3.5 總仿真結(jié)果及其實物測量結(jié)果
由于沒有超聲波發(fā)射和接收模塊,用按鍵來給P3.7口信號。電路的仿真結(jié)果是單片機(jī)工作后,用按鍵給信號,四位數(shù)碼管可以顯示計算值出來,蜂鳴器可以正常工作。 本次設(shè)計的實物能實現(xiàn)的功能功能有: (1)超聲波的發(fā)射和接受控制 (2)對回波信號的檢測 (3)測距時間到距離的換算 (4)距離不斷測量和不斷顯示 (5)對距離進(jìn)行判斷,并且蜂鳴器報警
第4 章課程設(shè)計心得體會和總結(jié) 4.1 心得體會 心得:這兩個星期是一個不斷發(fā)現(xiàn)問題和解決問題的過程,從調(diào)研選題背景意義,了解了超聲波測距儀的工作原理及其發(fā)展,感覺上通過單片機(jī)控制是一個相對簡單的過程沒有什么彎路要走。確定方案,購買元件的時候就發(fā)現(xiàn)有很多的實際問題,由于第一次實際做一些東西出來,總覺得不知道從什么地方下手,這個時候小組合作就顯得格外重要,大家一起討論,給出不同的意見,完善各自的方案,了解更多實際電路要考慮到的問題,電阻的限流作用,單片機(jī)工作的電壓電流,電阻選多大,電容選多大,這些對電路都是有影響的,選的不對很可能就把單片機(jī)燒壞。每天都會有新的問題,解決完一個就會發(fā)現(xiàn)那不是結(jié)束僅僅是一個開始。焊接電路是一項需要有耐心的過程,一不小心就會犯錯,那是萬萬不允許的,所以必須檢查每一個焊接點,剛開始做必然做的不太嫻熟,焊接的也不太美觀,但最也算是完成了。調(diào)試電路是最頭疼的,一開始不知道是電路的問題還是程序的問題。這次我們用的是匯編語言,而大部分組用的是C語言,這讓我們在交流程序的時候顯得有些無奈,開始我們只有一個部分一個部分的慢慢調(diào)試,先從四位數(shù)碼顯示部分開始,這部分知道電路連接正確應(yīng)該就不會有問題。然后我們測蜂鳴器是否工作正常。最后遇到問題是發(fā)現(xiàn)超聲波接收和發(fā)射模塊不能正常工作,找了很多原因,都不行。后來恍然大悟,是我們在一開始是就把超聲波發(fā)射和接收模塊的時間開始和接受弄錯了,所以計算的時間總是錯的。完成能測距的這一基本任務(wù)讓我們有了信心去做接下來的報警功能。對于我們這個超聲波測距模塊,要弄清楚每一個環(huán)節(jié)的工作原理,才能進(jìn)行電路設(shè)計及程序編寫。 4.2 總結(jié) 總結(jié):我們使用stc12c5a60s2單片機(jī)控制,hc-sr04超聲波發(fā)射和接受模塊輔助測量,在四位數(shù)碼顯示管顯示結(jié)果,蜂鳴器報警,這是整個超聲波測距系統(tǒng)的主要四個部分。測量范圍在2cm到300cm之間。由于經(jīng)驗不足,最后的成品能雖然實現(xiàn)測量和報警的功能,但是任然有很多不足的地方,電路排版焊接不美觀,電路測量的有效性不夠強(qiáng),程序的穩(wěn)定性容錯性都存在問題。程序在努力改進(jìn)后還需加強(qiáng)。本次課程設(shè)計學(xué)習(xí)到很多,對課本原理性的內(nèi)容更是加深理解。對實踐動手能力有了很大的鍛煉和提高。 附錄1 課程設(shè)計仿真圖 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image015.jpg 圖9 仿真電路
附錄2 課程設(shè)計實物圖 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image017.jpg 圖10 實物圖
附錄3 程序設(shè)計代碼 ; 基于STC12C5A60S2單片機(jī)超聲波測距系統(tǒng) ; 測量范圍35-300厘米 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 中斷入口程序 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ORG 0000H AJMP START ORG 000BH ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 主 程 序 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; START: MOV R0,#70H ;立即數(shù)70H送寄存器R0中 MOV R7,#0BH ;立即數(shù)0BH送寄存器R7中 MOV 20H,#00H ;立即數(shù)00H送20H單元中 CLEARDISP: MOV @R0,#00H ;立即數(shù)立即數(shù)00H送R0中的地址單元中 INC R0 ;寄存器R0加1 DJNZ R7,CLEARDISP;寄存器中的數(shù)值減1非零時轉(zhuǎn)移 MOV TMOD,#01H ;置定時器T0工作方式樣3,對內(nèi)部機(jī)器周期計數(shù) CJZCX: MOV TL0,#00H ;裝入定時器初值 MOV TH0,#00H MOV R0,#0FH MOV R1,#5bH puzel:MOV 14H,#08H ;超聲波發(fā)射持續(xù)200us Here:CPL P3.5 ;輸出40kHz方波 NOP ; NOP ; NOP ; DJNZ 14H,Here ; QBA:JB P3.7,QBC ;等待1跳到QBC DJNZ R1,QBA DJNZ R0,QBA QBC:SETB TR0 ;測到1開始計時 SETB P3.2 QBB:JNB P3.7,QBD ;等待0跳到QBD JMP QBB QBD:CLR P2.3 ;測到0關(guān)閉計時 CLR TR0 MOV 70H,TL0 MOV 71H,TH0 MOV R2,71H MOV R3,70H MOV R6,#11H MOV R7,#0H LCALL MULD MOV R6,#64H MOV R7,#0H LCALL DIVD MOV 73H,R2 MOV 74H,R3 MOV R3,#0H MOV R4,#0H MOV R5,#0H MOV R6,73H MOV R7,74H LCALL HB2 MOV A,R4 ;分離BCD MOV B,#10H DIV AB MOV 78H,A MOV 77H,B MOV A,R5 MOV B,#10H DIV AB MOV 76H,A MOV 75H,B MOV 7AH,#0FFH XXX:LCALL DISPLAY LCALL WARNING DJNZ 7AH,XXX AJMP CJZCX ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 乘34程序(乘聲速) ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MULD: MOV A,R3 ;計算R3乘R7 MOV B,R7 MUL AB MOV R4,B ;暫存部分積 MOV R5,A MOV A,R3 ;計算R3乘R6 MOV B,R6 MUL AB ADD A,R4 ;累加部分積 MOV R4,A CLR A ADDC A,B MOV R3,A MOV A,R2 ;計算R2乘R7 MOV B,R7 MUL AB ADD A,R4 ;累加部分積 MOV R4,A MOV A,R3 ADDC A,B MOV R3,A CLR A RLC A XCH A,R2 ;計算R2乘R6 MOV B,R6 MUL AB ADD A,R3 ;累加部分積 MOV R3,A MOV A,R2 ADDC A,B MOV R2,A RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 除100程序(除法) ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DIVD: CLR C ;比較被除數(shù)和除數(shù) MOV A,R3 SUBB A,R7 MOV A,R2 SUBB A,R6 JC DVD1 SETB OV ;溢出 RET DVD1: MOV B,#10H ;計算雙字節(jié)商 DVD2: CLR C ;部分商和余數(shù)同時左移一位 MOV A,R5 RLC A MOV R5,A MOV A,R4 RLC A MOV R4,A MOV A,R3 RLC A MOV R3,A XCH A,R2 RLC A XCH A,R2 MOV F0,C ;保存溢出位 CLR C SUBB A,R7 ;計算(R2R3-R6R7) MOV R1,A MOV A,R2 SUBB A,R6 ANL C,/F0 ;結(jié)果判斷 JC DVD3 MOV R2,A ;夠減,存放新的余數(shù) MOV A,R1 MOV R3,A INC R5 ;商的低位置一 DVD3: DJNZ B,DVD2 ;計算完十六位商(R4R5) MOV A,R4 ;將商移到R2R3中 MOV R2,A MOV A,R5 MOV R3,A CLR OV ;設(shè)立成功標(biāo)志 RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; BCD轉(zhuǎn)換 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; HB2: CLR A ;BCD碼初始化 MOV R3,A MOV R4,A MOV R5,A MOV R2,#10H ;轉(zhuǎn)換雙字節(jié)十六進(jìn)制整數(shù) HB3: MOV A,R7 ;從高端移出待轉(zhuǎn)換數(shù)的一位到CY中 RLC A MOV R7,A MOV A,R6 RLC A MOV R6,A MOV A,R5 ;BCD碼帶進(jìn)位自身相加,相當(dāng)于乘2 ADDC A,R5 DA A ;十進(jìn)制調(diào)整 MOV R5,A MOV A,R4 ADDC A,R4 DA A MOV R4,A MOV A,R3 ADDC A,R3 MOV R3,A ;雙字節(jié)十六進(jìn)制數(shù)的萬位數(shù)不超過6,不用調(diào)整 DJNZ R2,HB3 ;處理完16bit RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 報警程序 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; WARNING: MOV R6,#10 MOV A,78H CJNE A,#00H,B1 LJMP W1 B1: SUBB A,#01H CJNE A,#00H,B2 LJMP W2 B2: SUBB A,#01H CJNE A,#00H,B3 LJMP W3 B3: SUBB A,#01H CJNE A,#00H,B4 LJMP W4 B4: LJMP W5 RET W1: CPL P3.6 ;蜂鳴器驅(qū)動電平取反 MOV R7,#28 DE1: DJNZ R7,DE1 DEC R6 CJNE R6,#00,W1 ;反復(fù)循環(huán) RET W2: CPL P3.6 ;蜂鳴器驅(qū)動電平取反 MOV R7,#228 DE2: DJNZ R7,DE2 DEC R6 CJNE R6,#00,W2 ;反復(fù)循環(huán) RET W3: CPL P3.6 ;蜂鳴器驅(qū)動電平取反 MOV R7,#428 DE3: DJNZ R7,DE3 DEC R6 CJNE R6,#00,W3 ;反復(fù)循環(huán) RET W4: CPL P3.6 ;蜂鳴器驅(qū)動電平取反 MOV R7,#628 DE4: DJNZ R7,DE4 DEC R6 CJNE R6,#00,W4 ;反復(fù)循環(huán) RET W5: CPL P3.6 ;蜂鳴器驅(qū)動電平取反 MOV R7,#828 DE5: DJNZ R7,DE5 DEC R6 CJNE R6,#00,W5 ;反復(fù)循環(huán) RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 顯示程序 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DISPLAY: MOV R1,#78H ;立即數(shù)76H送寄存器中 MOV R5,#0FDH ;立即數(shù)FEH送寄存器R5中 PLAY: MOV A,R5 ;寄存器R5中的數(shù)值送累加器A中 MOV P2,A ;累加器A中的數(shù)值送P3口 MOV A,@R1 ;以寄存器R1中的數(shù)為地址單元的數(shù)值送累加器中 MOV DPTR,#TAB ;16位地址送地址寄存器中 MOVC A,@A+DPTR ;以中的地址為基地變址尋址單元中的數(shù)送累加器 MOV P1,A ;累加器A中的數(shù)值送P1口 MOV R6,#14H ;立即數(shù)據(jù)14送寄存器R6中 DL1:MOV R7,#19H ;立即數(shù)據(jù)19送寄存器R7中 DL2:DJNZ R7,DL2 ;寄存器中的數(shù)據(jù)減1,不為零時則轉(zhuǎn)移 DJNZ R6,DL1 ;寄存器中的數(shù)據(jù)減1,不為零時則轉(zhuǎn)移 DEC R1 ;寄存器R1中的數(shù)值加1 MOV A,R5 ;寄存器R5中的數(shù)值送累加器A中 JNB ACC.3,ENDOUT ;地址位為0則轉(zhuǎn)到ENDOUT RL A ;累加器循環(huán)右移 MOV R5,A ;累加器A中的數(shù)值送寄存器R5中 AJMP PLAY ;絕對短轉(zhuǎn)移 ENDOUT: SETB P3.5 ;置P3.5口 RET ;返回 TAB: DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,088H EEE: END ;結(jié)束
|