- 基于Proteus的單片機應用技術
- 江世明編著
- 1788字
- 2018-12-27 19:57:32
1.3 單片機應用系統匯編語言程序設計
在單片機應用系統設計中,應用程序設計是整個系統設計的重要工作。在早期單片機開發中,都是采用匯編語言。采用匯編語言編寫應用程序,可直接面向系統硬件,從而可以編寫出高質量的程序代碼。因此,現在盡管用C語言編程已成為單片機程序設計主流,但用匯編語言進行程序設計仍是一些單片機愛好者樂于采用的方法。
1.3.1 順序結構的程序設計方法
1.順序結構
順序結構程序是一種最簡單、最基本的程序結構,其特點是按程序編寫的順序依次執行,程序流向不變。順序結構是所有復雜程序的基礎。
2.順序程序設計
在進行順序結構的程序設計時,先要根據題意,找到解決問題的方法,然后以指令為依據,將解決問題的方法用程序表達出來。
【例1-1】設有16位二進制數存放在R0、R1中(R0存放高位),試編寫實現16位二進制數“取反加1”的操作程序。
解 程序流程圖如圖1.17所示,程序如下:
ORG 1000H START:MOV A,R1 CPL A ADD A,#01H MOV R1,A MOV A,R0 CPL A ADDC A, #00H MOV R0.A END

圖1.17 程序流程圖
1.3.2 分支結構的程序設計方法
1.分支結構
分支結構是指程序中含有轉移指令,程序的進程要根據程序要求無條件或有條件改變程序執行順序,選擇程序流向。分支結構有單分支、雙分支、多分支3種形式,如圖1.18所示。
2.分支結構程序設計方法
由于計算機具有邏輯判斷能力,這是計算機實現分支程序的理論基礎,依據條件轉移指令和比較指令實現計算機分支。
(1)無條件轉移程序設計
以無條件轉移語句實現程序的無條件轉移。

圖1.18 單片機分支結構程序流程圖
(2)條件轉移程序設計方法
用條件判斷語句對程序執行的條件進行分析,從而決定程序的流向。
【例1-2】警情從單片機的P1.0輸入,當系統檢測到有警情發生時,立即調用撥號子程序,試編制實現上述過程的程序。
分析:程序流程如圖1.19所示,程序如下:
ORG 1000H NAME:SETB P1.0 MOV C,P1.0 JNC NAME …… END

圖1.19 單片機分支結構程序流程圖
值得注意的是,分支程序設計一定要先分析分支條件,然后采用合適的語句,從而達到分支的目的。
1.3.3 散轉程序設計
散轉實際上是多分支結構的一種特殊情況。我們知道,當分支較多時,如果采用連續判斷的方法對條件逐個比較,會使程序顯得太煩瑣,且執行速度較慢。散轉程序的設計思想是:在滿足某種規律的情況下,用一條指令轉移到指定的分支。與前面介紹的直接轉移方式相比,散轉程序屬于間接轉移方式。指令JMP@A+DPTR是實現散轉的基礎,用它來實現散轉的方法有兩種:一種是按照某種規律直接將轉移地址編排成一個表,當執行散轉指令時,程序轉移到相應的地址;另一種是對偏移量作某種運算得到一個轉移地址表。
在散轉程序設計中,除了用JMP@A+DPTR指令實現散轉外,還可以用RET指令實現。RET指令的作用是將堆棧頂部的一個16位數據賦值給PC,因此,用RET指令實現散轉的要點是首先獲得轉移地址,然后用PUSH指令將地址壓入堆棧(先壓入低字節),然后用RET指令實現散轉。
1.3.4 循環程序設計方法
1.循環結構
在程序設計中,經常會遇到需對大量數據進行重復處理的情況。此時,程序中的某些程序段需要多次重復執行。這種多次出現的程序結構叫循環結構。在匯編語言中,循環結構包括循環初始化和循環體兩部分。循環初始化部分是為進入循環所做的準備工作,用來設置循環初始化狀態,如地址指針、擬定的循環次數。循環體是重復執行的程序。循環結構如圖1.20所示。

圖1.20 循環結構程序流程
2.循環結構程序設計
循環程序設計的核心是循環控制。常用的循環控制方法有以下3種。
(1)計數控制法
對于循環次數已知的程序,或者在進入循環前可由某變量確定循環次數的程序,常采用計數控制循環。循環計數的方法有兩種:一種方法是先將循環計數器清0,以后每執行一遍循環體,循環計數器加1,同時與規定的循環次數進行比較,次數未到,繼續執行循環體;次數到,則結束循環。這種方法在高級語言中常用。另一種方法是將計數器的初值設置為循環次數,以后每執行一遍循環體,循環計數器減1,同時檢測計數器是否為0,非0繼續循環,為0則終止循環。匯編語言中常采用這種方法,它適用于DJNZ之類的指令編程。
(2)條件控制法
有些循環程序預先不能確定循環次數,而是在循環的過程中,當滿足某個特定的條件時退出循環。這類通過測試特定條件來實現循環控制的方法稱為條件控制法。條件控制的實現是通過條件判斷語句達到目的的。
(3)邏輯尺控制法
有些循環程序,在循環的過程中分別要求完成不同的操作。例如,如這次循環完成兩數的相加,下次循環完成兩數的相減,這時可以采用“邏輯尺”控制法。它也是匯編語言獨有的一種控制方法。
- Hands-On Graph Analytics with Neo4j
- 數據展現的藝術
- Linux Mint System Administrator’s Beginner's Guide
- 網頁編程技術
- 系統安裝與重裝
- 影視后期編輯與合成
- 我也能做CTO之程序員職業規劃
- Nginx高性能Web服務器詳解
- 大數據驅動的機械裝備智能運維理論及應用
- Building a BeagleBone Black Super Cluster
- 工業機器人操作
- Learning Couchbase
- Hands-On Artificial Intelligence for Beginners
- Mastering Microsoft Dynamics 365 Customer Engagement
- INSTANT R Starter