




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1.5程序設(shè)計舉例單片機匯編語言程序設(shè)計的基本步驟1.分析問題,明確被控對象對軟件的要求2.確定算法3.設(shè)計程序流程圖4.分配內(nèi)存單元及有關(guān)端口地址5.編寫匯編語言源程序6.調(diào)試程序7.固化程序主要的幾種程序設(shè)計方法順序程序:順序程序是最簡單、最基本的程序結(jié)構(gòu),其特點是按指令的排列順序一條條地執(zhí)行,直到全部指令執(zhí)行完畢為止。分支程序:分支程序是通過轉(zhuǎn)移指令對相應(yīng)條件的判斷實現(xiàn)改變程序的執(zhí)行方向的設(shè)計方法。循環(huán)程序:在程序中需要反復(fù)的執(zhí)行的程序段,為了避免在程序中多次的編寫,可以通過利用條件轉(zhuǎn)移或無條件轉(zhuǎn)移指令來控制程序的執(zhí)行。子程序:在編寫程序時,經(jīng)常有一些的程序會被頻繁的使用。通常情況下,我們將這些程序段定義成子程序,使程序變的便于調(diào)試和閱讀,同時也縮小了程序的長度。一、順序程序設(shè)計將30H單元內(nèi)的兩位BCD碼拆開并轉(zhuǎn)換成ASCII碼,存入31H、32H兩個單元中。1、題意分析2、程序流程結(jié)束取數(shù)據(jù)低4位轉(zhuǎn)換成ASCII碼存ASCII碼取數(shù)據(jù)高4位轉(zhuǎn)換成ASCII碼存ASCII碼開始參考程序如下:
ORG 2000H MOV A,30H ;取值
ANL A,#0FH ;取低4位
ADD A,#30H ;轉(zhuǎn)換成ASCII碼
MOV 31H,A ;保存結(jié)果
MOV A,30H ;取值
SWAP A ;高4位與低4位互換
ANL A,#0FH ;取低4位(原來的高4位)
ADD A,#30H
;轉(zhuǎn)換成ASCII碼
MOV 32H,A
;保存結(jié)果
END二、分支程序設(shè)計分支程序有三種基本形式:單分支、雙分支、多分支。單分支:雙分支:條件成立?程序段下條指令NY程序段1條件成立?程序段2NY多分支:程序段2條件N=?程序段N-10N程序段1程序段N1N-1……分支程序的設(shè)計要點如下:(1)先建立可供條件轉(zhuǎn)移指令測試的條件。(2)選用合適的條件轉(zhuǎn)移指令。(3)在轉(zhuǎn)移的目的地址處設(shè)定標號。雙分支程序設(shè)計舉例設(shè)X存在30H單元中,根據(jù)下式
X+2 X>0Y= 100 X=0∣X∣ X<0求出Y值,將Y值存入31H單元。1、題意分析:根據(jù)數(shù)據(jù)的符號位判別該數(shù)的正負,若最高位為0,再判別該數(shù)是否為0。2、程序流程 A為負數(shù)?Y取數(shù),A←(30H)開始結(jié)束A=0?YNNA←|X|A←64HA←X+2存數(shù),(31H)←A(30H)
參考程序如下:
ORG 1000H MOV A,30H ;取數(shù)
JB ACC.7,NEG;負數(shù),轉(zhuǎn)NEG JZ ZER0 ;為零,轉(zhuǎn)ZER0 ADD A,#02H ;為正數(shù),求X+2 AJMPSAVE ;轉(zhuǎn)到SAVE,保存數(shù)據(jù)
ZER0:MOV A,#64H ;數(shù)據(jù)為零,Y=100 AJMPSAVE ;轉(zhuǎn)到SAVE,保存數(shù)據(jù)
NEG: DEC A ;
CPL A ;求∣X∣ SAVE: MOV 31H,A ;保存數(shù)據(jù)
SJMP $ ;暫停
END多分支程序設(shè)計舉例根據(jù)R0的值轉(zhuǎn)向7個分支程序。R0<10,轉(zhuǎn)向SUB0;R0<20,轉(zhuǎn)向SUB1;
|R0<60,轉(zhuǎn)向SUB5;R0>=60,轉(zhuǎn)向SUB6;1、題意分析:利用JMP@A+DPTR指令直接給PC賦值,使程序?qū)崿F(xiàn)轉(zhuǎn)移。2、程序流程。K=?轉(zhuǎn)SUB0轉(zhuǎn)SUB1轉(zhuǎn)SUB6K=0K=1……K=6開始參考程序如下:
ORG2000H MOVDPTR,#TAB;轉(zhuǎn)移指令表首地址
MOVA,R0 ;取數(shù)
MOV B,#10 DIV AB ;A/10,商在A中
CLR C RLCA ;A←2A JMP@A+DPTR ;PC←A+DPTRTAB: AJMP SUB0 ;轉(zhuǎn)移指令表
AJMPSUB1 AJMP SUB2 …… AJMPSUB5 AJMP SUB6 …… 三、循環(huán)程序設(shè)計☆循環(huán)程序一般包括如下四個部分:(1)初始化(2)循環(huán)體(3)循環(huán)控制(4)結(jié)束☆循環(huán)程序按結(jié)構(gòu)形式,有單重循環(huán)與多重循環(huán)?!钤诙嘀匮h(huán)中,只允許外重循環(huán)嵌套內(nèi)重循環(huán)。☆不允許循環(huán)相互交叉,也不允許從循環(huán)程序的外部跳入循環(huán)程序的內(nèi)部(a)當型循環(huán)結(jié)構(gòu)(b)直到型循環(huán)結(jié)構(gòu)循環(huán)結(jié)束?循環(huán)體YN初始化修改循環(huán)參數(shù)結(jié)束部分開始結(jié)束循環(huán)結(jié)束?循環(huán)體Y初始化修改循環(huán)參數(shù)結(jié)束部分開始N結(jié)束有一數(shù)據(jù)塊從片內(nèi)RAM的30H單元開始存入,設(shè)數(shù)據(jù)塊長度為10個單元。根據(jù)下式:
X+2X>0Y=100X=0求出Y值,并將Y值放回原處。∣X∣X<01、題意分析:設(shè)置一個計數(shù)器控制循環(huán)次數(shù),每處理完一個數(shù)據(jù),計數(shù)器減12、程序流程A=0?YYNNYNA為負數(shù)?取數(shù),A←((R1))開始結(jié)束A←∣X∣A←64HA←X+2存數(shù),((R1))←A(30H)設(shè)置地址指針R1、計數(shù)器R0初值R1←R1+1;R0←R0-1R0=0?參考源程序如下:
ORG 2000H MOV R0,#10 MOV R1,#30H START: MOV A,@R1 ;取數(shù)
JB ACC.7,NEG;若為負數(shù),轉(zhuǎn)NEG JZ ZER0 ;若為零,轉(zhuǎn)ZER0 ADD A,#02H ;若為正數(shù),求X+2 AJMP SAVE ;轉(zhuǎn)到SAVE,保存數(shù)據(jù)
ZER0: MOV A,#64H ;數(shù)據(jù)為零,Y=100 AJMP SAVE ;轉(zhuǎn)到SAVE,保存數(shù)據(jù)
NEG: DEC A CPL A ;求∣X∣ SAVE: MOV @R1,A ;保存數(shù)據(jù)
INC R1 ;地址指針指向下一個地址
DJNZ R0,START ;未處理完,繼續(xù)處理
SJMP $ ;暫停
END單重循環(huán)延時例:假設(shè)單片機的fosc=12MHz,計算單片機執(zhí)行下面程序消耗的時間。DELAY:MOVR5,#TIME;1機器周期MM:NOP;1機器周期
DJNZR5,MM;2機器周期
RET;2機器周期執(zhí)行完以上4條語句,所花時間:T=(1+(1+2)×TIME+2)×1s推廣計算式:T(機器周期數(shù))=(循環(huán)體機器周期數(shù))×循環(huán)次數(shù)+初始化機器周期數(shù)多重循環(huán)延時例:假設(shè)單片機的fosc=12MHz,計算單片機執(zhí)行下面程序消耗的時間。DELAY2:MOVR3,#TIME1;1機器周期LOOP1:MOVR2,#TIME2;1機器周期LOOP2:NOP;1機器周期
DJNZR2,LOOP2;2機器周期
DJNZR3,LOOP1;2機器周期
RET;2機器周期執(zhí)行完以上6條語句,所花時間:
T=(1+(1+(1+2)×TIME2+2)×TIME1+2)×1s四、子程序設(shè)計在編寫子程序時,應(yīng)注意以下幾點:子程序的第一條指令地址為子程序的入口地址。主程序調(diào)用子程序利用指令LCALL、ACALL指令進行,返回使用RET。在子程序的內(nèi)部有轉(zhuǎn)移指令時,最好使用相對轉(zhuǎn)移指令。在使用子程序時,要注意現(xiàn)場的保護,在退出時要恢復(fù)現(xiàn)場。2)子程序參數(shù)傳遞 在調(diào)用子程序時,經(jīng)常要進行參數(shù)的傳遞,常用的方法有以下幾種:利用工作寄存器或累加器進行傳遞。利用可間接尋址的寄存器進行傳遞。使用堆棧進行參數(shù)傳遞。有一數(shù)據(jù)塊從片內(nèi)RAM的30H單元開始存入,設(shè)數(shù)據(jù)塊長度為10個單元。根據(jù)下式:
X+2X>0Y=100X=0求出Y值,并將Y值放回原處。∣X∣X<0題意分析:數(shù)據(jù)塊中的十個數(shù)都需要進行符號判斷并作相應(yīng)處理,可把一部分工作交給子程序完成,主程序只負責讀取數(shù)據(jù)、調(diào)用判斷處理子程序、保存數(shù)據(jù)、循環(huán)控制工作。源程序如下:
ORG 0000H MOV R0,#10 MOV R1,#30H START: MOV A,@R1 ;取數(shù)
ACALL DISPOSE ;調(diào)用判斷、處理子程序
SAVE: MOV @R1,A ;保存數(shù)據(jù)
INC R1 ;修改地址指針,指向下一個地址
DJNZ R0,START ;數(shù)據(jù)未處理完,繼續(xù)處理
SJMP $ ;暫停
ORG 0200H DISPOSE: JB ACC.7,NEG ;若為負數(shù),轉(zhuǎn)NEG JZ ZER0 ;若為零,轉(zhuǎn)ZER0 ADD A,#02H ;若為正數(shù),求X+2 AJMP BACK ;轉(zhuǎn)到SAVE,保存數(shù)據(jù)
ZER0: MOV A,#64H ;數(shù)據(jù)為零,Y=100 AJMP BACK ;轉(zhuǎn)到SAVE,保存數(shù)據(jù)
NEG: DEC A CPL A ;求∣X∣ BACK: RET END五、查表程序設(shè)計程序使用的專用指令:
MOVCA,@A+PC
MOVCA,@A+DPTR一般情況下,常使用后者程序設(shè)計一般規(guī)則:先確定表格存放的位置在表格中填入相應(yīng)的數(shù)據(jù)查表時先將表格的首地址給DPTR,再將要查表的數(shù)據(jù)送給A,最后用
MOVCA,@A+DPTR例:假如在內(nèi)部RAM的30H單元中存放有一個BCD編碼的十進制數(shù),查出其共陰7段顯示代碼,并送到外部RAM的CFA0H單元中。題意分析:先建立一個相應(yīng)的數(shù)值表格,定義在程序存儲器中,利用輸入的值進行查表。源程序如下:
……
MOVDPTR,#0050H
MOVA,30H
MOVCA,@A+DPTR
MOVDPTR,#0CFA0H
MOVX@DPTR,A
……
ORG0050H
DB3FH;0的7段共陰顯示代碼
DB06H;1的7段共陰顯示代碼
DB
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 駕駛實操模擬考試題及答案
- 在校生實習(xí)勞務(wù)協(xié)議5篇
- 2025江蘇連云港市贛榆區(qū)教育局所屬學(xué)校招聘新教師69人模擬試卷附答案詳解(突破訓(xùn)練)
- 公司信用體系建設(shè)工作承諾函(3篇)
- 場景化任務(wù)管理工具與進度協(xié)同更新
- 鋼琴老師的考試題及答案
- 2025年幼兒健康考試試題及答案
- 達州統(tǒng)考真題數(shù)學(xué)及答案
- 菏澤教資考試試題及答案
- 2025年北京省考行測真題及答案
- 教師實習(xí)考核標準
- Unit1HappyHolidaySectionBReading1a-1d課件人教版八年級英語上冊
- 汽車修理安全課件
- 2024年云南省交通投資建設(shè)集團有限公司管理人員招聘考試真題
- 2025年合肥市公安局第二批公開招聘警務(wù)輔助人員633名考試參考題庫及答案解析
- 2025年海工裝備行業(yè)研究報告及未來發(fā)展趨勢預(yù)測
- 高三試卷:2025屆浙江省新陣地聯(lián)盟高三10月聯(lián)考歷史答案
- 醫(yī)療機構(gòu)麻醉藥品和精神藥品使用管理和考核培訓(xùn)規(guī)定
- 主題一 4. 創(chuàng)建我們的“健康銀行”(課件) 綜合實踐活動教科版五年級上冊
- 2025農(nóng)村果園租賃合同示范文本
- 人教版二年級數(shù)學(xué)上冊第二單元 1~6的表內(nèi)乘法必刷卷 (含答案)
評論
0/150
提交評論