單片機原理課件:第四章 匯編語言程序設計_第1頁
單片機原理課件:第四章 匯編語言程序設計_第2頁
單片機原理課件:第四章 匯編語言程序設計_第3頁
單片機原理課件:第四章 匯編語言程序設計_第4頁
單片機原理課件:第四章 匯編語言程序設計_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第四章 匯編語言程序設計匯編語言源程序編輯與匯編匯編語言程序設計方法 4.24.1程序設計過程程序技巧匯編語言規(guī)范匯編語言程序編輯和匯編常用的流程圖符號4.1 匯編語言源程序編輯與匯編任務分析(硬件、軟件系統(tǒng)分析)確定算法和工作步驟程序設計過程程序總體設計和流程圖繪制分配內(nèi)存及端口,確定程序與數(shù)據(jù)區(qū)存放地址編制源程序仿真、調(diào)試程序固化程序程序功能模塊化(按功能分:顯示、打印、輸入、發(fā)送等)盡量采用循環(huán)結(jié)構(gòu)和子程序(節(jié)省內(nèi)存)12多采用累加器來傳遞參數(shù)注意現(xiàn)場保護,即壓入堆棧34編程技巧匯編語言的規(guī)范匯編語言源程序由以下兩種指令構(gòu)成匯編語句(指令語句)偽指令(指示性語句)匯編語句的格式: 標號:

2、 操作碼操作數(shù);注釋3. 數(shù)據(jù)表示形式: 二進制(B)、十六進制(H)、十進制(D或省略)、ASCII碼(以單引號標識) 匯編語言程序編輯和匯編1. 編輯(源程序,以.ASM擴展名存盤);2. 匯編(手工或機器匯編); 如: MOV A,#88H;機器碼74H,88H 又如:地址 目標碼 源程序 ORG 1000H 1000H 747F MOV A,#7FH 1002H 7944 MOV R1,#44H END常用的流程圖符號順序程序設計分支程序設計循環(huán)程序設計查表程序設計子程序設計4.2 匯編語言程序設計方法順序程序設計例:求多項式解:設a存放在R2中,b存放在R3中,結(jié)果存放在R6和R7中

3、。程序如下: MOV A, R2 MOV B, A MUL AB CLR C SUBB A, R3 ;帶進位減 MOV R7, A ;保存低8位 MOV A, B SUBB A,#00H ;高八位減進位 MOV R6,A END分支程序設計AJMP、LJMP、SJMP 、JMP JZ、JNZ、CJNE、DJNZ 根據(jù)不同的條件轉(zhuǎn)向不同的處理程序控制轉(zhuǎn)移指令 位轉(zhuǎn)移指令 JC、JNC、JB、JNB、JBC例:累加器A內(nèi)有一個16進制ASCII字符,要求轉(zhuǎn)換成一個16進制數(shù)存放于A。ASCII字符轉(zhuǎn)換成16進制數(shù)規(guī)則:數(shù)字09 :只需減30H字母AF :減30H,再減7START0C(A)-30H

4、 A(A) 50ms,因為沒有考慮到除DJNZ指令之外的其它指令的執(zhí)行時間。DEL: MOV R7,#200 ;1 sDEL1:MOV R6,#123 ;1 s NOP ;1 sDEL2:DJNZ R6,DEL2 ;2s,計(2123)s DJNZ R7,DEL1 ;2s, RET 共計 (21232 2)200+1 s,即50.001ms MOV R0,#data MOV DPTR,#bufferLOOP0:MOV A,R0 CJNE A,#24H,LOOP1 ;判斷是否為 $ 字符 SJMP LOOP2 ;是 $ 字符,轉(zhuǎn)結(jié)束LOOP1:MOVX DPTR,A ;非 $ 字符,執(zhí)行傳送 I

5、NC R0 INC DPTR SJMP LOOP0 ;傳送下一數(shù)據(jù) LOOP2: 二、先判斷后執(zhí)行例:將內(nèi)部RAM中起始地址為data的數(shù)據(jù)串傳送到外部RAM中起始地址為buffer的存儲區(qū)域內(nèi),直到發(fā)現(xiàn)$ 字符停止傳送。由于循環(huán)次數(shù)事先不知道,但循環(huán)條件可以測試到。所以,采用先判斷后執(zhí)行的結(jié)構(gòu)比較適宜。程序段如下:例:200名學生參加考試,成績放在8031的外部RAM的一個連續(xù)存儲單元,95100分頒發(fā)A級證書,9094分頒發(fā)B級證書,編一程序,統(tǒng)計獲A、B級證書的人數(shù)。將結(jié)果存入內(nèi)部RAM的兩個單元。 ORG 0030H EG DATA 1000H GA DATA 20H GB DATA

6、21H MOV GA,#00 MOV GB,#00 MOV DPTR,#EG MOV R2,#200LOOP: MOVX A,DPTR CJNE A, #95, LOOP1 LOOP1: JNC NEXT1 CJNE A,#90,LOOP2LOOP2: JC NEXT INC GB SJMP NEXTNEXT1: INC GANEXT: INC DPTR DJNZ R2,LOOP SJMP $ END查表程序設計表格是事先存放在ROM中的,一般為一串有序的常數(shù),例如平方表、字型碼表等。表格可通過偽指令DB來確定。通過查表指令MOVC A,A+DPTR和MOVC A,A+PC來實現(xiàn)。 用DB、D

7、W建立表格首地址送DPTR關(guān)鍵字送A查表:MOVC A,A+DPTR用查表法計算平方(一) ORG0000H MOVDPTR,#TABLE ;表首地址送DPTR MOV A,#05 ;被查數(shù)字05A MOVCA,A+DPTR;查表求平方 SJMP$ TABLE:DB 0,1,4,9,16,25,36,49,64,81 END 用查表法計算平方(一) 用查表法計算平方(二) ORG0000H0000H MOVA, #05 ;05 A0002H ADDA, #02 ;修正累加器A0004H MOVCA, A+PC;查表求平方0005H SJMP$ 0007H:DB0,1,4,9,16,25,36,

8、49,64,81 END使用傳送指令將關(guān)鍵字送入ACCADD A, #DATA指令對A進行修改: PC+DATA=表格首地址12MOVC A,A+PC 完成查表.3使用 MOVC A,A+PC須注意:DATA=表格首地址-指令地址-1例 : MOV A, XADDA,#01HMOVCA,A+PCRETDB00,01,04,09,10H,19H,24H,31H,30HDATA=表格首地址-指令地址-1即:MOVC與DB之間的字節(jié)數(shù)例 設一巡回報警系統(tǒng),對16路輸入進行控制,現(xiàn)根據(jù)測量路數(shù),找出每路的最大允許值(若大于允許值就報警)。(查找雙字節(jié)表格)TB3:MOV A, R2 ADD A, R2

9、MOV R3, A ADD A, #6 MOVCA, A+PC XCH A, R3 ADD A, #3 MOVC A, A+PC MOV R4, A RETTAB3:DW1520,3721,4256 ;表格最大長度256 DW 子程序設計注意事項:1. 給子程序賦一個名字。實際為入口地址代號。2. 子程序調(diào)用: ACALL、 LCALL 子程序返回: RET 要能正確傳遞參數(shù): 入口條件:子程序中要處理的數(shù)據(jù)如何給予。 出口條件:子程序處理結(jié)果如何存放。 (寄存器、存儲器、堆棧方式)3. 保護與恢復現(xiàn)場: 保護現(xiàn)場:壓棧指令PUSH 恢復現(xiàn)場:彈出指令POP4. 子程序可以嵌套主程序與子程序的

10、關(guān)系子程序的嵌套子程序的調(diào)用與返回例 :利用查表法求平方和 ,設a、b、c分別存于內(nèi)部RAM的DA、DB、DC三個單元中。 MOV A,DA;取a ACALLSQR;調(diào)用查表子程序 MOV R1,A;a的平方暫存R1中 MOVA,DB;取b ACALLSQR;調(diào)用查表子程序 ADDA,R1 ;求出平方和暫存于A中 MOVDC,A;結(jié)果存于DC 中 SJMP$SQR:MOVDPTR,#TAB;子程序 MOVCA,A+DPTR RETTAB: DB0,1,4,9,16,25,36,49,64,81 END 利用累加器或寄存器傳遞參數(shù)參數(shù)傳遞方法用累加器或工作寄存器來傳遞參數(shù): A、R0R7優(yōu)點:最

11、簡單,運算速度快。缺點:累加器和工作寄存器數(shù)量有限,不能傳遞 太多參數(shù)。用指針寄存器來傳遞參數(shù):參數(shù)存放在內(nèi)存用堆棧來傳遞參數(shù)程序段參數(shù)傳遞(適于傳遞大量常數(shù)參數(shù))程序段參數(shù)傳遞采用程序段參數(shù)傳遞的方法,編寫字符串發(fā)送的子程序: SOUT:POPDPH POP DPL SOT1: CLR A MOVCA,A+DPTR INCDPTR JZ SEND JNB TI ,$ CLR TI MOV SBUF,A SJMP SOT1 SEND:JMP A+DPTR 串口發(fā)送中斷標志位以發(fā)送MCS-51 CONTROLLER 為例,說明該子程序的調(diào)用方法:ACALLSOUT DBMCS-51 CONTROLLER DB0AH,0DH,0換行鍵回車鍵以上子程序特點:不以一般返回指令RET結(jié)尾,而是采用散轉(zhuǎn)指令返回到參數(shù)表后第一條指令可適用ACALL或LCALL,因為這兩種調(diào)用指令把下一條指令或數(shù)據(jù)字節(jié)地址壓入堆棧需傳遞的參數(shù)可按最方便的次序排列子程序只使用A和DPTR習題1: 片內(nèi)RAM中30H和31H中存有兩個無符號數(shù),將兩個數(shù)的最小者存放入40H中。解:1)需要用到的指令:CJNE、JC 2) 畫流程圖 3)編程 ORG1000H MOVA,30H CJN

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論