版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1.5程序設(shè)計(jì)舉例單片機(jī)匯編語言程序設(shè)計(jì)的基本步驟1.分析問題,明確被控對(duì)象對(duì)軟件的要求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)移指令對(duì)相應(yīng)條件的判斷實(shí)現(xiàn)改變程序的執(zhí)行方向的設(shè)計(jì)方法。循環(huán)程序:在程序中需要反復(fù)的執(zhí)行的程序段,為了避免在程序中多次的編寫,可以通過利用條件轉(zhuǎn)移或無條件轉(zhuǎn)移指令來控制程序的執(zhí)行。子程序:在編寫程序時(shí),經(jīng)常有一些的程序會(huì)被頻繁的使用。通常情況下,我們將這些程序段定義成子程序,使程序變的便于調(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)號(hào)。雙分支程序設(shè)計(jì)舉例設(shè)X存在30H單元中,根據(jù)下式
X+2 X>0Y= 100 X=0∣X∣ X<0求出Y值,將Y值存入31H單元。1、題意分析:根據(jù)數(shù)據(jù)的符號(hào)位判別該數(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)?!钤诙嘀匮h(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í),最好使用相對(duì)轉(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)行符號(hào)判斷并作相應(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ù)值表格,定義在程序存儲(chǔ)器中,利用輸入的值進(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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)人力資源開發(fā)與激勵(lì)機(jī)制匯報(bào)
- 培養(yǎng)學(xué)習(xí)習(xí)慣如何運(yùn)用匯報(bào)形成學(xué)習(xí)機(jī)制
- 幼兒食物中毒課程設(shè)計(jì)
- 臨床研究中患者招募與留存策略
- 城市規(guī)劃與管理現(xiàn)代化實(shí)踐匯報(bào)
- 幼兒園綠色童謠課程設(shè)計(jì)
- 換牙前后護(hù)理措施
- 幼兒園芭蕉主題課程設(shè)計(jì)
- 青島工學(xué)院《小學(xué)教師基本功小學(xué)教師口語基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 青島工程職業(yè)學(xué)院《系統(tǒng)應(yīng)用開發(fā)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東省廣州市越秀區(qū)2023-2024學(xué)年八年級(jí)上學(xué)期期末道德與法治試題(含答案)
- 第七屆重慶市青少年科學(xué)素養(yǎng)大賽考試題庫(含答案)
- 地理2024-2025學(xué)年人教版七年級(jí)上冊(cè)地理知識(shí)點(diǎn)
- 2024年人教部編版語文小學(xué)四年級(jí)上冊(cè)復(fù)習(xí)計(jì)劃及全冊(cè)單元復(fù)習(xí)課教案
- 四大名著之西游記經(jīng)典解讀28
- 2024年城市園林苗木移植合同范例
- 醫(yī)院培訓(xùn)課件:《新進(jìn)護(hù)士職業(yè)規(guī)劃》
- 園林綠化安全生產(chǎn)培訓(xùn)
- 胖東來商貿(mào)集團(tuán)員工考核管理制度
- 軍事理論課(2024)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 倉儲(chǔ)物流安全知識(shí)培訓(xùn)
評(píng)論
0/150
提交評(píng)論