2022年單片機課件-匯編語言程序設(shè)計_第1頁
2022年單片機課件-匯編語言程序設(shè)計_第2頁
2022年單片機課件-匯編語言程序設(shè)計_第3頁
2022年單片機課件-匯編語言程序設(shè)計_第4頁
2022年單片機課件-匯編語言程序設(shè)計_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第7章匯編語言程序設(shè)計7.1偽指令7.2算術(shù)運算程序的設(shè)計7.3循環(huán)程序的設(shè)計7.4查表程序的設(shè)計7.5檢索程序的設(shè)計7.6分支程序的設(shè)計7.7碼制轉(zhuǎn)換程序的設(shè)計7.8邏輯操作程序主要內(nèi)容9/22/20241第7章匯編語言程序設(shè)計

程序設(shè)計是為了解決某一個問題,把指令(或語句)按照一定的意圖有序地組合在一起。目前,基于MCS-51單片機的程序開發(fā)設(shè)計有采用匯編語言和高級語言2種形式,高級語言有采用C語言、BASIC語言、PLM語言等,大多數(shù)集成開發(fā)環(huán)境(IntegratedDevelopmentEnvironment,IDE)軟件都支持這2種形式。9/22/20242匯編程序設(shè)計的步驟:(1)分析題目或課題的要求,正確理解解決什么問題,如何解決問題、有哪些可利用的資源、對計算精度的要求等;另外,了解應(yīng)用系統(tǒng)硬件的結(jié)構(gòu)和功能與課題任務(wù)的關(guān)聯(lián)。(2)確定解決問題的方案,畫出程序流程框圖;(2)根據(jù)解決方案,確定變量及其數(shù)據(jù)存儲格式,給各個變量分配存儲空間;(3)根據(jù)程序流程圖,選用合適的指令編寫程序,完成源程序的設(shè)計;(4)在集成開發(fā)環(huán)境上調(diào)試,完成設(shè)計要求的功能。第7章匯編語言程序設(shè)計9/22/202437.1偽指令

偽指令(PseudoInstruction)是匯編語言中起解釋說明的命令,它不是單片機的指令。在單片機的集成開發(fā)環(huán)境中,向匯編系統(tǒng)說明程序存儲在程序存儲器的哪個區(qū)域、本匯編語言程序到何處結(jié)束、變量代號對應(yīng)的單元地址或所代表的數(shù)值等。在匯編時,偽指令不會產(chǎn)生目標代碼,不影響程序的執(zhí)行。9/22/202447.1偽指令常用的有以下幾種偽指令:(1)設(shè)置起始地址偽指令ORGORGxxxxH如:ORG0100HSUB:MOVR0,#30H ……(2)賦值偽指令EQU變量代號EQU數(shù)值如:LENEQU20;在程序中變量LEN的值為20HXdata EQU4F8BH;在程序中變量Xdata的值為4F8BH9/22/202457.1偽指令(3)定義字節(jié)數(shù)據(jù)偽指令DB[xxxxH]DB data如:2000H DB30H ; 偽指令DB也可用來定義多個連續(xù)單元為常數(shù),即用來定義一組單字節(jié)數(shù)據(jù)組成的常數(shù)表。如:ORG1000HDB30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,2EH,0DH

9/22/202467.1偽指令(4)定義雙字節(jié)數(shù)據(jù)偽指令DW[xxxxH]DW data16如: 1000HDW0FDE1H 1100HDW1345,2241,34556(5)位地址賦值偽指令BIT變量代號 BIT 位地址(6)匯編結(jié)束偽指令ENDEND9/22/202477.2算術(shù)運算程序的設(shè)計在MCS-51單片機指令系統(tǒng)中,算術(shù)運算指令僅支持2個無符號的8位二進制數(shù)的運算,二進制數(shù)算術(shù)運算是按字節(jié)的方式進行的。9/22/202487.2算術(shù)運算程序的設(shè)計例1多字節(jié)二進制加法。示,圖中一個方框代表一個單元。Cy表示進位。當最低字節(jié)(低8位)運算時,如果令Cy為0,那么,完成3個字節(jié)的加法運算進行了3次相同的單字節(jié)加法操作,可以采用循環(huán)結(jié)構(gòu)實現(xiàn)2個3字節(jié)數(shù)據(jù)的加法運算。

圖7.1二進制數(shù)加法算法9/22/202497.2算術(shù)運算程序的設(shè)計例2多字節(jié)二進制減法。 多字節(jié)二進制減法與多字節(jié)二進制加法相似,圖7.2為3字節(jié)二進制減法的算法。

圖7.2減法算法9/22/2024107.2算術(shù)運算程序的設(shè)計例3多位十進制數(shù)加法。 十進制數(shù)在計算機中可以采用BCD碼的形式存放。采用緊湊形式(或壓縮式)BCD碼存放十進制數(shù)時,一個存儲單元可以存儲2位。MCS-51單片機僅支持二進制加法運算,采用ADD和ADDC指令的結(jié)果是二進制數(shù),因此,2個以BCD碼形式存儲的數(shù)據(jù),在用ADD和ADDC運算之后,必須對其運算結(jié)果進行調(diào)整。多位十進制數(shù)加法的算法與多字節(jié)二進制數(shù)算法相似,如圖7.3所示。9/22/2024117.2算術(shù)運算程序的設(shè)計圖7.3多位十進制加法算法9/22/2024127.2算術(shù)運算程序的設(shè)計例4多位十進制減法在第3章的例30中,我們介紹了2位十進制數(shù)減法算法:X-Y=X+100-Y

X+9AH-Y,把十進制減法變換成二進制減法(求十進制減數(shù)的補碼)和十進制加法2步進行。多位十進制數(shù)減法也采用了同樣的算法。設(shè)被減數(shù)存放在20H開始的內(nèi)部RAM存儲單元,減數(shù)存放在30H開始的存儲單元,6位十進制數(shù)減法的程序如下9/22/2024137.2算術(shù)運算程序的設(shè)計(1)2位十進制數(shù)減法子程序:入口條件:R0指出被減數(shù)所在單元的地址;R1指出減數(shù)所在單元的地址;出口條件:R0指出差所在單元的地址,進位在Cy中;

SH_SUB:MOVA,#9AH SUBBA,@R1 ADDA,@R0 DAA MOV@R0,A INCR0 INCR1 CPLC RET9/22/2024147.2算術(shù)運算程序的設(shè)計(2)6位十進制數(shù)加法程序:

MOVR0,#20H MOVR1,#30H MOVR5,#03H CLRCDOSUB: ACALLSH_SUB DJNZR5,DOSUB RET9/22/2024157.2算術(shù)運算程序的設(shè)計例5多字節(jié)數(shù)二進制乘法 2個多字節(jié)二進制數(shù)乘法的算法與按位進行十進制數(shù)乘法相似。把它轉(zhuǎn)換為幾個多字節(jié)與單字節(jié)的乘法運算,先分別計算出它們的部分積,然后按照規(guī)則把部分積累加計算出乘積。圖7.4為2個16位二進制數(shù)相乘的算法原理圖。圖中被乘數(shù)為X,其高八位和低八位分別存儲在XH和XL單元,乘數(shù)為Y,YH和YL分別高八位和低八位存儲單元。9/22/2024167.2算術(shù)運算程序的設(shè)計算法分2步進行:首先,分別用乘數(shù)的高八位和低八位與被乘數(shù)相乘,計算部分積,分別存儲在(XYH3),(XYH2),(XYH1)和(XYL3),(XYL2)(XYL1)單元;在編寫程序時,乘法運算可以用子程序調(diào)用的方法實現(xiàn)(第3章例33)。第二步,采用加法運算求出乘積存儲在(XY4)(XY3)(XY2)(XY1)單元。9/22/2024177.2算術(shù)運算程序的設(shè)計圖7.42個16位二進制數(shù)乘法算法9/22/2024187.2算術(shù)運算程序的設(shè)計例6多字節(jié)二進制除法 2個多字節(jié)無符號二進制數(shù)的除法是采用移位和減法運算實現(xiàn)的,實現(xiàn)過程與我們進行十進制數(shù)乘法形似,每次進行除法運算時,如果余數(shù)大于減數(shù)除以8位二進制數(shù)的程序流程圖。該算法要求被除數(shù)的高八位數(shù)據(jù)必須小于除數(shù),否則,作為溢出處理,子程序把標志位OV的狀態(tài)置為1,從子程序返回。9/22/2024197.2算術(shù)運算程序的設(shè)計圖7.5除法程序流程圖9/22/2024207.3循環(huán)程序的設(shè)計(一)循環(huán)結(jié)構(gòu)的組成循環(huán)結(jié)構(gòu)由4部分組成:初始化部分、循環(huán)處理部分、循環(huán)控制部分和循環(huán)結(jié)束部分。循環(huán)結(jié)構(gòu)組成圖見圖7.6。圖7.6循環(huán)結(jié)構(gòu)組成9/22/2024217.3循環(huán)程序的設(shè)計匯編語言程序設(shè)計中常見的典型循環(huán)結(jié)構(gòu)如圖7.7所示。(1)先處理后判斷的結(jié)構(gòu)(2)先判斷后處理的結(jié)構(gòu)圖7.7典型循環(huán)結(jié)構(gòu)9/22/2024227.3循環(huán)程序的設(shè)計(二)循環(huán)程序設(shè)計舉例例7設(shè)單片機系統(tǒng)采集的8個單字節(jié)數(shù)據(jù)存儲在單片機內(nèi)部RAM的30H開始的連續(xù)單元中,求它們的均值。 計算一組數(shù)據(jù)平均值的公式為:,其中,為第i個數(shù)據(jù),N為數(shù)據(jù)的個數(shù)。因此,要計算出平均值需要進行2種運算:求數(shù)據(jù)的總和、數(shù)據(jù)總和除以數(shù)據(jù)個數(shù)。 (1)求數(shù)據(jù)的總和設(shè)S為數(shù)據(jù)的總和,在計算機中求多個數(shù)據(jù)總和的算法如下:

9/22/2024237.3循環(huán)程序的設(shè)計圖7.8多個數(shù)據(jù)求總和的流程圖9/22/2024247.3循環(huán)程序的設(shè)計例8設(shè)有一個字符串以回車符(ASCII碼為0DH)為結(jié)束標志,并存放在內(nèi)部RAM的40H單元開始的連續(xù)存儲單元中,編寫測試字符串長度的程序。這是一個循環(huán)次數(shù)未知的循環(huán)程序設(shè)計例題。為了測試字符串的長度,字符串中的每個字符依次與回車符(0DH)比較,如果比較不相等,則字符串長度計數(shù)器加1,繼續(xù)測試;如果比較相等,表示該字符為回車符,則字符串結(jié)束,長度計數(shù)器的值就是字符串的長度。程序流程框圖如圖7.9所示。9/22/2024257.3循環(huán)程序的設(shè)計圖7.9測試字符串長度的程序流程框圖

9/22/2024267.3循環(huán)程序的設(shè)計(1)硬件電路原理圖(2)發(fā)光二極管布置示意圖圖7.10循環(huán)閃爍系統(tǒng)原理與布置示意圖9/22/2024277.3循環(huán)程序的設(shè)計示,MCS-51單片機的P1口控制8個發(fā)光二極管。編制一個循環(huán)閃爍的程序,要求每次相鄰的2個發(fā)光二極管為1組閃爍點亮3次后,轉(zhuǎn)移到下一組,8個發(fā)光二極管顯示1遍后,全部點亮,然后熄滅,又以每組2個燈的方式閃爍顯示,如此不斷循環(huán)。9/22/2024287.3循環(huán)程序的設(shè)計圖7.11循環(huán)閃爍系統(tǒng)的程序流程圖9/22/2024297.4查表程序的設(shè)計

查表程序是一種在單片機應(yīng)用系統(tǒng)中常用的程序,例如,顯示輸出時,利用查表程序提取字型編碼,數(shù)值運算時,利用它可以避免進行復(fù)雜的程序運算或轉(zhuǎn)換運算,可以完成數(shù)據(jù)插補、修正、計算、轉(zhuǎn)換等功能。9/22/2024307.4查表程序的設(shè)計例10設(shè)字符0~9、A~F的ASCII碼已作為常數(shù)存儲在程序存儲器中,編寫子程序由給定x()查找其對應(yīng)的ASCII碼。 ASCII碼為七位二進制編碼,一個單元也可存儲一個字符的ASCII碼。如果ASCII碼表存放在以ASC_TAB單元開始的區(qū)域,那么,存儲ASCII碼的單元地址與x的關(guān)系為:ASC_TAB+x。設(shè)存儲在寄存器R2中,從子程序返回時ASCII碼存儲在R2中,子程序程序如下:9/22/2024317.4查表程序的設(shè)計CHECHUP:MOVDPTR,#ASC_TAB;設(shè)置表的首地址 MOVA, R2 ;取x MOVC A, @A+DPTR;查表取ASCII碼 MOV R2, A ;存查到的ASCII碼 RETASC_TAB:DB30H,31H,32H,33H,34H,35H,36H,37H,38H,39HDB41H,42H,43H,44H,45H,46H9/22/2024327.5檢索程序的設(shè)計數(shù)據(jù)檢索為關(guān)鍵字查找,通常有兩種方法:順序檢索和對分檢索。本節(jié)介紹前者,對分檢索請參閱相關(guān)資料。

數(shù)據(jù)檢索順序檢索對分檢索9/22/2024337.5檢索程序的設(shè)計例15設(shè)內(nèi)部RAM有一單字節(jié)無符號數(shù)數(shù)據(jù)塊,存儲在以30H單元為首地址的區(qū)域中。長度為50個字節(jié),試編程找出其中最小的數(shù),并放在20H單元。如圖7.13例15的程序流程圖。

9/22/2024347.5檢索程序的設(shè)計9/22/2024357.5檢索程序的設(shè)計例16從一個字符串找出一個‘A’的關(guān)鍵字,字符串的結(jié)束標志為‘EOF’。 設(shè)字符串存放在20H單元開始的區(qū)域,字符以ASCII碼形式存儲,找到關(guān)鍵字標志位F0置1,否則清0。如圖7.14例16程序流程圖。9/22/2024367.5檢索程序的設(shè)計圖7.14例16程序流程圖9/22/2024377.6分支程序的設(shè)計分支程序主要是根據(jù)判斷條件的成立與否來確定程序的走向??山M成簡單分支結(jié)構(gòu)和多分支結(jié)構(gòu)。(一)單分支選擇結(jié)構(gòu)當程序的判斷僅有兩個出口,兩者選一,稱為單分支結(jié)構(gòu)。通常用條件判斷指令來選擇并確定程序的分支出口。這類單分支選擇結(jié)構(gòu)有三種典型的形式,見圖7.15。(1)如果條件滿足,執(zhí)行程序段2,否則,執(zhí)行程序段1,結(jié)構(gòu)如圖7.15(1)。(2)如果條件滿足,則不執(zhí)行程序段1,僅執(zhí)行程序段2;否則,先執(zhí)行程序段1,再執(zhí)行程序段2。結(jié)構(gòu)如圖7.15(2)。(3)在圖7.15(3)中,當條件不滿足時,重復(fù)執(zhí)行程序段1,只有當條件滿足時,才停止執(zhí)行程序段2。9/22/2024387.6分支程序的設(shè)計(1) (2) (3)

圖7.15單分支選擇結(jié)構(gòu)9/22/2024397.6分支程序的設(shè)計(二)多分支選擇結(jié)構(gòu)當程序的判別部分有兩個以上的出口流向時,稱為多分支選擇結(jié)構(gòu)。如圖7.16所示。圖7.16多分支選擇結(jié)構(gòu)9/22/2024407.6分支程序的設(shè)計例17和為2個帶符號單字節(jié)數(shù)據(jù),以原碼方式存放,編制程序求它們的乘積。MCS-51單片機的乘法指令支持2個8位無符號二進制數(shù)相乘,2個帶符號二進制數(shù)相乘,的方法如下:2個數(shù)符號相同,乘積符號為正,數(shù)值為2個數(shù)絕對值之積;2個數(shù)符號相異,乘積符號為負,數(shù)值為2個數(shù)絕對值之積。帶符號二進制乘法的程序流程圖如圖7.17所示。9/22/202441始,逐位加到BCD碼存儲單元的最低位,并進行十進制加法調(diào)(3)定義字節(jié)數(shù)據(jù)偽指令DB碼,數(shù)值運算時,利用它可以避免進行復(fù)雜的程序(3)根據(jù)程序流程圖,選用合適的指令編寫程序,數(shù)符‘A’~‘F’的ASCII碼為41H~46H,它們與其(4)在集成開發(fā)環(huán)境上調(diào)試,完成設(shè)計要求的功能。例3多位十進制數(shù)加法。這種邏輯運算在MCS-51單片機中可以由位操作指令法算法:X-Y=X+100-YX+9AH-Y,把十進用匯編語言和高級語言2種形式,高級語言有采用C該字符為回車符,則字符串結(jié)束,長度計數(shù)器的值始,逐位加到BCD碼存儲單元的最低位,并進行十進制加法調(diào)DB41H,42H,43H,44H,45H,46H例5多字節(jié)數(shù)二進制乘法10循環(huán)閃爍系統(tǒng)原理與布置示意圖7.6分支程序的設(shè)計圖7.17帶符號二進制乘法的程序流程圖9/22/2024427.6分支程序的設(shè)計例18設(shè)變量的值存放在內(nèi)部RAM的30H單元中,編程求解下列函數(shù)式,將求得的函數(shù)值存入40H單元。圖7.17例18程序設(shè)計框圖9/22/2024437.7碼制轉(zhuǎn)換程序的設(shè)計 在單片機應(yīng)用系統(tǒng)中,計算機CPU計算、存儲是以二進制形式進行的;人機交換信息時,經(jīng)常采用十進制;設(shè)備與設(shè)備之間交換信息時,有時采用ASCII碼;等等,碼制轉(zhuǎn)換程序是單片機應(yīng)用系統(tǒng)常用的程序之一。9/22/2024447.7碼制轉(zhuǎn)換程序的設(shè)計(一)二進制數(shù)與十進制數(shù)(BCD碼)之間的轉(zhuǎn)換程序設(shè)計例20設(shè)工作寄存器R6和R7中存儲16位二進制數(shù),R6中存放高八位,把該數(shù)轉(zhuǎn)換為BCD碼形式,并存結(jié)果于(R3),(R4),(R5)二進制數(shù)轉(zhuǎn)換為十進制數(shù)的方法為按權(quán)展開,設(shè)16位二進制數(shù),則對應(yīng)的十進制數(shù)為(7.3)轉(zhuǎn)換時,乘以2可以采用左移方法實現(xiàn),從最高位開始

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論