摘 要: 探討了MCS-51系列單片機結(jié)構(gòu)化程序設(shè)計相關(guān)問題,研究了MCS-51系列單片機結(jié)構(gòu)化程序的三種基本結(jié)構(gòu),并給出了程序?qū)崿F(xiàn)方法范例,介紹了MCS-51系列單片機結(jié)構(gòu)化程序設(shè)計步驟及各部分具體設(shè)計要求。
關(guān)鍵詞: 單片機 結(jié)構(gòu)化程序
1 MCS-51系列單片機結(jié)構(gòu)化程序設(shè)計概述
結(jié)構(gòu)化程序指程序組成結(jié)構(gòu)化、功能模塊化、運行流程化。結(jié)構(gòu)化程序要求將處理特定任務(wù)的代碼和數(shù)據(jù)與程序其余部分隔離,在MCS-51系列單片機結(jié)構(gòu)化程序中,實現(xiàn)隔離的方法是將處理特定任務(wù)的指令和數(shù)據(jù)設(shè)計成子程序或中斷服務(wù)子程序。這些子程序或中斷服務(wù)子程序稱作功能模塊,其具有確定功能,處理特定任務(wù),解決專門問題。
在MCS-51系列單片機結(jié)構(gòu)化程序設(shè)計時,按照總體規(guī)劃和總體設(shè)計,由若干軟件設(shè)計人員分別編程設(shè)計各功能模塊,再依據(jù)軟件結(jié)構(gòu)和程序流程,由若干功能模塊組成結(jié)構(gòu)化程序,實現(xiàn)應(yīng)用程序整體功能,解決復(fù)雜的實際問題。
MCS-51系列單片機結(jié)構(gòu)化程序具有結(jié)構(gòu)清晰、邏輯性強、易于維護(hù)、便于共享、運行穩(wěn)定、可靠性高等特點。按照結(jié)構(gòu)化程序設(shè)計要求編程,有助于規(guī)范軟件設(shè)計人員的編程工作,有助于提高軟件設(shè)計人員的編程效率,有助于提升軟件設(shè)計人員的編程水平。
2 三種基本結(jié)構(gòu)及程序?qū)崿F(xiàn)方法
MCS-51系列單片機結(jié)構(gòu)化程序由若干功能模塊構(gòu)成,功能模塊由三種基本結(jié)構(gòu)組成,即順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。由這三種基本結(jié)構(gòu)組成的功能模塊,能實現(xiàn)各種程序算法,解決復(fù)雜實際問題。
2.1 順序結(jié)構(gòu)
在順序結(jié)構(gòu)程序中,按先后順序,CPU逐條執(zhí)行指令或逐段執(zhí)行程序段。順序結(jié)構(gòu)分為逐條順序結(jié)構(gòu)和逐段順序結(jié)構(gòu)兩種。逐條順序結(jié)構(gòu)如圖1所示,逐段順序結(jié)構(gòu)如圖2所示。

2.2 選擇結(jié)構(gòu)
在選擇結(jié)構(gòu)程序中,CPU執(zhí)行條件判斷指令(或間接轉(zhuǎn)移指令),依據(jù)條件(或轉(zhuǎn)移目的地址)執(zhí)行對應(yīng)分支程序段。選擇結(jié)構(gòu)分為二分支選擇結(jié)構(gòu)和多分支選擇結(jié)構(gòu)。
2.2.1 二分支選擇結(jié)構(gòu)
在二分支選擇結(jié)構(gòu)程序中,CPU執(zhí)行條件判斷指令,判斷轉(zhuǎn)移條件。當(dāng)條件滿足時,CPU執(zhí)行程序段1;當(dāng)條件不滿足時,CPU執(zhí)行程序段2,實現(xiàn)了二分支選擇功能。條件轉(zhuǎn)移類指令、比較不相等轉(zhuǎn)移類指令均可作為條件判斷指令。二分支選擇結(jié)構(gòu)如圖3所示。程序?qū)崿F(xiàn)方法參見范例1。

范例1:
CJNE A,# DATA,PGM2
PGM1:{程序段1}
LJMP EXIT
PGM2:{程序段2}
EXIT:┇
2.2.2 多分支選擇結(jié)構(gòu)
在多分支選擇結(jié)構(gòu)程序中,CPU執(zhí)行間接轉(zhuǎn)移指令,計算多分支轉(zhuǎn)移目標(biāo)地址,依據(jù)多分支轉(zhuǎn)移目標(biāo)地址,CPU執(zhí)行對應(yīng)分支程序段,實現(xiàn)了多分支選擇功能。在多分支選擇結(jié)構(gòu)程序?qū)崿F(xiàn)方法范例2中,A中保存有多分支選擇條件值n,多分支選擇結(jié)構(gòu)如圖4所示。程序?qū)崿F(xiàn)方法參見范例2。

范例2:
PGM: MOV R1,A
RL A
ADD A,R1
MOV DPTR,# PGMTB
JMP @A+DPTR
PGMTB: LJMP PGM0
LJMP PGM1
┇
LJMP PGMn
┇
PGM0: {程序段0}
LJMP EXIT
PGM1: {程序段1}
LJMP EXIT
┇
PGMn: {程序段n}
LJMP EXIT
EXIT: ┇
2.3 循環(huán)結(jié)構(gòu)
在循環(huán)結(jié)構(gòu)程序中,CPU執(zhí)行條件轉(zhuǎn)移指令,依據(jù)條件決定是否繼續(xù)執(zhí)行循環(huán)體。循環(huán)結(jié)構(gòu)分為當(dāng)型循環(huán)結(jié)構(gòu)和直到型循環(huán)結(jié)構(gòu)兩種,下面分別介紹。
2.3.1 當(dāng)型循環(huán)結(jié)構(gòu)
在當(dāng)型循環(huán)結(jié)構(gòu)程序中,CPU首先執(zhí)行條件轉(zhuǎn)移指令,判斷循環(huán)條件。當(dāng)條件滿足時,CPU繼續(xù)執(zhí)行循環(huán)體程序;當(dāng)條件不滿足時,CPU退出循環(huán)結(jié)構(gòu)程序,接著執(zhí)行后續(xù)程序。當(dāng)型循環(huán)結(jié)構(gòu)如圖5所示,程序?qū)崿F(xiàn)方法參見范例3、范例4。





