版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
MCS—51單片機(jī)2.7程序的基本結(jié)構(gòu)MCS—51單片機(jī)2.7程序的基本結(jié)構(gòu)12.7
程序的基本結(jié)構(gòu)一、緒論
二、基本結(jié)構(gòu)1.順序結(jié)構(gòu)2.分支結(jié)構(gòu)3.查表結(jié)構(gòu)4.子程序結(jié)構(gòu)5.循環(huán)結(jié)構(gòu)2.7程序的基本結(jié)構(gòu)一、緒論二、基本結(jié)緒論在匯編語言程序設(shè)計中,普遍采用結(jié)構(gòu)化程序設(shè)計方法。任何復(fù)雜的程序都可由順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、子程序結(jié)構(gòu)等程序構(gòu)成。結(jié)構(gòu)程序設(shè)計的特點是程序的結(jié)構(gòu)清晰、易于讀寫和驗證、可靠性高。緒論在匯編語言程序設(shè)計中,普遍
不管多么簡單或復(fù)雜的程序,總離不開若干順序程序段所組成的。如圖1所示,A框和B框分別代表不同的程序段,是A、B順序執(zhí)行。它是最簡單、最基本的程序結(jié)構(gòu),其特點是按指令的排列順序一條條地執(zhí)行,直到全部指令執(zhí)行完畢為止。
圖2-7-1順序程序結(jié)構(gòu)
ABab不管多么簡單或復(fù)雜的程序,總離不開若干順幾種基本結(jié)構(gòu)順序結(jié)構(gòu)分支結(jié)構(gòu)查表結(jié)構(gòu)子程序結(jié)構(gòu)循環(huán)結(jié)構(gòu)基本結(jié)構(gòu)順序結(jié)構(gòu)分支結(jié)構(gòu)查表結(jié)構(gòu)子程序結(jié)構(gòu)循環(huán)結(jié)構(gòu)幾種基本結(jié)構(gòu)順序結(jié)構(gòu)分支結(jié)構(gòu)查表結(jié)構(gòu)子程序結(jié)構(gòu)循環(huán)結(jié)構(gòu)基本結(jié)順序結(jié)構(gòu)
程序段A
程序段B
順序結(jié)構(gòu)程序:是一種最簡單、最基本的程序,按照程序編寫的順序逐條依次執(zhí)行,直到程序結(jié)束。這是程序的最基本的形式,任何程序都離不開這種形式。順序結(jié)構(gòu)順序結(jié)構(gòu)程序段A程序段B
【例1】將片內(nèi)RAM的20H單元中的壓縮BCD碼拆成兩個ASCII碼存入21H、22H單元。高4位轉(zhuǎn)換后存在21H單元,低4位轉(zhuǎn)換后存在22H單元。圖1-2壓縮BCD碼轉(zhuǎn)換成兩個ASCII字符圖方法一分析:兩個BCD碼拼裝在一個單元內(nèi)叫壓縮BCD碼。設(shè)20H內(nèi)為壓縮BCD碼59,22H通過變換BCD碼“5”為ASCII碼“35”;BCD碼“9”變換為ASCII碼“39”。【例1】將片內(nèi)RAM的20H單元中的壓縮BCD碼程序入口:20H程序出口:21H、22H根據(jù)分析圖設(shè)計程序:MOVA,20HANLA,#0FH;屏蔽高4位ADDA,#30H;得到低4位ASCII碼MOV21H,A;個位ASCII碼送21HANL20H,#0F0H;屏蔽低4位MOVA,20H;送ASWAPA;高位交換到低位ADDA,#30H;得到高4位ASCII碼MOV22H,A;十位ASCII碼送22H程序入口:20H程序出口:21H、22H分支結(jié)構(gòu)順序結(jié)構(gòu)程序只能解決一些簡單的算術(shù)、邏輯運算、傳送操作等。實際控制問題往往要求計算機(jī)能根據(jù)給定的條件進(jìn)行判斷,再選擇不同的處理路徑,從而表現(xiàn)出某種智能。程序要求改變程序執(zhí)行順序,即程序的流向有兩個或兩個以上時,這種程序結(jié)構(gòu)稱為分支程序結(jié)構(gòu),分支程序的特點是程序中包含有轉(zhuǎn)移指令。根據(jù)分支出口的不同分為簡單分支程序和多路分支程序。分支結(jié)構(gòu)順序結(jié)構(gòu)程序只能解決一些簡單的算術(shù)、分支結(jié)構(gòu)
程序段A
程序段B分支結(jié)構(gòu):程序中含有轉(zhuǎn)移指令分支結(jié)構(gòu)無條件分支有條件分支單分支結(jié)構(gòu)多分支結(jié)構(gòu)條件YN分支結(jié)構(gòu)分支結(jié)構(gòu)程序段A程序段B分支結(jié)構(gòu):程
程序段2條件滿足嗎?YN開始
程序段1
程序段3
結(jié)束分支程序2開始
程序段1
結(jié)束
數(shù)字關(guān)鍵碼
分支程序3分支程序1
程序段2
(b)多分支結(jié)構(gòu)分支程序的兩類結(jié)構(gòu)(a)單分支結(jié)構(gòu)程序段2條件滿足嗎?YN開始程序段1
解:單片機(jī)中負(fù)數(shù)一般用補碼表示,只要能夠判斷x=0、x<0和x>0便能夠方便實現(xiàn)函數(shù)。采用JZ指令進(jìn)行判斷,程序流程圖如圖2-1所示。圖2-7-2程序流程圖
解:單片機(jī)中負(fù)數(shù)一般用補碼表示,只要能夠判斷x=0、x<
START:MOVA,30HJZOUT;x=0,轉(zhuǎn)移ANLA#80H;x≠0,判斷正負(fù)號JZOUT1;x小于0,y=xMOV31H,30H
SJMPOK
OUT:MOV31H,#3;x=0,則y=3OUT1:MOVA,#5;x>0,y=5+xADDA,30HMOV31H,AOK:SJMP$START:MOVA,30H查表結(jié)構(gòu)MCS-51匯編指令系統(tǒng)提供了兩條專用的查表指令:MOVCA,@A+DPTR基址寄存器DPTR能提供16位基址,因此查表范圍可達(dá)64KB空間,且表格的大小和位置也可在64KBROM中任意安排。MOVCA,@A+PC表格只能放在該指令的256個地址單元內(nèi),地址需要調(diào)整。查表是把事先安排的數(shù)據(jù)按照一定的順序編制成表格存放在ROM中,然后根據(jù)輸入的數(shù)據(jù),從表格中查出所需的結(jié)果。查表可以將復(fù)雜的問題變得簡單。查表結(jié)構(gòu)MCS-51匯編指令系統(tǒng)提供了兩條專用的查表指令:M
【例3】根據(jù)項目一流水燈電路電路,采用查表方法實現(xiàn)相同功能。解:用查表法實現(xiàn)流水燈,要設(shè)計一個LED點亮碼表格,根據(jù)8個LED點亮次序,制作數(shù)碼表格,為了循環(huán)點亮LED,在點亮第8個LED后返回點亮第1個LED,表格可以設(shè)置一個結(jié)束標(biāo)志碼FFH。當(dāng)取顯示碼為結(jié)束標(biāo)志FFH時,返回取第1個顯示碼?!纠?】根據(jù)項目一流水燈電路電路,采用查表方法實現(xiàn)ORG0000HLJMPSTRATORG0100HSTRAT:MOVR1,#0
;
R1用于計數(shù),R1清零
MOVDPTR,#TAB
;設(shè)置表地址指針GO:MOVA,R1LOOP:MOVCA,@A+DPTR
;查表取顯示碼
CJNEA,#0FFH,OK
;不是結(jié)束碼顯示碼送P0口
SJMPSTRAT
;是結(jié)束碼,重新開始
OK:MOVP0,A
LCALLDEL
;延時1s
INCR1
;循環(huán)左移一次
SJMPGO(此處略延時程序DEL)
TAB:DB0FEH,0FDH,0FBH,0F7H,0EFH
DB0DFH,0BFH,7FH,0FFH
;LED點亮碼,0FFH為結(jié)束碼
..........
ENDORG0000H
可以被調(diào)用的程序段稱為子程序。在實際問題中,常常會遇到在一個程序中有許多相同的運算或操作,例如多字節(jié)的加、減、字符處理等。如果每遇到這些運算和操作,都從頭做起,則使程序非常繁瑣且浪費內(nèi)存。因此在實際應(yīng)用中,通常把這些多次使用的程序段,按一定結(jié)構(gòu)編好,存放在內(nèi)存中,當(dāng)需要時,程序可以去調(diào)用這些獨立的程序段。因此,字程序就是一種能完成某一特定任務(wù)的程序段。子程序可以被調(diào)用的程序段稱為子程序。在實際問題中,子程序的設(shè)計1、給每個子程序賦予名字2、現(xiàn)場保護(hù)與恢復(fù)3、參數(shù)的正確傳遞4、子程序說明子程序的設(shè)計1、給每個子程序賦予名字2、現(xiàn)場保護(hù)與恢復(fù)3、參在編寫子程序時應(yīng)注意以下問題1、子程序應(yīng)有入口地址(用標(biāo)號)2、主程序調(diào)用子程序兩個子程序調(diào)用指令:(1)絕對調(diào)用指令:ACALLaddr11(2)長調(diào)用指令:LCALLaddr16在編寫子程序時應(yīng)注意以下問題1、子程序應(yīng)有入口地址(用標(biāo)號)在編寫子程序時應(yīng)注意以下問題3、注意設(shè)置堆棧指針和現(xiàn)場保護(hù)4、最后一條指令必須是RET指令5、子程序可以嵌套,即子程序可以調(diào)用子程序(最多8層)6、在子程序調(diào)用時,還要注意參數(shù)傳遞的問題在編寫子程序時應(yīng)注意以下問題3、注意設(shè)置堆棧指針和現(xiàn)場保護(hù)4子程序的基本結(jié)構(gòu)MAIN:┇ ;IN為主程序或調(diào)用程序標(biāo)號┇
LCALLSUB;調(diào)用子程序SUB ┇┇SUB: PUSHPSW ;現(xiàn)場保護(hù)
PUSHACC
子程序處理程序段
POPACC ;現(xiàn)場恢復(fù)
POPPSW RET ;最后一條指令必須為RET子程序的基本結(jié)構(gòu)MAIN:┇ ;I【例4】編寫一個通用子程序,實現(xiàn)N個單字節(jié)無符號數(shù)之和(N<100H)。調(diào)用該子程序完成將片內(nèi)部30H~5FH中存放的單字節(jié)無符號數(shù)求和,結(jié)果存入60H、61H單元中(高位在前)?!纠?】編寫一個通用子程序,實現(xiàn)N個單字節(jié)無符號數(shù)之和
ORG 0100HSUB2: PUSH PSW ;保護(hù)現(xiàn)場
MOV @R1,#0 ;目的單元清0 INC R1 MOV @R1,#0LOOP: MOV A,@R0 ;取數(shù)
ADD A,@R1 ;求和
MOV @R1,A ;存和的低字節(jié)數(shù)
DEC R1 ;修改指針,指向和的高位地址
CLR A ADDC A,@R1 ;取進(jìn)位位
MOV @R1,A ;存和的高字節(jié)數(shù)
INC R1 ;修改指針,指向和的低位地址
INC R0;修改指針,指向下一個單元
DJNZ R2,LOOP POP PSW ;恢復(fù)現(xiàn)場
RET(1)子程序如下: ORG 0100H(1)子程序如 ORG 0000HMAIN: MOV R0,#30H ;設(shè)置R0為入口指針寄存器
MOV R1,#60H ;設(shè)置R1為出口指針寄存器
MOV R2,#2FH ;設(shè)置R2傳遞字節(jié)數(shù)
ACALL SUB2 ……TOEND:END(2)子程序如下: ORG 0000H(2)子程序如下:在應(yīng)用程序中,有時需要多次反復(fù)執(zhí)行相同的操作,只是操作的操作數(shù)不同,這時就可以采用循環(huán)程序結(jié)構(gòu)。循環(huán)程序可以顯著縮短程序,減少程序所占用的存儲空間,使程序結(jié)構(gòu)大大優(yōu)化。循環(huán)結(jié)構(gòu)循環(huán)程序一般包括以下幾部分:(1)設(shè)置循環(huán)初值在進(jìn)入循環(huán)之前,要設(shè)置循環(huán)次數(shù)、循環(huán)體工作單元的
初值等。(2)循環(huán)處理循環(huán)體是循環(huán)程序需要反復(fù)執(zhí)行的部分,是循環(huán)程序結(jié)構(gòu)的
主體部分。(3)循環(huán)修改每執(zhí)行一次循環(huán),要對參數(shù)進(jìn)行修改,使指針指向下一數(shù)據(jù)
所在的位置,為進(jìn)入下一輪循環(huán)作準(zhǔn)備。(4)循環(huán)控制應(yīng)用程序的條件判斷循環(huán)程序是否結(jié)束。在應(yīng)用程序中,有時需要多次反復(fù)執(zhí)行相同
循環(huán)程序有兩種基本結(jié)構(gòu),圖2-7-3循環(huán)程序基本結(jié)構(gòu)一種是先執(zhí)行后判斷,一種是先判斷后執(zhí)行。循環(huán)程序有兩種基本結(jié)構(gòu),圖2-7-3循環(huán)【例5】設(shè)8051使用12MHz晶振,試設(shè)計延遲100ms的延時程序。(一般延時程序采用循環(huán)程序結(jié)構(gòu))
DELAY:MOVR2,#200 ;延時一個機(jī)器周期T=1msLOOP1:MOVB,#250 ;每循環(huán)延時1ms
LOOP2:NOP DJNZB,LOOP2 ;250*2=500ms DJNZR2,LOOP1 ;0.5ms*200=100ms RET延時程序如下:【例5】設(shè)8051使用12MHz晶振,試設(shè)計延遲100m【例6】對項目一流水燈電路,要求每個LED閃亮5次(亮滅各0.5s)后,再轉(zhuǎn)到下一個LED閃亮,循環(huán)不止。
ORG0000H
;程序開始地址
MAIN:MOVA,#0FEH;初值11111110送P0口
;低電平點亮LEDLOOP:MOVR5,#5;閃爍次數(shù)設(shè)置
MOVP0,ALCALLDEL;延時0.5sLOOP1:MOVP0,#0FFH;LED熄滅0.5s
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中學(xué)學(xué)生社團(tuán)活動總結(jié)與評估制度
- 養(yǎng)老院工作人員保密制度
- 企業(yè)內(nèi)部保密協(xié)議簽訂制度
- 公共交通車輛調(diào)度管理制度
- 2026年稅務(wù)籌劃師稅收優(yōu)惠政策考試題目
- 2026年網(wǎng)絡(luò)直播與新媒體監(jiān)管考試題庫
- 2026年農(nóng)業(yè)機(jī)械化技術(shù)操作考核標(biāo)準(zhǔn)
- 2026年化學(xué)品安全管理與應(yīng)急處理模擬題
- 2026年冰雕制作合同
- 2025年元宇宙虛擬財產(chǎn)價值評估爭議解決協(xié)議
- 吉林大學(xué)《電磁場與電磁波》2021-2022學(xué)年期末試卷
- 鮮花 高清鋼琴譜五線譜
- 安全生產(chǎn)標(biāo)準(zhǔn)化持續(xù)改進(jìn)方案
- CJT511-2017 鑄鐵檢查井蓋
- 2024年高考語文考前專題訓(xùn)練:現(xiàn)代文閱讀Ⅱ(散文)(解析版)
- 躁狂發(fā)作的護(hù)理診斷及護(hù)理措施
- 第六節(jié)暫準(zhǔn)進(jìn)出口貨物課件
- 中醫(yī)外科乳房疾病診療規(guī)范診療指南2023版
- 壓實瀝青混合料密度 表干法 自動計算
- 田口三次設(shè)計
- 《我的戒煙》閱讀答案
評論
0/150
提交評論