《單片機(jī)原理及應(yīng)用》第五章匯編語(yǔ)言程序設(shè)計(jì).ppt
《《單片機(jī)原理及應(yīng)用》第五章匯編語(yǔ)言程序設(shè)計(jì).ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《《單片機(jī)原理及應(yīng)用》第五章匯編語(yǔ)言程序設(shè)計(jì).ppt(35頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、第五章 匯編 語(yǔ)言程序設(shè)計(jì),1 程序設(shè)計(jì)方法 2 順序程序 3 分支程序 4 循環(huán)程序 5 子程序 6 算術(shù)運(yùn)算程序,第五章 匯編語(yǔ)言程序設(shè)計(jì),5-1-2 匯編語(yǔ)言程序設(shè)計(jì)步驟 一.分析問(wèn)題。 二.確定算法。 三.制定程序流程圖:表示程序結(jié)構(gòu)和程序功能 四.編制源程序 1. 合理分配存儲(chǔ)器單元和了解I/O接口地址。 2. 按功能設(shè)計(jì)程序, 明確各程序之間的相互關(guān)系。 3. 用注釋行說(shuō)明程序, 便于閱讀和修改調(diào)試和修改。 五.程序調(diào)試。,第五章 匯編語(yǔ)言程序設(shè)計(jì),5-1-3 評(píng)價(jià)程序質(zhì)量的標(biāo)準(zhǔn) (1)程序的執(zhí)行時(shí)間。 (2)程序所占用的內(nèi)存字節(jié)數(shù)。 (3)程序的邏輯性、可讀性。 (4)
2、程序的兼容性、可擴(kuò)展性。 (5)程序的可靠性。,5-2 順序程序 直線程序又稱(chēng)簡(jiǎn)單程序,程序走向只有一條路徑。 例1 雙字節(jié)變補(bǔ)程序(設(shè)數(shù)據(jù)在R4 R5中)雙字節(jié)變補(bǔ)程序(設(shè)數(shù)據(jù)在R4R5中): MOV A,R5;取低字節(jié) CPL A ADD A,#1;低字節(jié)變補(bǔ) MOV R5,A MOV A,R4;取高字節(jié) CPL A ADDC A,#0;高字節(jié)變補(bǔ) MOV R4,A,第五章 匯編語(yǔ)言程序設(shè)計(jì),第五章 匯編語(yǔ)言程序設(shè)計(jì),例2 壓縮式BCD碼分解成為單字節(jié)BCD碼。,MOV R0,#40H;設(shè)指針 MOV A,R0;取一個(gè)字節(jié) MOV R2,A;暫存 ANL A,#0FH;清0高半字節(jié) IN
3、C R0 MOV R0,A ;保存數(shù)據(jù)個(gè)位 MOV A,R2 SWAP A ;十位換到低半字節(jié) ANL A,#0FH INC R0 MOV R0,A;保存數(shù)據(jù)十位,十 個(gè),第五章 匯編語(yǔ)言程序設(shè)計(jì),例5-1 假設(shè)兩個(gè)雙字節(jié)無(wú)符號(hào)數(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ù)高
4、字節(jié) MOV A,#0 ADDC A,#0;加進(jìn)位位 MOV R2,A;存和數(shù)進(jìn)位位 SJMP $ ;原地踏步 END,第五章 匯編語(yǔ)言程序設(shè)計(jì),5-3 分支程序 由條件轉(zhuǎn)移指令構(gòu)成程序判斷框部分,形成程序分支結(jié)構(gòu)。 5-3-1單重分支程序 一個(gè)判斷決策框,程序有兩條出路。兩種分支結(jié)構(gòu)。 例1 求R2中補(bǔ)碼絕對(duì)值,正數(shù)不變,負(fù)數(shù)變補(bǔ)。 MOV A,R2 JNB ACC.7,NEXT ;為正數(shù)? CPL A ;負(fù)數(shù)變補(bǔ) INC A MOV R2,A NEXT: SJMP NEXT ;結(jié)束,第五章 匯編語(yǔ)言程序設(shè)計(jì),5-3-2 多重分支程序多次使
5、用條件轉(zhuǎn)移指令,形成兩個(gè)以上判斷框。 例5-7 設(shè)30H單元存放的是一元二次方程ax2+bx+c=0根的判別式=b2-4ac的值。 解:值為有符號(hào)數(shù),有三種情況,即大于零、等于零、小于零。,第五章 匯編語(yǔ)言程序設(shè)計(jì),編程: 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有相同實(shí)根 SJMP FINISH TOW: MOV 31H,#2 ;有兩個(gè)不同實(shí)根 FINISH:SJMP $,第五章 匯編
6、語(yǔ)言程序設(shè)計(jì),5-3-3 N路分支程序 N路分支程序是根據(jù)前面程序運(yùn)行的結(jié)果,可以有N種選擇,并能轉(zhuǎn)向其中任一處理程序。,第五章 匯編語(yǔ)言程序設(shè)計(jì),例5-10 128路分支程序。 功能:根據(jù)R3的值(00H7FH)轉(zhuǎn)到128個(gè)目的地址。 參考程序: 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個(gè)AJMP指令占256個(gè)字節(jié),第
7、五章 匯編語(yǔ)言程序設(shè)計(jì),例5-11 256路分支程序 功能:根據(jù)R3的值轉(zhuǎn)移到256個(gè)目的地址; 入口條件:(R3)=轉(zhuǎn)移目的地址代號(hào)(00HFFH); 出口條件:轉(zhuǎn)移到相應(yīng)分支處理程序入口。 解: JMP256: MOV A,R3 ;取N值 MOV DPTR,#PRGTBL ;指向分支地址表首址 CLR C RLC A ;(A)2 JNC LOWl28 ;是前128個(gè)分支程序,則轉(zhuǎn)移 INC DPH ;否則基址加256,第五章 匯編語(yǔ)言程序設(shè)計(jì),LOWl28: MOV TEMP,A ;暫存A INC
8、 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實(shí)現(xiàn)轉(zhuǎn)移 PRGTBL: DW ROUT00 ;占用512個(gè)字節(jié) DW ROUT01 ,第五章 匯編語(yǔ)言程序設(shè)計(jì),例5-12 大于256路分支轉(zhuǎn)移程序 功能:根據(jù)入口條件轉(zhuǎn)向n個(gè)分支處理程序
9、 入口條件:(R7R6)=轉(zhuǎn)移目的地址代號(hào); 出口條件:轉(zhuǎn)移到相應(yīng)分支處理程序入口。 程序散轉(zhuǎn)表中有N條LJMP指令,每條LJMP指令占3個(gè)字節(jié),因此要按入口條件將址代號(hào)乘以3,用乘積的高字節(jié)加DPH,乘積的低字節(jié)送A(變址寄存器)。 PRGTBL:LJMP ROUT0 LJMP ROUT1 LJMP ROUT2 ,第五章 匯編語(yǔ)言程序設(shè)計(jì),參考程序: JMPN:MOV DPTR,#PRGTBL;DPTR指向表首址 MOV A,R7 ;取地址代號(hào)高8位 MOV B,#3 ; MUL AB ;3 ADD A,DPH ; MOV DPH,A ;修改指針高8位 MOV
10、A,R6 ;取地址代號(hào)低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),第五章 匯編語(yǔ)言程序設(shè)計(jì),5-4 循環(huán)程序 包含多次重復(fù)執(zhí)行的程序段,循環(huán)結(jié)構(gòu)使程序緊湊。 5-4-1循環(huán)程序的導(dǎo)出 各個(gè)環(huán)節(jié)任務(wù): 一初始化部分 循環(huán)準(zhǔn)備工作。 如:清結(jié)果單元、設(shè)指針、設(shè)循環(huán)控制變量初值等。 二循環(huán)體 循環(huán)工作部分: 需多次重復(fù)處理的工作。 循環(huán)控制部分: 1.修改指針和循環(huán)控制變量。 2.檢測(cè)循環(huán)條件:滿足循環(huán)條件,繼續(xù)循環(huán),
11、否則退出循環(huán)。 三.結(jié)束部分 處理和保存循環(huán)結(jié)果。1)已知循環(huán)次數(shù) 2)循環(huán)次數(shù)未知 允許0次循環(huán)的循環(huán)結(jié)構(gòu):在循環(huán)工作之前檢測(cè)循環(huán)條件。,第五章 匯編語(yǔ)言程序設(shè)計(jì),單重循環(huán)簡(jiǎn)單循環(huán)結(jié)構(gòu):循環(huán)體中不套循環(huán)。 例:求n個(gè)單字節(jié)數(shù)據(jù)的累加,設(shè)數(shù)據(jù)串已在43H起始單元,數(shù)據(jù)串長(zhǎng)度在42H單元,累加和不超過(guò)2個(gè)字節(jié)。 SUM:MOVR0,#42H;設(shè)指針 MOVA,R0 MOVR2,A ;循環(huán)計(jì)數(shù)器R2n CLRA ;結(jié)果單元清0 MOVR3,A ADD1:INCR0 ;修改指針 ADDA,R0 ;累加 JNC NEXT ;處理進(jìn)位 INCR3 ;有進(jìn)位,高字節(jié)加1 NEXT:
12、DJNZ R2,ADD1 ;循環(huán)控制:數(shù)據(jù)是否加完? MOV40H,A ;循環(huán)結(jié)束,保存結(jié)果 MOV41H,R3 RET,第五章 匯編語(yǔ)言程序設(shè)計(jì),循環(huán)控制方法:計(jì)數(shù)控制、特征標(biāo)志控制。 一.計(jì)數(shù)控制: 設(shè)循環(huán)計(jì)數(shù)器,控制循環(huán)次數(shù)。正計(jì)數(shù)和倒計(jì)數(shù)兩種方式。 例:為一串7位ASCII碼數(shù)據(jù)的D7位加上奇校驗(yàn),設(shè)數(shù)據(jù)存放在片外RAM的2101H起始單元,數(shù)據(jù)長(zhǎng)度在2100H單元。 MOV DPTR,#2100H MOVX A,DPTR MOV R2,A NEXT:INC DPTR MOVX A,DPTR ORL A,#80H JNB P,PASS ;判斷是否加校驗(yàn) MOVX DPTR
13、,A;是,則加奇校驗(yàn) PASS:DJNZ R2,NEXT DONE:SJMP DONE,第五章 匯編語(yǔ)言程序設(shè)計(jì),二.特征控制:設(shè)定循環(huán)結(jié)束標(biāo)志實(shí)現(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:JNCNEXT ;Cy
14、=1,則AB MOVB,A ;保存較小值 SJMP NEXT DONE: SJMP DONE,第五章 匯編語(yǔ)言程序設(shè)計(jì),5-4-2 多重循環(huán) 循環(huán)體中套循環(huán)結(jié)構(gòu)。以雙重循環(huán)使用較多。 例:將內(nèi)存一串單字節(jié)無(wú)符號(hào)數(shù)升序排序。 步驟: 每次取相鄰單元的兩個(gè)數(shù)比較, 決定是否需要交換數(shù)據(jù)位置。 第一次循環(huán),比較N-1次,取數(shù)據(jù)表中最大值。 第二次循環(huán),比較N-2次,取到次大值。 第N-1次循環(huán):比較一次,排序結(jié)束。,第五章 匯編語(yǔ)言程序設(shè)計(jì),SORT: MOV A,#N-1;N個(gè)數(shù)據(jù)排序 MOV R4,A;外循環(huán)次數(shù) LOOP1:MOV A,R4 MOV R3,A;內(nèi)循環(huán)次數(shù) MOV
15、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,第五章 匯編語(yǔ)言程序設(shè)計(jì),軟件延時(shí)程序 用循環(huán)程序?qū)⒅噶钪貜?fù)多次執(zhí)行,實(shí)現(xiàn)軟件延時(shí)。 試計(jì)算延時(shí)程序的執(zhí)行時(shí)間。 源程序指令周期(M) 指令執(zhí)行次數(shù) DELAY:MOV R6,#64H1 I1: MOV R7,#0FFH 1
16、I2: DJNZ R7,I2 2 DJNZ R6,I1 2 RET 2,延時(shí)時(shí)間計(jì)算:(設(shè)時(shí)鐘f=12MHz) t=(11+1100+2100255+2100+21)M=51.3 ms,1 100 100255 100 1,第五章 匯編語(yǔ)言程序設(shè)計(jì),5.5.2編寫(xiě)循環(huán)程序應(yīng)注意的問(wèn)題 1)循環(huán)體前應(yīng)注意安排循環(huán)初始化; 2)內(nèi)外循環(huán)間不應(yīng)相互交叉。,第五章 匯編語(yǔ)言程序設(shè)計(jì),5-5 查表程序 例5-19 一個(gè)十六進(jìn)制數(shù)存放在HEX單元的低四位,將其轉(zhuǎn)換成ASCII碼并送回HEX單元。 編程: ORG 0100H HEX EQU 30H HEXASC: MOV
17、 A, HEX ANL A ,#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,第五章 匯編語(yǔ)言程序設(shè)計(jì),5-6 子程序設(shè)計(jì)子程序:能完成某項(xiàng)特定功能的獨(dú)立程序段,可被反復(fù)調(diào)用。 優(yōu)點(diǎn): (1)不必重復(fù)書(shū)寫(xiě)同樣的程序,提高編程效率; (2)程
18、序的邏輯結(jié)構(gòu)簡(jiǎn)單,便于閱讀; (3)縮短了源程序和目標(biāo)程序的長(zhǎng)度,節(jié)省了程序存儲(chǔ)器空間; (4)使程序模塊化、通用化,便于交流,共享資源; (5)便于按某種功能調(diào)試。,第五章 匯編語(yǔ)言程序設(shè)計(jì),1. 子程序結(jié)構(gòu) 一子程序入口用標(biāo)號(hào)作為子程序名。 二調(diào)用子程序之前設(shè)置好堆棧。 三用返回指令RET結(jié)束子程序,并保證堆棧棧頂為調(diào) 用程序的返回地址。 四. 子程序嵌套須考慮堆棧容量。 五. 提供足夠的調(diào)用信息: 如:子程序名、子程序功能、入口參數(shù)和出口參數(shù)、子程序占用的硬件資源、子程序中調(diào)用的其他子程序名。,第五章 匯編語(yǔ)言程序設(shè)計(jì),2. 參數(shù)傳遞 入口參數(shù):調(diào)用子程序之前,需要傳給子程序的參數(shù)
19、。 出口參數(shù):子程序送回調(diào)用程序的結(jié)果參數(shù)。 (1)子程序無(wú)須傳遞參數(shù),第五章 匯編語(yǔ)言程序設(shè)計(jì),(2)用累加器和工作寄存器傳遞參數(shù) 例5-24 雙字節(jié)求補(bǔ)子程序CPLD。 解 入口參數(shù):(R7R6)=16位數(shù) 出口參數(shù):(R7R6)=求補(bǔ)后的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,第五章 匯編語(yǔ)言程序設(shè)計(jì),(3)通過(guò)操作數(shù)地址傳遞參數(shù) 例5-25 n字節(jié)求補(bǔ)子程序。 解 入口參數(shù):(R0)=求補(bǔ)數(shù)低字節(jié)指針,(R7)=n-1 出
20、口參數(shù):(R0)=求補(bǔ)后的高字節(jié)指針 CPLN: MOV A,R0 CPL A ADD A,#1 MOVR0,A NEXT: INC R0 MOV A,R0 CPL A ADDC A,#0 MOV R0,A DJNZ R7,NEXT RET,第五章 匯編語(yǔ)言程序設(shè)計(jì),(4)通過(guò)堆棧傳遞參數(shù) 例5-26 在HEX單元存放兩個(gè)十六進(jìn)制數(shù),將它們分別轉(zhuǎn)換 成ASC碼并存入ASC和ASC+1單元。 解 由于要進(jìn)行兩次轉(zhuǎn)換,故可調(diào)用查表子程序完成。 主程序: MAIN: PUSH HEX ;取被轉(zhuǎn)換數(shù) LCAL
21、LHASC ;轉(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 ,第五章 匯編語(yǔ)言程序設(shè)計(jì),子程序: HASC: DEC SP DEC SP ;修改SP指向HEX POPACC ;彈出HEX ANL A,#0FH ;屏蔽高四位 ADD A,#5 ;變址調(diào)整 MOVCA,A+PC ;查表 PUSHACC
22、;結(jié)果入棧 (2字節(jié)) INCSP ; (1字節(jié)) INCSP ;修改SP指向斷點(diǎn)位置(1字節(jié)) RET ; (1字節(jié)) ASCTAB:DB 0 1 2.. .7 DB 8 9 A.. .F ,第五章 匯編語(yǔ)言程序設(shè)計(jì),3. 現(xiàn)場(chǎng)保護(hù)推入與彈出的順序應(yīng)按“先進(jìn)后出”,或“后進(jìn)先出”的順序,才能保證現(xiàn)場(chǎng)的恢復(fù)。 例:十翻二子程序的現(xiàn)場(chǎng)保護(hù)。 BCDCB: PUSH ACC PUSH PSW PUSH DPL ;保護(hù)現(xiàn)場(chǎng) PUSH DPH POP DPH POP DPL POP PSW;恢復(fù)現(xiàn)場(chǎng) POP ACC RET,第五章 匯編語(yǔ)言程序設(shè)計(jì),4. 設(shè)置堆棧 調(diào)用子程序時(shí),主程序的斷點(diǎn)將自動(dòng)入棧; 轉(zhuǎn)子后,現(xiàn)場(chǎng)的保護(hù)都要占用堆棧工作單元,尤其多重轉(zhuǎn)子或子 程序嵌套,需要使棧區(qū)有一定的深度。 由于MCS-51的堆棧是由Sp指針組織的內(nèi)部RAM區(qū),僅有128個(gè) 地址空間,堆棧并非越深越好,深度要恰當(dāng)。,第五章 匯編語(yǔ)言程序設(shè)計(jì),5.6.3 子程序的調(diào)用及嵌套 1子程序調(diào)用 2子程序嵌套,第五章 匯編語(yǔ)言程序設(shè)計(jì),2子程序嵌套,斷點(diǎn)入棧,斷點(diǎn)出棧,
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 外國(guó)文學(xué)論文寫(xiě)作教學(xué)內(nèi)容怎樣選擇外國(guó)文學(xué)的題目市公開(kāi)課金獎(jiǎng)市賽課一等獎(jiǎng)?wù)n件
- 新生兒的靜脈營(yíng)養(yǎng)的配制及護(hù)理
- 銷(xiāo)售員基本知識(shí)培訓(xùn)
- 濕法煉鋅和火法煉鋅課件
- 西塞山懷古課件
- 蘇教版小學(xué)六年級(jí)科學(xué)下冊(cè)達(dá)爾文與他的“進(jìn)化論”課件
- 初中八年級(jí)英語(yǔ)下冊(cè)《Unit8Have_you_read_Treasure_Island_yet_sectionA》ppt課件(人教版)
- 科學(xué)理財(cái)合理利用理財(cái)知識(shí)分享課件
- 有效排痰的方法概述課件
- 六年級(jí)上英語(yǔ)Unit-3-My-weekend-plan第3課時(shí)課件
- 公開(kāi)課朗誦培訓(xùn)課件
- 高級(jí)體系結(jié)構(gòu)期末考試課后習(xí)題匯總
- 思與辨-NSCLC腦轉(zhuǎn)移治療選擇ppt課件
- 全國(guó)統(tǒng)考2022版高考數(shù)學(xué)大一輪備考復(fù)習(xí)第7章不等式第1講不等關(guān)系與一元二次不等式課件文
- 施工企業(yè)宣傳冊(cè)課件