MCS-51系列單片機結構化程序設計探討
1 MCS-51系列單片機結構化程序設計概述
結構化程序指程序組成結構化、功能模塊化、運行流程化。結構化程序要求將處理特定任務(wù)的代碼和數據與程序其余部分隔離,在MCS-51系列單片機結構化程序中,實(shí)現隔離的方法是將處理特定任務(wù)的指令和數據設計成子程序或中斷服務(wù)子程序。這些子程序或中斷服務(wù)子程序稱(chēng)作功能模塊,其具有確定功能,處理特定任務(wù),解決專(zhuān)門(mén)問(wèn)題。
在MCS-51系列單片機結構化程序設計時(shí),按照總體規劃和總體設計,由若干軟件設計人員分別編程設計各功能模塊,再依據軟件結構和程序流程,由若干功能模塊組成結構化程序,實(shí)現應用程序整體功能,解決復雜的實(shí)際問(wèn)題。
MCS-51系列單片機結構化程序具有結構清晰、邏輯性強、易于維護、便于共享、運行穩定、可靠性高等特點(diǎn)。按照結構化程序設計要求編程,有助于規范軟件設計人員的編程工作,有助于提高軟件設計人員的編程效率,有助于提升軟件設計人員的編程水平。
2 三種基本結構及程序實(shí)現方法
MCS-51系列單片機結構化程序由若干功能模塊構成,功能模塊由三種基本結構組成,即順序結構、選擇結構、循環(huán)結構。由這三種基本結構組成的功能模塊,能實(shí)現各種程序算法,解決復雜實(shí)際問(wèn)題。
2.1 順序結構
在順序結構程序中,按先后順序,CPU逐條執行指令或逐段執行程序段。順序結構分為逐條順序結構和逐段順序結構兩種。逐條順序結構如圖1所示,逐段順序結構如圖2所示。
2.2 選擇結構
在選擇結構程序中,CPU執行條件判斷指令(或間接轉移指令),依據條件(或轉移目的地址)執行對應分支程序段。選擇結構分為二分支選擇結構和多分支選擇結構。
2.2.1 二分支選擇結構
在二分支選擇結構程序中,CPU執行條件判斷指令,判斷轉移條件。當條件滿(mǎn)足時(shí),CPU執行程序段1;當條件不滿(mǎn)足時(shí),CPU執行程序段2,實(shí)現了二分支選擇功能。條件轉移類(lèi)指令、比較不相等轉移類(lèi)指令均可作為條件判斷指令。二分支選擇結構如圖3所示。程序實(shí)現方法參見(jiàn)范例1。
范例1:
CJNE A,# DATA,PGM2
PGM1:{程序段1}
LJMP EXIT
PGM2:{程序段2}
EXIT:┇
2.2.2 多分支選擇結構
在多分支選擇結構程序中,CPU執行間接轉移指令,計算多分支轉移目標地址,依據多分支轉移目標地址,CPU執行對應分支程序段,實(shí)現了多分支選擇功能。在多分支選擇結構程序實(shí)現方法范例2中,A中保存有多分支選擇條件值n,多分支選擇結構如圖4所示。程序實(shí)現方法參見(jià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)結構
在循環(huán)結構程序中,CPU執行條件轉移指令,依據條件決定是否繼續執行循環(huán)體。循環(huán)結構分為當型循環(huán)結構和直到型循環(huán)結構兩種,下面分別介紹。
2.3.1 當型循環(huán)結構
在當型循環(huán)結構程序中,CPU首先執行條件轉移指令,判斷循環(huán)條件。當條件滿(mǎn)足時(shí),CPU繼續執行循環(huán)體程序;當條件不滿(mǎn)足時(shí),CPU退出循環(huán)結構程序,接著(zhù)執行后續程序。當型循環(huán)結構如圖5所示,程序實(shí)現方法參見(jiàn)范例3、范例4。
范例3:
LOP1: JB BIT,LOP2
LJMP EXIT
LOP2: {循環(huán)體}
LJMP LOP1
EXIT: ┇
范例4:
LOP1: JNB BIT,EXIT
{循環(huán)體}
LJMP LOP1
EXIT: ┇
2.3.2 直到型循環(huán)結構
在直到型循環(huán)結構程序中,CPU首先執行循環(huán)體程序,再執行條件轉移指令,判斷循環(huán)條件。當條件滿(mǎn)足時(shí),CPU繼續執行循環(huán)體程序;當條件不滿(mǎn)足時(shí),CPU退出循環(huán)結構程序,接著(zhù)執行后續程序。直到型循環(huán)結構如圖6所示,程序實(shí)現方法參見(jiàn)范例5、范例6。
范例5:
MOV R2,#COUNT
LOP1: {循環(huán)體}
DJNZ R2,LOP1
┇
范例6:
LOP1:{循環(huán)體}
JB BIT,LOP1
┇
說(shuō)明:條件轉移類(lèi)指令、比較不相等轉移類(lèi)指令、減1不為0轉移指令均可作為條件判斷指令,由CPU決定是否繼續執行循環(huán)體,從而實(shí)現了循環(huán)執行程序段功能。
3 MCS-51系列單片機結構化程序設計步驟
MCS-51系列單片機結構化程序設計步驟如圖7所示,現對各部分具體設計要求分別敘述。
(1)需求分析
通過(guò)現場(chǎng)調研及與用戶(hù)交流,全面、深入、準確地分析MCS-51系列單片機結構化程序設計所要解決的實(shí)際問(wèn)題,搞清實(shí)際問(wèn)題所涉及的應用環(huán)境、應用對象、應用過(guò)程、應用要求、應用聯(lián)系,從整體上得出結構化程序設計所要達到的目標及系統所要實(shí)現的功能、完成的具體任務(wù)、產(chǎn)品的形式,最后形成需求分析報告。
(2)總體規劃
在需求分析的基礎之上,制訂出MCS-51系列單片機結構化程序設計的總體規劃??傮w規劃中應確定MCS-51系列單片機結構化程序設計的設計原則、設計目標、設計任務(wù)、設計方式、設計進(jìn)度和設計協(xié)作。
(3)總體設計
基于需求分析,按照總體規劃進(jìn)行總體設計,確定出MCS-51系列單片機結構化程序設計的具體技術(shù)方案??傮w設計包括系統性能設計、功能設計、工作原理設計、軟件結構設計、程序流程設計和通信協(xié)議設計。
(4)模型建立
總體設計確定了軟件結構的所有功能模塊,某些功能模塊涉及處理復雜實(shí)際問(wèn)題,應根據相關(guān)理論和專(zhuān)業(yè)知識,對復雜實(shí)際問(wèn)題建立數學(xué)模型,為后續算法設計提供依據。
(5)數據結構
依據功能模塊所要完成的指定功能、所要執行的具體任務(wù)、所要處理的具體問(wèn)題,針對為特定功能模塊所建立的數學(xué)模型,應確定出功能模塊的輸入數據、暫存數據、輸出數據、數據關(guān)系。對于MCS-51系列單片機結構化程序設計,應統籌規劃內部RAM、確定數據類(lèi)型、定義程序變量、分配數據存儲單元,為后續算法設計打好基礎。
(6)算法設計
結構化程序設計包括結構化算法設計。在建立了特定功能模塊的數學(xué)模型、規劃了特定功能模塊的數據結構之后,應對數學(xué)模型進(jìn)行結構化算法設計,結構化算法設計的原則如下:
①自頂向下、逐步求精?;谛枨蠓治鲋朴喅隹傮w規劃,依據總體規劃完成總體設計,按照總體設計自頂向下對總任務(wù)逐層分解細化,直到每個(gè)子任務(wù)僅處理一個(gè)特定問(wèn)題。
②模塊化設計。由自頂向下、逐步求精得出的子任務(wù)處理程序稱(chēng)為功能模塊,處理復雜實(shí)際問(wèn)題的應用程序由多層若干功能模塊組成。
③功能模塊特性。功能模塊僅處理一個(gè)特定子任務(wù);功能模塊由順序、選擇和循環(huán)三種基本結構組成;功能模塊可獨立編程、獨立編譯、獨立調試;功能模塊可被上層功能模塊調用。
(7)程序編輯
按照數據結構規劃,對軟件結構中各層功能模塊應分別進(jìn)行編程。對于建有數學(xué)模型、設有算法的功能模塊,應依據算法設計進(jìn)行編程。
(8)程序編譯
利用集成開(kāi)發(fā)調試工具軟件,對各層功能模塊源程序分別編譯,檢查程序語(yǔ)法。若發(fā)現語(yǔ)法錯誤,應修改源程序重新編譯,直到所有功能模塊源程序編譯通過(guò)為止。
基于總體設計,參照軟件結構圖及程序流程圖,將各層功能模塊集成到一起,形成一個(gè)完整應用程序,并進(jìn)行統一編譯。若發(fā)現語(yǔ)法錯誤,應修改應用程序重新編譯,直到應用程序編譯通過(guò)為止。
(9)程序調試
利用集成開(kāi)發(fā)調試工具軟件,首先對各層功能模塊分別進(jìn)行調試,檢查各功能模塊的功能是否正確。若發(fā)現功能邏輯錯誤,應修改程序錯誤后重新調試,直到所有功能模塊調試通過(guò)為止。然后對應用程序進(jìn)行統調,檢查應用程序的總體功能是否正確。若發(fā)現功能邏輯錯誤,應跟蹤查找錯誤原因,確定引起錯誤的位置,修改程序錯誤后重新調試,直到應用程序調試通過(guò)為止。
(10)文檔整理
應用程序調試通過(guò)后,應對應用程序進(jìn)行測試,測試通過(guò)后,應整理出應用程序的整套技術(shù)文檔。技術(shù)文檔包括需求分析報告、總體規劃報告、總體設計報告、源程序文件和使用說(shuō)明。
本文探討了MCS-51系列單片機結構化程序設計相關(guān)問(wèn)題,對于其他系列單片機,軟件程序設計人員可參照本文進(jìn)行對應結構化程序設計。對于本文所述功能模塊,軟件設計人員應結合實(shí)際、準確理解、整體考慮、總體設計、按功能分層次設計好各層功能模塊。本程序的設計步驟及硬件設計部分,對MCS-51系列單片機應用系統設計同樣適用。
評論