單片機(jī)控制技術(shù)與應(yīng)用(劉靖)課件4_第1頁(yè)
單片機(jī)控制技術(shù)與應(yīng)用(劉靖)課件4_第2頁(yè)
單片機(jī)控制技術(shù)與應(yīng)用(劉靖)課件4_第3頁(yè)
單片機(jī)控制技術(shù)與應(yīng)用(劉靖)課件4_第4頁(yè)
單片機(jī)控制技術(shù)與應(yīng)用(劉靖)課件4_第5頁(yè)
已閱讀5頁(yè),還剩39頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、4.1匯編語(yǔ)言程序設(shè)計(jì)概述(1)匯編語(yǔ)言的特點(diǎn) 助記符指令和機(jī)器指令一一對(duì)應(yīng),所以用匯編語(yǔ)言編寫(xiě)的程序效率高,占用存儲(chǔ)空間小,運(yùn)行速度快,因此匯編語(yǔ)言能編寫(xiě)出最優(yōu)化的程序。 使用匯編語(yǔ)言編程比使用高級(jí)語(yǔ)言困難,因?yàn)閰R編語(yǔ)言是面向計(jì)算機(jī)的,匯編語(yǔ)言的程序設(shè)計(jì)人員必須對(duì)計(jì)算機(jī)硬件有相當(dāng)深入的了解。 匯編語(yǔ)言能直接訪問(wèn)存儲(chǔ)器及接口電路,也能處理中斷,因此匯編語(yǔ)言程序能夠直接管理和控制硬件設(shè)備。 匯編語(yǔ)言缺乏通用性,程序不易移植,各種計(jì)算機(jī)都有自己的匯編語(yǔ)言,不同計(jì)算機(jī)的匯編語(yǔ)言之間不能通用;但是掌握了一種計(jì)算機(jī)系統(tǒng)的匯編語(yǔ)言后,學(xué)習(xí)其他的匯編語(yǔ)言就不太困難了。(2)匯編語(yǔ)言的語(yǔ)句格式:;(3)匯編語(yǔ)

2、言程序設(shè)計(jì)的步驟 建立數(shù)學(xué)模型。 確定算法。 制定程序流程圖。 確定數(shù)據(jù)結(jié)構(gòu)。 寫(xiě)出源程序。 上機(jī)調(diào)試程序。4.2偽指令偽指令是程序員發(fā)給匯編程序的命令,也稱為匯編命令或匯編程序控制指令。Cygnal常見(jiàn)匯編語(yǔ)言程序中常用的偽指令如下。(1)ORG (ORiGin)匯編起始地址命令 在匯編語(yǔ)言源程序的開(kāi)始,通常都用一條ORG偽指令來(lái)實(shí)現(xiàn)規(guī)定程序的起始地址。在十字路口交通燈控制中,用ORG 0000H來(lái)開(kāi)始程序。(2)END (END of assembly) 匯編終止命令 匯編語(yǔ)言源程序的結(jié)束標(biāo)志,用于終止源程序的匯編工作。在整個(gè)源程序中只能有一條END命令,且位于程序的最后。在十字路口交通燈

3、控制中,用END來(lái)結(jié)束的程序。(3)EQU (EQUate) 賦值命令 (4)DB (Define Byte) 定義字節(jié)命令 (5)DW (Define Word) 定義數(shù)據(jù)字命令 (6)DS (Define Stonage ) 定義存儲(chǔ)區(qū)命令 (7)BIT位定義命令 (8)DATA數(shù)據(jù)地址賦值命令 4.3單片機(jī)匯編語(yǔ)言程序的基本結(jié)構(gòu)形式(1)順序程序【例4-1】三字節(jié)無(wú)符號(hào)數(shù)相加,其中被加數(shù)在內(nèi)部RAM的50H、51H和52H單元中,加數(shù)在內(nèi)部RAM的53H、5414和55H單元中,要求把相加之和存放在50H、51H和52H單元中,進(jìn)位存放在位尋址區(qū)的00H位中。 其中: 在十字路口交通燈控

4、制中,用到MOVR0,#0FFH,MOVA,#01H等?!纠?-2】從50個(gè)字節(jié)的無(wú)序表中查找一個(gè)關(guān)鍵字“40H”。(2)分支程序 單分支程序【例4-3】變量X存放在VAR單元內(nèi),函數(shù)值Y存放在FUNC單元中,試按下式的要求給Y賦值:Y= 本題的程序流程見(jiàn)圖4-1(a)。參考程序: 圖4-1例4-3的分支流程圖這個(gè)程序的特征是先比較判斷,然后按比較結(jié)果賦值,這實(shí)際是三分支歸一的流程圖,因此,至少要用兩個(gè)轉(zhuǎn)移指令。初學(xué)者很容易犯的一個(gè)錯(cuò)誤是:漏掉了其中的SJMP DONE語(yǔ)句,因?yàn)榱鞒虉D中沒(méi)有明顯的轉(zhuǎn)移痕跡。這個(gè)程序也可以按圖4-1(b)的流程圖來(lái)編寫(xiě),其特征是先賦值,后比較判斷,然后修改賦值并

5、結(jié)束。參考程序: 多分支程序參見(jiàn)圖4-2。(3)循環(huán)程序循環(huán)程序一般由4部分組成:圖4-2多分支程序轉(zhuǎn)移 置循環(huán)初值,即確立循環(huán)開(kāi)始時(shí)的狀態(tài); 循環(huán)體(工作部分),要求重復(fù)執(zhí)行的部分; 循環(huán)修改,循環(huán)程序必須在一定條件下結(jié)束,否則就要變成死循環(huán); 循環(huán)控制部分,根據(jù)循環(huán)結(jié)束條件,判斷是否結(jié)束循環(huán)。以上4個(gè)部分可以有兩種組織方式?!纠?-4】從BLOCK單元開(kāi)始存放一組無(wú)符號(hào)數(shù),一般稱為一個(gè)數(shù)據(jù)塊。數(shù)據(jù)塊長(zhǎng)度放在LEN單元,編寫(xiě)一個(gè)求和程序,將和存入SUM單元,假設(shè)和為不超過(guò)8位二進(jìn)制數(shù)。在置初值時(shí),將數(shù)據(jù)塊長(zhǎng)度置入一個(gè)工作寄存器,將數(shù)據(jù)塊首地址送入另一個(gè)工作寄存器,一般稱它為數(shù)據(jù)塊地址指針。每

6、做一次加法之后,修改地址指針,以便取出下一個(gè)數(shù)來(lái)相加,并且使計(jì)數(shù)器減1。到計(jì)數(shù)器減到0時(shí),求和結(jié)束,把和存入SUM即可。 參考程序(各單元的地址是任意的):以上程序在計(jì)數(shù)器初值不為零時(shí)是沒(méi)有問(wèn)題的,但若是數(shù)據(jù)塊的長(zhǎng)度有可能為零,則將出現(xiàn)問(wèn)題。當(dāng)R2初值為零,減1之后將為FFH,故要做256次加法之后才會(huì)停止,顯然和題意不符。若考慮到這種情況,則可按下面的方式來(lái)編寫(xiě)程序,在做加法之前,先判斷一次R2的初值是否為零。整個(gè)程序仍基本套用原來(lái)的形式。其中: CLRbit;清“0”bit位。在十字路口交通燈控制中,用到CLR P2.4來(lái)熄滅燈。 將源操作數(shù)(Rn或direct)減1,結(jié)果回送到Rn寄存器

7、或direct中去。如果結(jié)果不為0,則轉(zhuǎn)移到標(biāo)號(hào)為rel的子程序中去。允許程序員把寄存器Rn或內(nèi)部RAM的direct單元用作程序循環(huán)計(jì)數(shù)器。主要用于控制程序循環(huán)。以減1后是否為“0”作為轉(zhuǎn)移條件,即可實(shí)現(xiàn)按次數(shù)控制循環(huán)。最常見(jiàn)的多重循環(huán)是由DJNZ指令構(gòu)成的軟件延時(shí)程序,它是常用的程序之一。例如:50ms延時(shí)程序。延時(shí)程序與Cygnal指令執(zhí)行時(shí)間有很大的關(guān)系。在使用12MHz晶振時(shí),一個(gè)機(jī)器周期為1s,執(zhí)行一條DJNZ指令的時(shí)間為2/3,用雙重循環(huán)方法寫(xiě)出下面的延時(shí)50ms的程序:以上延時(shí)程序不太精確,它沒(méi)有考慮到除“DJNZR6,DEL2”指令外的其他指令的執(zhí)行時(shí)間。如把其他指令的執(zhí)行時(shí)

8、間計(jì)算在內(nèi),它的延時(shí)時(shí)間為:(250+1+2)200+1=50.301ms如果要求比較精確的延時(shí),可按如下修改:實(shí)際延遲時(shí)間為50.001ms。注意 軟件延時(shí)程序不允許有中斷,否則將嚴(yán)重影響定時(shí)的準(zhǔn)確性。在十字路口交通燈控制中用DjnzR7,loop9DjnzR6,loop8Djnz R5,loop7來(lái)實(shí)現(xiàn)延時(shí)。(4) 子程序的設(shè)計(jì) 子程序設(shè)計(jì)原則子程序是一種能完成某一特定任務(wù)的程序段,其資源要為所有調(diào)用程序共享。因此,子程序在結(jié)構(gòu)上應(yīng)具有獨(dú)立性和通用性。在編寫(xiě)子程序時(shí)應(yīng)注意以下問(wèn)題。子程序的第一條指令的地址稱為子程序的入口地址,該指令前必須有標(biāo)號(hào)。主程序調(diào)用子程序有兩條:絕對(duì)調(diào)用指令A(yù)CAL

9、L addr11長(zhǎng)調(diào)用指令LCALL addr16注意設(shè)置堆棧指針和現(xiàn)場(chǎng)保護(hù)。最后一條指令必須是RET指令。子程序可以嵌套,即子程序可以調(diào)用子程序。在子程序調(diào)用時(shí),要注意參數(shù)傳遞的問(wèn)題。 子程序的基本結(jié)構(gòu) 4.4Cygnal單片機(jī)匯編語(yǔ)言程序設(shè)計(jì)舉例(1)算術(shù)運(yùn)算程序【例4-5】假定R2、R3和R4、R5分別存放兩個(gè)16位的帶符號(hào)二進(jìn)制數(shù),其中R2和R4的最高位為兩數(shù)的符號(hào)位。請(qǐng)編寫(xiě)帶符號(hào)雙字節(jié)二進(jìn)制數(shù)的加減法運(yùn)算程序,以BSUB為減法程序入口,以BADD為加法程序入口,以R6、R7保存運(yùn)算結(jié)果。參考程序:(2)數(shù)制轉(zhuǎn)換程序【例4-6】在內(nèi)部RAM的hex單元中存有兩位十六進(jìn)制數(shù),試將其轉(zhuǎn)換為

10、ASCII碼,并存放于asc和asc+1兩個(gè)單元中。主程序(MAIN):子程序(HASC):其中,RET為子程序的返回指令在十字路口交通燈控制中用RET來(lái)實(shí)現(xiàn)子程序的返回。(3)定時(shí)程序有多個(gè)定時(shí)需要,可以先設(shè)計(jì)一個(gè)基本的延時(shí)程序,使其延遲時(shí)間為各定時(shí)時(shí)間的最大公約數(shù),然后就以此基本程序作為子程序,通過(guò)調(diào)用的方法實(shí)現(xiàn)所需要的不同定時(shí)。例如要求的定時(shí)時(shí)間分別為5s 、10s和20s并設(shè)計(jì)一個(gè)1s延時(shí)子程序DELAY,則不同定時(shí)的調(diào)用情況表示如下:其中:長(zhǎng)調(diào)用指令LCALL addr16在十字路口交通燈控制中用Lcalldelay1來(lái)調(diào)用延時(shí)。(4)查表程序假定有44鍵盤,鍵掃描后把被按鍵的鍵碼放在累加器A中,鍵碼與處理子程序入口地址的對(duì)應(yīng)關(guān)系為:并假定處理子程序在ROM 64KB的范圍內(nèi)分布。要求

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論