版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1.5程序設(shè)計(jì)舉例單片機(jī)匯編語言程序設(shè)計(jì)的基本步驟1.分析問題,明確被控對象對軟件的要求2.確定算法3.設(shè)計(jì)程序流程圖4.分配內(nèi)存單元及有關(guān)端口地址5.編寫匯編語言源程序6.調(diào)試程序7.固化程序主要的幾種程序設(shè)計(jì)方法順序程序:順序程序是最簡單、最基本的程序結(jié)構(gòu),其特點(diǎn)是按指令的排列順序一條條地執(zhí)行,直到全部指令執(zhí)行完畢為止。分支程序:分支程序是通過轉(zhuǎn)移指令對相應(yīng)條件的判斷實(shí)現(xiàn)改變程序的執(zhí)行方向的設(shè)計(jì)方法。循環(huán)程序:在程序中需要反復(fù)的執(zhí)行的程序段,為了避免在程序中多次的編寫,可以通過利用條件轉(zhuǎn)移或無條件轉(zhuǎn)移指令來控制程序的執(zhí)行。子程序:在編寫程序時(shí),經(jīng)常有一些的程序會被頻繁的使用。通常情況下,我們將這些程序段定義成子程序,使程序變的便于調(diào)試和閱讀,同時(shí)也縮小了程序的長度。一、順序程序設(shè)計(jì)將30H單元內(nèi)的兩位BCD碼拆開并轉(zhuǎn)換成ASCII碼,存入31H、32H兩個(gè)單元中。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è)計(jì)分支程序有三種基本形式:單分支、雙分支、多分支。單分支:雙分支:條件成立?程序段下條指令NY程序段1條件成立?程序段2NY多分支:程序段2條件N=?程序段N-10N程序段1程序段N1N-1……分支程序的設(shè)計(jì)要點(diǎn)如下:(1)先建立可供條件轉(zhuǎn)移指令測試的條件。(2)選用合適的條件轉(zhuǎn)移指令。(3)在轉(zhuǎn)移的目的地址處設(shè)定標(biāo)號。雙分支程序設(shè)計(jì)舉例設(shè)X存在30H單元中,根據(jù)下式
X+2 X>0Y= 100 X=0∣X∣ X<0求出Y值,將Y值存入31H單元。1、題意分析:根據(jù)數(shù)據(jù)的符號位判別該數(shù)的正負(fù),若最高位為0,再判別該數(shù)是否為0。2、程序流程 A為負(fù)數(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;負(fù)數(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ì)舉例根據(jù)R0的值轉(zhuǎn)向7個(gè)分支程序。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è)計(jì)☆循環(huán)程序一般包括如下四個(gè)部分:(1)初始化(2)循環(huán)體(3)循環(huán)控制(4)結(jié)束☆循環(huán)程序按結(jié)構(gòu)形式,有單重循環(huán)與多重循環(huán)。☆在多重循環(huán)中,只允許外重循環(huán)嵌套內(nèi)重循環(huán)?!畈辉试S循環(huán)相互交叉,也不允許從循環(huán)程序的外部跳入循環(huán)程序的內(nèi)部(a)當(dāng)型循環(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個(gè)單元。根據(jù)下式:
X+2X>0Y=100X=0求出Y值,并將Y值放回原處。∣X∣X<01、題意分析:設(shè)置一個(gè)計(jì)數(shù)器控制循環(huán)次數(shù),每處理完一個(gè)數(shù)據(jù),計(jì)數(shù)器減12、程序流程A=0?YYNNYNA為負(fù)數(shù)?取數(shù),A←((R1))開始結(jié)束A←∣X∣A←64HA←X+2存數(shù),((R1))←A(30H)設(shè)置地址指針R1、計(jì)數(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;若為負(fù)數(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 ;地址指針指向下一個(gè)地址
DJNZ R0,START ;未處理完,繼續(xù)處理
SJMP $ ;暫停
END單重循環(huán)延時(shí)例:假設(shè)單片機(jī)的fosc=12MHz,計(jì)算單片機(jī)執(zhí)行下面程序消耗的時(shí)間。DELAY:MOVR5,#TIME;1機(jī)器周期MM:NOP;1機(jī)器周期
DJNZR5,MM;2機(jī)器周期
RET;2機(jī)器周期執(zhí)行完以上4條語句,所花時(shí)間:T=(1+(1+2)×TIME+2)×1s推廣計(jì)算式:T(機(jī)器周期數(shù))=(循環(huán)體機(jī)器周期數(shù))×循環(huán)次數(shù)+初始化機(jī)器周期數(shù)多重循環(huán)延時(shí)例:假設(shè)單片機(jī)的fosc=12MHz,計(jì)算單片機(jī)執(zhí)行下面程序消耗的時(shí)間。DELAY2:MOVR3,#TIME1;1機(jī)器周期LOOP1:MOVR2,#TIME2;1機(jī)器周期LOOP2:NOP;1機(jī)器周期
DJNZR2,LOOP2;2機(jī)器周期
DJNZR3,LOOP1;2機(jī)器周期
RET;2機(jī)器周期執(zhí)行完以上6條語句,所花時(shí)間:
T=(1+(1+(1+2)×TIME2+2)×TIME1+2)×1s四、子程序設(shè)計(jì)在編寫子程序時(shí),應(yīng)注意以下幾點(diǎn):子程序的第一條指令地址為子程序的入口地址。主程序調(diào)用子程序利用指令LCALL、ACALL指令進(jìn)行,返回使用RET。在子程序的內(nèi)部有轉(zhuǎn)移指令時(shí),最好使用相對轉(zhuǎn)移指令。在使用子程序時(shí),要注意現(xiàn)場的保護(hù),在退出時(shí)要恢復(fù)現(xiàn)場。2)子程序參數(shù)傳遞 在調(diào)用子程序時(shí),經(jīng)常要進(jìn)行參數(shù)的傳遞,常用的方法有以下幾種:利用工作寄存器或累加器進(jìn)行傳遞。利用可間接尋址的寄存器進(jìn)行傳遞。使用堆棧進(jìn)行參數(shù)傳遞。有一數(shù)據(jù)塊從片內(nèi)RAM的30H單元開始存入,設(shè)數(shù)據(jù)塊長度為10個(gè)單元。根據(jù)下式:
X+2X>0Y=100X=0求出Y值,并將Y值放回原處。∣X∣X<0題意分析:數(shù)據(jù)塊中的十個(gè)數(shù)都需要進(jìn)行符號判斷并作相應(yīng)處理,可把一部分工作交給子程序完成,主程序只負(fù)責(zé)讀取數(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 ;修改地址指針,指向下一個(gè)地址
DJNZ R0,START ;數(shù)據(jù)未處理完,繼續(xù)處理
SJMP $ ;暫停
ORG 0200H DISPOSE: JB ACC.7,NEG ;若為負(fù)數(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è)計(jì)程序使用的專用指令:
MOVCA,@A+PC
MOVCA,@A+DPTR一般情況下,常使用后者程序設(shè)計(jì)一般規(guī)則:先確定表格存放的位置在表格中填入相應(yīng)的數(shù)據(jù)查表時(shí)先將表格的首地址給DPTR,再將要查表的數(shù)據(jù)送給A,最后用
MOVCA,@A+DPTR例:假如在內(nèi)部RAM的30H單元中存放有一個(gè)BCD編碼的十進(jìn)制數(shù),查出其共陰7段顯示代碼,并送到外部RAM的CFA0H單元中。題意分析:先建立一個(gè)相應(yīng)的數(shù)值表格,定義在程序存儲器中,利用輸入的值進(jìn)行查表。源程序如下:
……
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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年大學(xué)藝術(shù)學(xué)(音樂欣賞)試題及答案
- 七年級生物(生物體的結(jié)構(gòu))2026年上學(xué)期期末測試卷
- 2025年大學(xué)大三(統(tǒng)計(jì)學(xué))多元統(tǒng)計(jì)分析基礎(chǔ)試題及答案
- 2025年大學(xué)(公共關(guān)系學(xué))危機(jī)公關(guān)處理期末試題及答案
- 第2講 帶電粒子在磁場中的運(yùn)動
- 中職第二學(xué)年(內(nèi)科護(hù)理)內(nèi)科常見病護(hù)理2026年綜合測試題及答案
- 2025年高職軟件工程(面向?qū)ο缶幊蹋┰囶}及答案
- 深度解析(2026)GBT 18310.39-2001纖維光學(xué)互連器件和無源器件 基本試驗(yàn)和測量程序 第2-39部分試驗(yàn) 對外界磁場敏感性
- 深度解析(2026)《GBT 17980.110-2004農(nóng)藥 田間藥效試驗(yàn)準(zhǔn)則(二) 第110部分殺菌劑防治黃瓜細(xì)菌性角斑病》
- 深度解析(2026)《GBT 17967-2000信息技術(shù) 開放系統(tǒng)互連 基本參考模型 OSI服務(wù)定義約定》
- 林場管護(hù)知識培訓(xùn)課件
- 糧食烘干作業(yè)安全培訓(xùn)課件
- GB/T 17219-2025生活飲用水輸配水設(shè)備、防護(hù)材料及水處理材料衛(wèi)生安全評價(jià)
- 公司反貪腐類培訓(xùn)課件
- 供電公司營銷安全培訓(xùn)課件
- 寢室內(nèi)務(wù)規(guī)范講解
- 口腔黏膜炎團(tuán)體標(biāo)準(zhǔn)解讀
- 《民用機(jī)場航空器活動區(qū)道路交通安全管理規(guī)則》170號令題庫含答案
- 部隊(duì)地雷使用課件
- 中山市招投標(biāo)管理辦法
- 航空材料基礎(chǔ)培訓(xùn)課件
評論
0/150
提交評論