新第4章80C51的匯編語(yǔ)言程序設(shè)計(jì).ppt_第1頁(yè)
新第4章80C51的匯編語(yǔ)言程序設(shè)計(jì).ppt_第2頁(yè)
新第4章80C51的匯編語(yǔ)言程序設(shè)計(jì).ppt_第3頁(yè)
新第4章80C51的匯編語(yǔ)言程序設(shè)計(jì).ppt_第4頁(yè)
新第4章80C51的匯編語(yǔ)言程序設(shè)計(jì).ppt_第5頁(yè)
已閱讀5頁(yè),還剩31頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、2021/3/6,1,第4章 匯編語(yǔ)言程序設(shè)計(jì),2021/3/6,2,單片機(jī)應(yīng)用系統(tǒng)由硬件系統(tǒng)和應(yīng)用程序構(gòu)成,匯編語(yǔ)言 高級(jí)語(yǔ)言,應(yīng)用程序設(shè)計(jì)方法,匯編語(yǔ)言,生成的目標(biāo)程序占內(nèi)存空間少、運(yùn)行速度快,具有效率高、實(shí)時(shí)性強(qiáng),高級(jí)語(yǔ)言,對(duì)系統(tǒng)的功能描述與實(shí)現(xiàn)簡(jiǎn)單,程序閱讀、修改和移植方便,適合于編寫復(fù)雜的程序,2021/3/6,3,4.1 程序編制的方法和技巧,4.1.1 匯編語(yǔ)言程序設(shè)計(jì)的步驟,分析問(wèn)題,抽象出描述問(wèn)題的數(shù)學(xué)模型,確定解決問(wèn)題的算法或解題思想,分配存儲(chǔ)空間和工作單元,繪制流程圖,編制程序,程序調(diào)試和程序優(yōu)化,2021/3/6,4,繪制流程圖,流程圖符號(hào),2021/3/6,5,強(qiáng)化模

2、塊化觀念,使程序占用空間減少、結(jié)構(gòu)清晰 循環(huán)初值和結(jié)束條件,避免“死機(jī)”現(xiàn)象 子程序的現(xiàn)場(chǎng)保護(hù)(注意棧平衡、寄存器內(nèi)容,程序模塊(主程序模塊、各種子程序模塊) 模塊化優(yōu)點(diǎn):分塊設(shè)計(jì)、便于閱讀、調(diào)試方便,4.1.2 編制程序的方法和技巧,采用循環(huán)和子程序結(jié)構(gòu),對(duì)中斷子程序還有注意保護(hù)PSW的內(nèi)容,2021/3/6,6,4.1.3 匯編語(yǔ)言的語(yǔ)句格式,非數(shù)字字符開頭,后跟字母、數(shù)字、“-”、“?”等 不能用已定義的保留字(指令助記符、偽指令等) 后跟英文冒號(hào)“,標(biāo)號(hào)(即符號(hào)地址,標(biāo)號(hào): 指令助記符 操作數(shù)1, 操作數(shù)2, 操作數(shù)3, ;注釋,指令助記符,是指令功能的英文縮寫,2021/3/6,7,

3、數(shù)據(jù):二進(jìn)制(B) 十進(jìn)制(D或省略D) 十六進(jìn)制(H),注意AF開頭時(shí)要加“0” ASCII碼,如 A,1245 符號(hào):符號(hào)名、標(biāo)號(hào)或“$”(PC的當(dāng)前值) 表達(dá)式:由運(yùn)算符和數(shù)據(jù)構(gòu)成,操作數(shù),注釋,英文分號(hào)“;”開頭,4.1.3 匯編語(yǔ)言的語(yǔ)句格式,2021/3/6,8,補(bǔ)充知識(shí),2021/3/6,9,4.2.1 順序結(jié)構(gòu)程序設(shè)計(jì),4.2 基本程序結(jié)構(gòu),例4-1】試編制雙字節(jié)加法程序。 題目要求:設(shè)被加數(shù)的高字節(jié)放在30H中,低字節(jié)放在31H中,加數(shù)的高字節(jié)放在32H,低字節(jié)放在33H中。加法結(jié)果的高字節(jié)放在34H中,低字節(jié)放在35H中(大端模式,程序分析:由于80C51單片機(jī)的加法指令只

4、能處理8位二進(jìn)制數(shù),所以雙字節(jié)加法程序的算法應(yīng)首先從低字節(jié)開始相加,然后依次將次低字節(jié)和來(lái)自低字節(jié)相加的進(jìn)位進(jìn)行加法運(yùn)算,2021/3/6,10,ORG 0040H START:CLR C MOV A,31H ADD A,33H MOV 35H,A MOV A,30H ADDC A,32H MOV 34H,A SJMP $ END,2021/3/6,11,例4-3】片內(nèi)RAM的21H單元存放一個(gè)十進(jìn)制數(shù)據(jù)十位的ASCII碼,22H單元存放該數(shù)據(jù)個(gè)位的ASCII碼。編寫程序?qū)⒃摂?shù)據(jù)轉(zhuǎn)換成壓縮BCD碼存放在20H單元,2021/3/6,12,ORG 0040H START:MOV A,21H ;取

5、十位ASCII碼 ANL A,#0FH ;保留低半字節(jié) SWAP A ;移至高半字節(jié) MOV 20H,A ;存于20H單元 MOV A,22H ;取個(gè)位ASCII碼 ANL A,#0FH ;保留低半字節(jié) ORL 20H,A ;合并到結(jié)果單元 SJMP $ END,2021/3/6,13,4.2.2 分支結(jié)構(gòu)程序設(shè)計(jì),在實(shí)際問(wèn)題的編程處理中,通常會(huì)根據(jù)不同的條件進(jìn)行判斷,根據(jù)不同的判斷結(jié)果,程序作出不同的相應(yīng)處理,這種結(jié)構(gòu)被稱為分支。分支程序的設(shè)計(jì)主要依靠條件轉(zhuǎn)移指令、比較轉(zhuǎn)移指令和位轉(zhuǎn)移指令來(lái)實(shí)現(xiàn),2021/3/6,14,該圖使用條件轉(zhuǎn)移指令來(lái)實(shí)現(xiàn)分支,當(dāng)給出的條件成立時(shí),執(zhí)行程序段1,否則執(zhí)

6、行程序段2,2021/3/6,15,該圖使用條件轉(zhuǎn)移指令來(lái)實(shí)現(xiàn)分支,當(dāng)給出的條件成立時(shí),執(zhí)行程序段A,否則執(zhí)行程序段B,2021/3/6,16,該圖使用散轉(zhuǎn)指令JMP來(lái)實(shí)現(xiàn)多分支轉(zhuǎn)移,它首先將分支程序按序號(hào)的值來(lái)實(shí)現(xiàn)分支轉(zhuǎn)移,2021/3/6,17,例4-6】 編制計(jì)算符號(hào)函數(shù)y=SGN(x)的程序。 y= 設(shè)片內(nèi)RAM的30H單元內(nèi)有自變量x(-128x127)的值,編制程序求函數(shù)Y的值,并將其存入片內(nèi)RAM的31H單元中,2021/3/6,18,2021/3/6,19,ORG 1000H START:MOV A,30H ;將X送入A中 JZ ZERO ;為0轉(zhuǎn)移 JNB ACC.7,POS

7、ITIVE ; 為正數(shù)轉(zhuǎn)移 MOV A, #0FFH ; 將1(補(bǔ)碼)送入A中 SJMP ZERO POSITIVE:MOV A, #01H ;將+1送入A中 ZERO:MOV 31H, A ; 結(jié)果存入Y END,2021/3/6,20,補(bǔ)充例題】設(shè)變量x以補(bǔ)碼的形式存放在片內(nèi)RAM的30H單元,變量y與x的關(guān)系是:當(dāng)x大于0時(shí),y=x;當(dāng)x=0時(shí),y=20H;當(dāng)x小于0時(shí),y=x+5。編制程序,根據(jù)x的大小求y并送回原單元,2021/3/6,21,ORG 0040H START:MOV A,30H ;取x至累加器 JZ NEXT ;x = 0,轉(zhuǎn)NEXT ANL A,#80H ;否,保留符

8、號(hào)位 JZ DONE ;x 0,轉(zhuǎn)結(jié)束 MOV A,#05H ;x 0處理 ADD A,30H MOV 30H,A ;X+05H送Y SJMP DONE NEXT:MOV 30H,#20H ;x = 0,20H送Y DONE:SJMP DONE END,2021/3/6,22,4.2.3 循環(huán)結(jié)構(gòu)程序設(shè)計(jì),2021/3/6,23,循環(huán)程序的組成大致包括以下內(nèi)容: 1、循環(huán)初始化:位于循環(huán)程序開頭,設(shè)置各工作單元的初始值,設(shè)定循環(huán)次數(shù)等。 2、循環(huán)體:循環(huán)體也稱為循環(huán)處理部分,是循環(huán)程序的核心;用于完成實(shí)際操作處理,是重復(fù)的執(zhí)行部分。 3、循環(huán)控制:位于循環(huán)體內(nèi),一般由循環(huán)次數(shù)修改、指針修改和條

9、件控制等組成,用于控制循環(huán)次數(shù)循環(huán)參數(shù)。 4、循環(huán)結(jié)束:用于存放執(zhí)行循環(huán)程序運(yùn)行后的結(jié)果,以及恢復(fù)各工作單元的初值,2021/3/6,24,例4-8】將內(nèi)部RAM的30H至3FH單元初始化為00H,MAIN:MOV R0,#30H ;置初值 MOV A,#00H ; MOV R7,#16 ; LOOP:MOV R0,A ;循環(huán)處理 INC R0 ; DJNZ R7,LOOP ;循環(huán)修改,判結(jié)束 SJMP $ ;結(jié)束處理,2021/3/6,25,例4-9】將內(nèi)部RAM起始地址為60H的數(shù)據(jù)串傳送到外部RAM中起始地址為1000H的存儲(chǔ)區(qū)域,直到發(fā)現(xiàn)$ 字符停止傳送,MAIN:MOV R0,#60

10、H ;置初值 MOV DPTR,#1000H LOOP0:MOV A,R0 ;取數(shù)據(jù) CJNE A,#24H,LOOP1 ;循環(huán)結(jié)束? SJMP DONE ;是 LOOP1:MOVX DPTR,A ;循環(huán)處理 INC R0 ;循環(huán)修改 INC DPTR SJMP LOOP0 ;繼續(xù)循環(huán) DONE:SJMP DONE ;結(jié)束處理,2021/3/6,26,例 4-12】 設(shè)80C51單片機(jī)的時(shí)鐘頻率為fosc =12 MHz,試設(shè)計(jì)0.1s的延時(shí)程序。 DELAY:MOV R3, #Data1 ;1個(gè)機(jī)器周期(T) DEL2:MOV R4, #Data2 ;1個(gè)機(jī)器周期(T) DEL1:NOP ;

11、1個(gè)機(jī)器周期(T) NOP ;1個(gè)機(jī)器周期(T) DJNZ R4,DEL1 ;2個(gè)機(jī)器周期(T) DJNZ R3,DEL2 ;2個(gè)機(jī)器周期(T) RET 延時(shí)時(shí)間的計(jì)算結(jié)果: 1+1+(1+1+2)*Data2+2* Data1*機(jī)器周期(T) 若Datat1=125,Data2=200,則該程序產(chǎn)生的延時(shí)時(shí)間為:100376*機(jī)器周期(T)=0.100376s=0.1s,2021/3/6,27,4.3 子程序設(shè)計(jì),完成通用功能、反復(fù)使用的程序設(shè)計(jì)成子程序。使應(yīng)用程序結(jié)構(gòu)清晰緊湊,便于閱讀和調(diào)試,執(zhí)行要由其它程序來(lái)調(diào)用,執(zhí)行完后要返回到調(diào)用程序,結(jié)構(gòu)上仍然采用一般程序的3種結(jié)構(gòu),調(diào)用時(shí)注意:

12、一是現(xiàn)場(chǎng)的保護(hù)和恢復(fù); 二是主程序與子程序間的參數(shù)傳遞,2021/3/6,28,4.3.1 子程序的調(diào)用與返回,2021/3/6,29,4.3.2 保存與恢復(fù)寄存器內(nèi)容,PUSH PSW ;保護(hù)現(xiàn)場(chǎng)( 含當(dāng)前工作寄存器組號(hào)) PUSH ACC ; PUSH B ; POP B ;恢復(fù)現(xiàn)場(chǎng) POP ACC ; POP PSW ;含當(dāng)前工作寄存器組切換,2021/3/6,30,4.3.3 子程序的參數(shù)傳遞,主程序在調(diào)用子程序時(shí)傳送給子程序的參數(shù)和子程序結(jié)束后送回主程序的參數(shù)統(tǒng)稱為參數(shù)傳遞。 入口參數(shù):子程序運(yùn)行時(shí)所需要的原始參數(shù)。在調(diào)用子程序前,必須將所需參數(shù)送到指定的存儲(chǔ)單元(或寄存器)中,然后

13、子程序從約定的存儲(chǔ)單元(或寄存器)中獲得這些入口參數(shù)。 出口參數(shù):子程序根據(jù)入口參數(shù)執(zhí)行程序后所得的結(jié)果。子程序運(yùn)行結(jié)束(返回)前,必須將出口參數(shù)送到指定的存儲(chǔ)單元(或寄存器)中,以便主程序從指定的存儲(chǔ)單元(或寄存器)中獲得運(yùn)行結(jié)果,2021/3/6,31,4.3.3 子程序的參數(shù)傳遞,利用累加器或寄存器(簡(jiǎn)單、快速,但參數(shù)個(gè)數(shù)不多,例4-15】實(shí)現(xiàn)兩個(gè)8位的十六進(jìn)制無(wú)符號(hào)數(shù)求和的子程序,SADD:MOV A,R3 ;取加數(shù)(在R3中) CLR C ADD A,R4 ;被加數(shù)(在R4中)加A JC PP1 MOV R3,#00H ;結(jié)果小于255時(shí),高字節(jié)R3內(nèi)容為00H SJMP PP2 P

14、P1:MOV R3,#01H ;結(jié)果大于255時(shí),高字節(jié)R3內(nèi)容為01H PP2:MOV R4,A ;結(jié)果的低字節(jié)在R4中 RET,入口:(R3)=加數(shù); (R4)=被加數(shù),出口:(R3)=和的高字節(jié); (R4)=和的低字節(jié),2021/3/6,32,利用存儲(chǔ)器(個(gè)數(shù)多,用R0或R1及DPTR為參數(shù)表指針,例4-16】將內(nèi)部RAM 中兩個(gè)4字節(jié)無(wú)符號(hào)整數(shù)相加,和的高字節(jié)由R0指向。數(shù)據(jù)采用大端模式存儲(chǔ),入口:(R0)=加數(shù)低字節(jié)地址; (R1)=被加數(shù)低字節(jié)地址,出口:(R0)=和的高字節(jié)起始地址,NADD:MOV R7,#4 ;字節(jié)數(shù)4送計(jì)數(shù)器 CLR C ; NADD1:MOV A,R0 ;

15、利用指針,取加數(shù)低字節(jié) ADDC A,R1 ;利用指針,被加數(shù)低字節(jié)加A MOV R0,A ; DEC R0 DEC R1 DJNZ R7,NADD1 INC R0 ;調(diào)整指針,指向出口 RET,2021/3/6,33,利用堆棧,例4-17】將內(nèi)部RAM中20H單元中的1個(gè)字節(jié)十六進(jìn)制數(shù)轉(zhuǎn)換為2位ASCII碼,存放在R0指示的兩個(gè)單元中,入口:預(yù)轉(zhuǎn)換數(shù)據(jù)(低半字節(jié))在棧頂,出口:轉(zhuǎn)換結(jié)果(ASCII碼)在棧頂,HEASC:MOV R1,SP ;借用R1為堆棧指針 DEC R1 DEC R1 ;R1指向被轉(zhuǎn)換數(shù)據(jù) XCH A,R1 ;取被轉(zhuǎn)換數(shù)據(jù) ANL A,#0FH ;取一位十六進(jìn)制數(shù) ADD

16、 A,#2 ;偏移調(diào)整,所加值為MOVC與DB間總字節(jié)數(shù) MOVC A,A+PC ;查表 XCH A,R1 ;1字節(jié)指令,存結(jié)果于堆棧中 RET ;1字節(jié)指令 ASCTAB:DB 30H,31H,32H,33H,34H,35H,36H,37H DB 38H,39H,41H,42H,43H,44H,45H,46H,2021/3/6,34,驗(yàn)證程序段,MAIN:MOV A,20H ; SWAP A PUSH ACC ;預(yù)轉(zhuǎn)換的數(shù)據(jù)(在低半字節(jié))入棧 ACALL HEASC POP ACC ;彈出棧頂結(jié)果于ACC中 MOV R0,A ;存轉(zhuǎn)換結(jié)果高字節(jié) INC R0 ;修改指針 PUSH 20H ;預(yù)轉(zhuǎn)換的數(shù)據(jù)(在低半字節(jié))入棧 ACALL HEASC POP ACC ;彈出棧頂結(jié)果

溫馨提示

  • 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. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論