《單片機原理及應(yīng)用》第五章匯編語言程序設(shè)計.ppt

上傳人:za****8 文檔編號:14651244 上傳時間:2020-07-27 格式:PPT 頁數(shù):35 大?。?.62MB
收藏 版權(quán)申訴 舉報 下載
《單片機原理及應(yīng)用》第五章匯編語言程序設(shè)計.ppt_第1頁
第1頁 / 共35頁
《單片機原理及應(yīng)用》第五章匯編語言程序設(shè)計.ppt_第2頁
第2頁 / 共35頁
《單片機原理及應(yīng)用》第五章匯編語言程序設(shè)計.ppt_第3頁
第3頁 / 共35頁

下載文檔到電腦,查找使用更方便

9.9 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《《單片機原理及應(yīng)用》第五章匯編語言程序設(shè)計.ppt》由會員分享,可在線閱讀,更多相關(guān)《《單片機原理及應(yīng)用》第五章匯編語言程序設(shè)計.ppt(35頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、第五章 匯編 語言程序設(shè)計,1 程序設(shè)計方法 2 順序程序 3 分支程序 4 循環(huán)程序 5 子程序 6 算術(shù)運算程序,第五章 匯編語言程序設(shè)計,5-1-2 匯編語言程序設(shè)計步驟 一.分析問題。 二.確定算法。 三.制定程序流程圖:表示程序結(jié)構(gòu)和程序功能 四.編制源程序 1. 合理分配存儲器單元和了解I/O接口地址。 2. 按功能設(shè)計程序, 明確各程序之間的相互關(guān)系。 3. 用注釋行說明程序, 便于閱讀和修改調(diào)試和修改。 五.程序調(diào)試。,第五章 匯編語言程序設(shè)計,5-1-3 評價程序質(zhì)量的標(biāo)準(zhǔn) (1)程序的執(zhí)行時間。 (2)程序所占用的內(nèi)存字節(jié)數(shù)。 (3)程序的邏輯性、可讀性。 (4)程序的兼容

2、性、可擴展性。 (5)程序的可靠性。,5-2 順序程序 直線程序又稱簡單程序,程序走向只有一條路徑。 例1 雙字節(jié)變補程序(設(shè)數(shù)據(jù)在R4 R5中)雙字節(jié)變補程序(設(shè)數(shù)據(jù)在R4R5中): MOV A,R5;取低字節(jié) CPL A ADD A,#1;低字節(jié)變補 MOV R5,A MOV A,R4;取高字節(jié) CPL A ADDC A,#0;高字節(jié)變補 MOV R4,A,第五章 匯編語言程序設(shè)計,第五章 匯編語言程序設(shè)計,例2 壓縮式BCD碼分解成為單字節(jié)BCD碼。,MOV R0,#40H;設(shè)指針 MOV A,R0;取一個字節(jié) MOV R2,A;暫存 ANL A,#0FH;清0高半字節(jié) INC R0 M

3、OV R0,A ;保存數(shù)據(jù)個位 MOV A,R2 SWAP A ;十位換到低半字節(jié) ANL A,#0FH INC R0 MOV R0,A;保存數(shù)據(jù)十位,十 個,第五章 匯編語言程序設(shè)計,例5-1 假設(shè)兩個雙字節(jié)無符號數(shù),分別存放在R1R0和R3R2中,高字節(jié)在前,低字節(jié)在后。編程使兩數(shù)相加,和數(shù)存放回R2R1R0中。 ORG 1000h CLR C MOV A,R0;取被加數(shù)低字節(jié)至A ADD A,R2;與加數(shù)低字節(jié)相加 MOV R0,A;存和數(shù)低字節(jié) MOV A,Rl;取被加數(shù)高字節(jié)至A ADDC A,R3;與加數(shù)高字節(jié)相加 MOV Rl,A;存和數(shù)高字節(jié) MOV A,#0 ADDC A,#

4、0;加進位位 MOV R2,A;存和數(shù)進位位 SJMP $ ;原地踏步 END,第五章 匯編語言程序設(shè)計,5-3 分支程序 由條件轉(zhuǎn)移指令構(gòu)成程序判斷框部分,形成程序分支結(jié)構(gòu)。 5-3-1單重分支程序 一個判斷決策框,程序有兩條出路。兩種分支結(jié)構(gòu)。 例1 求R2中補碼絕對值,正數(shù)不變,負(fù)數(shù)變補。 MOV A,R2 JNB ACC.7,NEXT ;為正數(shù)? CPL A ;負(fù)數(shù)變補 INC A MOV R2,A NEXT: SJMP NEXT ;結(jié)束,第五章 匯編語言程序設(shè)計,5-3-2 多重分支程序多次使用條件轉(zhuǎn)移指令,形成兩個以上判斷框。 例5-7 設(shè)30H單元存放的是一元二次方程ax2+bx

5、+c=0根的判別式=b2-4ac的值。 解:值為有符號數(shù),有三種情況,即大于零、等于零、小于零。,第五章 匯編語言程序設(shè)計,編程: ORG 1000H START: MOV A,30H ;值送A JNB ACC.7,YES ;=0轉(zhuǎn)YES MOV 31H,#0 ;0轉(zhuǎn)TOW MOV 31H,#1 ;=0有相同實根 SJMP FINISH TOW: MOV 31H,#2 ;有兩個不同實根 FINISH:SJMP $,第五章 匯編語言程序設(shè)計,5-3-3 N路分支程序 N路分支程序是根據(jù)前面程序運行的結(jié)果,可以有N種選擇,并能轉(zhuǎn)向其中任一處理程序。,第五章 匯編語言程序設(shè)計,例5-10 128路分

6、支程序。 功能:根據(jù)R3的值(00H7FH)轉(zhuǎn)到128個目的地址。 參考程序: JMPl28: MOV A,R3 RL A ;(A)2 MOV DPTR,#PRGTBL ;散轉(zhuǎn)表首址送DPTR JMP A+DPTR ;散轉(zhuǎn) PRGTBL:AJMP ROUT00 AJMP ROUT01 AJMP ROUT7F ;128個AJMP指令占256個字節(jié),第五章 匯編語言程序設(shè)計,例5-11 256路分支程序 功能:根據(jù)R3的值轉(zhuǎn)移到256個目的地址; 入口條件:(R3)=轉(zhuǎn)移目的地址代號(00HFFH); 出口條件:轉(zhuǎn)移到相應(yīng)分支處理程序入口。 解: JMP256: MOV A,R3 ;取N值 MOV

7、 DPTR,#PRGTBL ;指向分支地址表首址 CLR C RLC A ;(A)2 JNC LOWl28 ;是前128個分支程序,則轉(zhuǎn)移 INC DPH ;否則基址加256,第五章 匯編語言程序設(shè)計,LOWl28: MOV TEMP,A ;暫存A INC A ;指向地址低8位 MOVC A,A+DPTR ;查表,讀分支地址低8位 PUSH ACC ;地址低8位入棧 MOV A,TEMP ;恢復(fù)A,指向地址高8位 MOVC A,A+DPTR ;查表,讀分支地址高8位 PUSH ACC ;地址高8位入棧 RET ;分支地址彈入PC實現(xiàn)轉(zhuǎn)移 PRGTBL: DW ROUT00 ;占用512個字節(jié)

8、DW ROUT01 ,第五章 匯編語言程序設(shè)計,例5-12 大于256路分支轉(zhuǎn)移程序 功能:根據(jù)入口條件轉(zhuǎn)向n個分支處理程序 入口條件:(R7R6)=轉(zhuǎn)移目的地址代號; 出口條件:轉(zhuǎn)移到相應(yīng)分支處理程序入口。 程序散轉(zhuǎn)表中有N條LJMP指令,每條LJMP指令占3個字節(jié),因此要按入口條件將址代號乘以3,用乘積的高字節(jié)加DPH,乘積的低字節(jié)送A(變址寄存器)。 PRGTBL:LJMP ROUT0 LJMP ROUT1 LJMP ROUT2 ,第五章 匯編語言程序設(shè)計,參考程序: JMPN:MOV DPTR,#PRGTBL;DPTR指向表首址 MOV A,R7 ;取地址代號高8位 MOV B,#3

9、; MUL AB ;3 ADD A,DPH ; MOV DPH,A ;修改指針高8位 MOV A,R6 ;取地址代號低8位 MOV B,#3 ;3 MUL AB ; XCH A,B ;交換乘積的高低字節(jié) ADD A,DPH ;乘積的高字節(jié)加DPH MOV DPH,A XCH A,B ;乘積的低字節(jié)送A JMP A+DPTR ;散轉(zhuǎn),第五章 匯編語言程序設(shè)計,5-4 循環(huán)程序 包含多次重復(fù)執(zhí)行的程序段,循環(huán)結(jié)構(gòu)使程序緊湊。 5-4-1循環(huán)程序的導(dǎo)出 各個環(huán)節(jié)任務(wù): 一初始化部分 循環(huán)準(zhǔn)備工作。 如:清結(jié)果單元、設(shè)指針、設(shè)循環(huán)控制變量初值等。 二循環(huán)體 循環(huán)工作部分: 需多次重復(fù)處理的工作。 循環(huán)

10、控制部分: 1.修改指針和循環(huán)控制變量。 2.檢測循環(huán)條件:滿足循環(huán)條件,繼續(xù)循環(huán),否則退出循環(huán)。 三.結(jié)束部分 處理和保存循環(huán)結(jié)果。1)已知循環(huán)次數(shù) 2)循環(huán)次數(shù)未知 允許0次循環(huán)的循環(huán)結(jié)構(gòu):在循環(huán)工作之前檢測循環(huán)條件。,第五章 匯編語言程序設(shè)計,單重循環(huán)簡單循環(huán)結(jié)構(gòu):循環(huán)體中不套循環(huán)。 例:求n個單字節(jié)數(shù)據(jù)的累加,設(shè)數(shù)據(jù)串已在43H起始單元,數(shù)據(jù)串長度在42H單元,累加和不超過2個字節(jié)。 SUM:MOVR0,#42H;設(shè)指針 MOVA,R0 MOVR2,A ;循環(huán)計數(shù)器R2n CLRA ;結(jié)果單元清0 MOVR3,A ADD1:INCR0 ;修改指針 ADDA,R0 ;累加 JNC NEX

11、T ;處理進位 INCR3 ;有進位,高字節(jié)加1 NEXT:DJNZ R2,ADD1 ;循環(huán)控制:數(shù)據(jù)是否加完? MOV40H,A ;循環(huán)結(jié)束,保存結(jié)果 MOV41H,R3 RET,第五章 匯編語言程序設(shè)計,循環(huán)控制方法:計數(shù)控制、特征標(biāo)志控制。 一.計數(shù)控制: 設(shè)循環(huán)計數(shù)器,控制循環(huán)次數(shù)。正計數(shù)和倒計數(shù)兩種方式。 例:為一串7位ASCII碼數(shù)據(jù)的D7位加上奇校驗,設(shè)數(shù)據(jù)存放在片外RAM的2101H起始單元,數(shù)據(jù)長度在2100H單元。 MOV DPTR,#2100H MOVX A,DPTR MOV R2,A NEXT:INC DPTR MOVX A,DPTR ORL A,#80H JNB P,

12、PASS ;判斷是否加校驗 MOVX DPTR,A;是,則加奇校驗 PASS:DJNZ R2,NEXT DONE:SJMP DONE,第五章 匯編語言程序設(shè)計,二.特征控制:設(shè)定循環(huán)結(jié)束標(biāo)志實現(xiàn)循環(huán)控制。 例:找正數(shù)表最小值。正數(shù)表存在片外RAM中以LIST為起始單元,用-1作為結(jié)束標(biāo)志。 START:MOVDPTR,#LIST ;數(shù)表首地址 MOVB,#127 ;預(yù)置最小值 NEXT: MOVX A,DPTR ;取數(shù) INCDPTR ;修改指針 CJNE A,#0FFH,NEXT1;是否為數(shù)表結(jié)尾? SJMP DONE ;循環(huán)結(jié)束 NEXT1:CJNE A,B,NEXT2 ;比較 NEXT2

13、:JNCNEXT ;Cy=1,則AB MOVB,A ;保存較小值 SJMP NEXT DONE: SJMP DONE,第五章 匯編語言程序設(shè)計,5-4-2 多重循環(huán) 循環(huán)體中套循環(huán)結(jié)構(gòu)。以雙重循環(huán)使用較多。 例:將內(nèi)存一串單字節(jié)無符號數(shù)升序排序。 步驟: 每次取相鄰單元的兩個數(shù)比較, 決定是否需要交換數(shù)據(jù)位置。 第一次循環(huán),比較N-1次,取數(shù)據(jù)表中最大值。 第二次循環(huán),比較N-2次,取到次大值。 第N-1次循環(huán):比較一次,排序結(jié)束。,第五章 匯編語言程序設(shè)計,SORT: MOV A,#N-1;N個數(shù)據(jù)排序 MOV R4,A;外循環(huán)次數(shù) LOOP1:MOV A,R4 MOV R3,A;內(nèi)循環(huán)次數(shù)

14、 MOV R0,#TAB;設(shè)數(shù)據(jù)指針 LOOP2:MOV A,R0;取二數(shù) MOV B,A INC R0 MOV A,R0 CJNE A,B,L1;比較 L1: JNC UNEX;AB,不交換 DEC R0;否則交換數(shù)據(jù) XCH A ,R0 INC R0 MOV R0,A UNEX: DJNZ R3,LOOP2;內(nèi)循環(huán)結(jié)束? DJNZ R4,LOOP1;外循環(huán)結(jié)束? RET,第五章 匯編語言程序設(shè)計,軟件延時程序 用循環(huán)程序?qū)⒅噶钪貜?fù)多次執(zhí)行,實現(xiàn)軟件延時。 試計算延時程序的執(zhí)行時間。 源程序指令周期(M) 指令執(zhí)行次數(shù) DELAY:MOV R6,#64H1 I1: MOV R7,#0FFH

15、1 I2: DJNZ R7,I2 2 DJNZ R6,I1 2 RET 2,延時時間計算:(設(shè)時鐘f=12MHz) t=(11+1100+2100255+2100+21)M=51.3 ms,1 100 100255 100 1,第五章 匯編語言程序設(shè)計,5.5.2編寫循環(huán)程序應(yīng)注意的問題 1)循環(huán)體前應(yīng)注意安排循環(huán)初始化; 2)內(nèi)外循環(huán)間不應(yīng)相互交叉。,第五章 匯編語言程序設(shè)計,5-5 查表程序 例5-19 一個十六進制數(shù)存放在HEX單元的低四位,將其轉(zhuǎn)換成ASCII碼并送回HEX單元。 編程: ORG 0100H HEX EQU 30H HEXASC: MOV A, HEX ANL A ,#

16、00001111B ADD A, #3 ;變址調(diào)整 MOVC A, A+PC MOV HEX,A ;2字節(jié) RET ;1字節(jié) ASCTAB: DB30H,3lH,32H,33H DB34H,35H,36H,37H DB38H,39H,41H,42H DB43H,44H,45H,46H END,第五章 匯編語言程序設(shè)計,5-6 子程序設(shè)計子程序:能完成某項特定功能的獨立程序段,可被反復(fù)調(diào)用。 優(yōu)點: (1)不必重復(fù)書寫同樣的程序,提高編程效率; (2)程序的邏輯結(jié)構(gòu)簡單,便于閱讀; (3)縮短了源程序和目標(biāo)程序的長度,節(jié)省了程序存儲器空間; (4)使程序模塊化、通用化,便于交流,共享資源; (5

17、)便于按某種功能調(diào)試。,第五章 匯編語言程序設(shè)計,1. 子程序結(jié)構(gòu) 一子程序入口用標(biāo)號作為子程序名。 二調(diào)用子程序之前設(shè)置好堆棧。 三用返回指令RET結(jié)束子程序,并保證堆棧棧頂為調(diào) 用程序的返回地址。 四. 子程序嵌套須考慮堆棧容量。 五. 提供足夠的調(diào)用信息: 如:子程序名、子程序功能、入口參數(shù)和出口參數(shù)、子程序占用的硬件資源、子程序中調(diào)用的其他子程序名。,第五章 匯編語言程序設(shè)計,2. 參數(shù)傳遞 入口參數(shù):調(diào)用子程序之前,需要傳給子程序的參數(shù)。 出口參數(shù):子程序送回調(diào)用程序的結(jié)果參數(shù)。 (1)子程序無須傳遞參數(shù),第五章 匯編語言程序設(shè)計,(2)用累加器和工作寄存器傳遞參數(shù) 例5-24 雙字

18、節(jié)求補子程序CPLD。 解 入口參數(shù):(R7R6)=16位數(shù) 出口參數(shù):(R7R6)=求補后的16位數(shù) CPLD:MOV A,R6 CPL A ADD A,#1 MOV R6,A MOV A,R7 CPL A ADDC A,#0 MOV R7,A RET,第五章 匯編語言程序設(shè)計,(3)通過操作數(shù)地址傳遞參數(shù) 例5-25 n字節(jié)求補子程序。 解 入口參數(shù):(R0)=求補數(shù)低字節(jié)指針,(R7)=n-1 出口參數(shù):(R0)=求補后的高字節(jié)指針 CPLN: MOV A,R0 CPL A ADD A,#1 MOVR0,A NEXT: INC R0 MOV A,R0 CPL A ADDC A,#0 MO

19、V R0,A DJNZ R7,NEXT RET,第五章 匯編語言程序設(shè)計,(4)通過堆棧傳遞參數(shù) 例5-26 在HEX單元存放兩個十六進制數(shù),將它們分別轉(zhuǎn)換 成ASC碼并存入ASC和ASC+1單元。 解 由于要進行兩次轉(zhuǎn)換,故可調(diào)用查表子程序完成。 主程序: MAIN: PUSH HEX ;取被轉(zhuǎn)換數(shù) LCALLHASC ;轉(zhuǎn)子 *PC POP ASC ;ASCLASC MOV A,HEX ;取被轉(zhuǎn)換數(shù) SWAP A ;處理高四位 PUSH ACC LCALL HASC ;轉(zhuǎn)子程序 POP ASC+1 ;ASCH ASC+1 ,第五章 匯編語言程序設(shè)計,子程序: HASC: DEC SP DE

20、C SP ;修改SP指向HEX POPACC ;彈出HEX ANL A,#0FH ;屏蔽高四位 ADD A,#5 ;變址調(diào)整 MOVCA,A+PC ;查表 PUSHACC ;結(jié)果入棧 (2字節(jié)) INCSP ; (1字節(jié)) INCSP ;修改SP指向斷點位置(1字節(jié)) RET ; (1字節(jié)) ASCTAB:DB 0 1 2. .7 DB 8 9 A. .F ,第五章 匯編語言程序設(shè)計,3. 現(xiàn)場保護推入與彈出的順序應(yīng)按“先進后出”,或“后進先出”的順序,才能保證現(xiàn)場的恢復(fù)。 例:十翻二子程序的現(xiàn)場保護。 BCDCB: PUSH ACC PUSH PSW PUSH DPL ;保護現(xiàn)場 PUSH DPH POP DPH POP DPL POP PSW;恢復(fù)現(xiàn)場 POP ACC RET,第五章 匯編語言程序設(shè)計,4. 設(shè)置堆棧 調(diào)用子程序時,主程序的斷點將自動入棧; 轉(zhuǎn)子后,現(xiàn)場的保護都要占用堆棧工作單元,尤其多重轉(zhuǎn)子或子 程序嵌套,需要使棧區(qū)有一定的深度。 由于MCS-51的堆棧是由Sp指針組織的內(nèi)部RAM區(qū),僅有128個 地址空間,堆棧并非越深越好,深度要恰當(dāng)。,第五章 匯編語言程序設(shè)計,5.6.3 子程序的調(diào)用及嵌套 1子程序調(diào)用 2子程序嵌套,第五章 匯編語言程序設(shè)計,2子程序嵌套,斷點入棧,斷點出棧,

展開閱讀全文
溫馨提示:
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)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!