第4章80C51的匯編語(yǔ)言程序設(shè)計(jì)m.ppt_第1頁(yè)
第4章80C51的匯編語(yǔ)言程序設(shè)計(jì)m.ppt_第2頁(yè)
第4章80C51的匯編語(yǔ)言程序設(shè)計(jì)m.ppt_第3頁(yè)
第4章80C51的匯編語(yǔ)言程序設(shè)計(jì)m.ppt_第4頁(yè)
第4章80C51的匯編語(yǔ)言程序設(shè)計(jì)m.ppt_第5頁(yè)
已閱讀5頁(yè),還剩18頁(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、2020/8/3,1,第4章 80C51的匯編語(yǔ)言程序設(shè)計(jì),程序編制的方法和技巧,4.1,源程序的編輯和匯編,4.2,基本程序結(jié)構(gòu),4.3,子程序及其調(diào)用,4.4,簡(jiǎn)單I/O設(shè)備的并口直接驅(qū)動(dòng)示例,4.5,4.1程序編制的方法和技巧,4.1.1程序編制步驟,一、任務(wù)分析 二、算法設(shè)計(jì) 三、流程描述,標(biāo)號(hào)是指令的符號(hào)地址,通常作轉(zhuǎn)移指令的操作數(shù); 由1-31個(gè)字符組成,由字母、數(shù)字、“-”、“?”等組成,不能由數(shù)字開(kāi)頭; 不能用已定義的保留字; 必須后跟英文冒號(hào)”:”,4.1.3匯編語(yǔ)言的語(yǔ)句格式,標(biāo)號(hào):指令助記符操作數(shù)1,操作數(shù)2,操作數(shù)3;注釋,指令助記符是指令功能的英文縮寫(xiě),不可空缺。,操

2、作數(shù)是指令要操作的數(shù)據(jù)或數(shù)據(jù)的地址 操作數(shù)可以空缺,或者一項(xiàng)、兩項(xiàng)、三項(xiàng)或者多項(xiàng); 各項(xiàng)之間用英文逗號(hào)隔開(kāi); 操作數(shù)可以是數(shù)據(jù)(二進(jìn)制、十六進(jìn)制、ASCII碼等)、符號(hào)(符號(hào)名、標(biāo)號(hào)或特定符號(hào)$)、表達(dá)式組成; 表達(dá)式由運(yùn)算符和數(shù)據(jù)構(gòu)成的算式。 如:4*(5+6)、2 shl 2等,注釋只是對(duì)語(yǔ)句的說(shuō)明,以增加程序的可讀性,以英文分號(hào)”;”開(kāi)頭。,例:tab: db 20h,4*(2+6),40h,50h,10h ;定義一串?dāng)?shù)據(jù),起始地址為tab mov dptr,#tab,2020/8/3,4,4.2.1 源程序編輯與匯編,一、源程序的編輯.asm 二、源程序的匯編A51.exe 三、目標(biāo)文

3、件的連接BL51.exe,由符號(hào)轉(zhuǎn)換器OH51.exe轉(zhuǎn)換成*.hex文件,4.2源程序的編輯和匯編,2020/8/3,5,4.2.2 偽指令,偽指令,也叫匯編命令。僅對(duì)匯編過(guò)程進(jìn)行指示 偽指令無(wú)對(duì)應(yīng)的單片機(jī)可執(zhí)行代碼,起始地址設(shè)定偽指令ORG,ORG 表達(dá)式,表達(dá)式通常為十六進(jìn)制地址,例:,ORG 8000H START:MOV A,#30H ,ORG可多次使用,但地址值的順序要由小到大順序設(shè)置,結(jié)束匯編偽指令END,END,該偽指令位于源程序的最后一行。,2020/8/3,6,定義字節(jié)數(shù)據(jù)表偽指令DB,定義字?jǐn)?shù)據(jù)表偽指令DW,1000H,標(biāo)號(hào): DB 字節(jié)數(shù)據(jù)表,如: ORG 1000H

4、DB -2,-4,-6,8,10,18,1001H,標(biāo)號(hào): DW 字?jǐn)?shù)據(jù)表,ORG 1400H DATA1:DW 324AH,3CH ,1400H,1401H,1402H,1403H,大端模式,2020/8/3,7,定義常值為符號(hào)名偽指令EQU,符號(hào)名 EQU 常值表達(dá)式,LEN EQU 10 SUM EQU 21H BLOCK EQU 22H CLR A MOV R7,LEN MOV R0,BLOCK LOOP:ADD A,R0 INC R0 DJNZ R7,LOOP MOV SUM,A,符號(hào)名為: 地址 常數(shù) 段名 字符串 寄存器名 位名,比較:標(biāo)號(hào)只能是地址,符號(hào)名可以代表地址、常數(shù)、段

5、名等,注:用EQU定義的符號(hào)名一經(jīng)定義便不能重新定義和改變,2020/8/3,8,定義位地址為符號(hào)名偽指令BIT,符號(hào)名 BIT 位地址表達(dá)式,如: ST BIT P1.0 ;將P1.0的位地址賦給符號(hào)名ST CF BIT 0D7H ;將位地址為D7H的位定義為符號(hào)名,用BIT定義的“符號(hào)名”一經(jīng)定義便不能重新定義和改變 其它一些偽指令參見(jiàn)教材表4.2,程序設(shè)計(jì)流程,4.3基本程序結(jié)構(gòu),明確要求和要達(dá)到的目的 確定解決問(wèn)題的計(jì)算方法和步驟 畫(huà)出流程圖 按流程圖編寫(xiě)程序 上機(jī)匯編、調(diào)試、修改及最后確定源程序,4.3基本程序結(jié)構(gòu),4.3.1 順序程序 順序程序是無(wú)分支無(wú)循環(huán)的程序。 【例4-1】設(shè)

6、片內(nèi)RAM的21H單元存放一個(gè)十進(jìn)制數(shù)據(jù)十位的ASCII碼, 22H單元存放一個(gè)十進(jìn)制數(shù)據(jù)個(gè)位的ASCII碼,編寫(xiě)程序?qū)⒃摂?shù)據(jù)轉(zhuǎn)換成壓縮BCD碼存放在20H單元,程序: ORG 0000H LJMP START ORG 0040H START: MOV A,21H ANL A,#0FH SWAP A MOV 20H,A MOV A,22H ANL A,#0FH ORL 20H,A SJMP $ END,4.3.2 分支程序 根據(jù)需要改變程序的執(zhí)行順序。單分支、多分支等 【例4-2】設(shè)變量x以補(bǔ)碼形式存在片內(nèi)RAM的30H單元,變量y與x的關(guān)系是: 當(dāng)x0時(shí),y=x; 當(dāng)x=0時(shí),y=20H;

7、當(dāng)x0時(shí),y=x+5。編制程序,根據(jù)x的大小求y并送回原單元。,程序: ORG 0000H LJMP START ORG 0040H START: MOV A,30H JZ NEXT ANL A,#80H JZ DONE MOV A,#05H ADD A,30H MOV 30H,A SJMP DONE NEXT: MOV 30H,#20H DONE: SJMP DONE END,4.3.3 循環(huán)程序 按某種控制規(guī)律重復(fù)執(zhí)行的程序。 【例4-4】編寫(xiě)程序,將內(nèi)部30H至3FH單元初始化為00H。,程序: ORG 0000H LJMP MAIN ORG 0040H MAIN: MOV R0,#30

8、H MOV A,#00H MOV R7,#16 LOOP: MOV R0,A INC R0 DJNZ R7,LOOP SJMP $ END,【例4-5】將內(nèi)部RAM中起始地址為60H的數(shù)據(jù)串傳送到外部RAM中起始地址為1000H的存儲(chǔ)區(qū)域內(nèi),直到發(fā)現(xiàn)$字符停止傳送。,程序: ORG 0000H LJMP MAIN ORG 0040H MAIN: MOV R0,#60H MOV DPTR,#1000H LOOP0: MOV A,R0 CJNZ A,#24H,LOOP1 SJMP DONE LOOP1: MOV DPTR,A INC R0 INC DPTR SJMP LOOP0 DONE: SJM

9、P DONE END,4.4 子程序及其調(diào)用,目的:具有通用性的問(wèn)題如數(shù)制轉(zhuǎn)換、數(shù)值計(jì)算等,在一個(gè)程序中要使用多次,可以將其設(shè)計(jì)成通用的子程序供隨時(shí)使用,利用子程序可以使程序結(jié)構(gòu)緊湊,使程序閱讀和調(diào)試更加方便。 特點(diǎn):能完成確定任務(wù),并能為其他程序反復(fù)調(diào)用的程序段.要求子程序在結(jié)構(gòu)上具有通用性和獨(dú)立性;它的執(zhí)行要由其他程序來(lái)調(diào)用,執(zhí)行完后要返回到調(diào)用程序。 注意:現(xiàn)場(chǎng)的保護(hù)與恢復(fù)、主程序與子程序之間的參數(shù)傳遞。,4.4.1 現(xiàn)場(chǎng)保護(hù)與恢復(fù),一、在主程序中實(shí)現(xiàn),如: PUSH PSW PUSH ACC PUSH B MOV PSW,#10H LCALL ADDR16 POP B POP ACC

10、POP PSW,二、在子程序中實(shí)現(xiàn),如:SUB1:PUSH PSW PUSH ACC PUSH B MOV PSW,#10H POP B POP ACC POP PSW RET,注意:順序的對(duì)應(yīng)關(guān)系,4.4.2 參數(shù)傳遞(入口參數(shù)及出口參數(shù)傳遞),利用累加器或寄存器 利用存儲(chǔ)器(指針R0、R1、DPTR) 利用堆棧,當(dāng)相互傳遞的數(shù)據(jù)較少時(shí),采用寄存器傳遞方式可以獲得較快的傳遞速度;當(dāng)數(shù)據(jù)較多時(shí),宜采用存儲(chǔ)器或堆棧方式傳遞;如果是子程序嵌套時(shí),最好采用堆棧方式。,4.4.3 常用子程序示例,查表子程序,【例4-11】利用子程序?qū)崿F(xiàn) , 設(shè)a、b、c分別存于內(nèi)部RAM的30H、31H、32H三個(gè)單

11、元中。 子程序入口: (A)=預(yù)平方數(shù); 子程序出口: (A)=平方值;,子程序: SQR:MOV DPTR,#TAB MOVC A,A+DPTR RET TAB:DB 0,1,4,9,16,25,36,49,64,81,驗(yàn)證程序如下: MAIN:MOV 30H,#4 MOV 31H,#5 MOV A,30H ACALL SQR MOV R1,A MOV A,31H ACALL SQR ADD A,R1 MOV 32H,A SJMP $,4.4.3 常用子程序示例,延時(shí)子程序,【例4-15】編寫(xiě)1ms延時(shí)子程序 若晶振頻率為12MHz,則一個(gè)機(jī)器周期為1us,執(zhí)行一條DJNZ 指令為2us。實(shí)

12、現(xiàn)程序如下: D1ms:MOV R6,#249 ;循環(huán)外指令,1us DL:NOP ; 1us NOP ; 1us DJNZ R6,DL ; 2us,循環(huán)內(nèi)共(1+1+2)x249x1us=996us RET ; 循環(huán)外指令,2us。共996+1+2=999us,若延時(shí)時(shí)間要求更長(zhǎng)一點(diǎn),可以采用循環(huán)嵌套或子程序嵌套的方法實(shí)現(xiàn)。,2020/8/3,19,4.5 簡(jiǎn)單I/O設(shè)備的并口直接驅(qū)動(dòng)示例,4.5.1 獨(dú)立式鍵盤(pán)與LED顯示示例,【例4-17】數(shù)據(jù)端與P0口正序連接。編寫(xiě)程序,分別實(shí)現(xiàn)功能:上電后數(shù)碼管顯示“P”,按下任何鍵后,顯示從“0”開(kāi)始每隔1秒加1,加至“F”后,數(shù)碼管顯示“P”,進(jìn)

13、入等待按鍵狀態(tài)。,2020/8/3,20,2020/8/3,21,TEMP EQU 30H ORG 0000H JMP START ORG 0100H START:MOV SP,#5FH MOV P0,#8CH;顯示P MOV P3,#0FFH NOKEY:MOV A,P3;鍵盤(pán)掃描 CPL A JZ NOKEY ;無(wú)鍵按下 MOV TEMP,P3 ;有鍵按下 CALL D_10ms MOV A,P3 CJNE A,TEMP,NOKEY;去抖 MOV R7,#16;顯示字符個(gè)數(shù) MOV R2,#0;需顯示的數(shù),LOOP:MOV A,R2 MOV DPTR,#C_P0 MOVC A,A+DPTR MOV P0,A INC R2 SETB RS0 ;切換組 CALL D_1S CLR RS0 DJNZ R7,LOOP JMP START,D_1S:(子程序)D_10ms:(子程序),C_P0:DB 0C0H,0F9H,0A4H,0B0H DB 99H,92H,82H,0F8H DB 80H,90H,88H,83H, DB 0C6H,0A1H,86H,8EH,END,2020/8/3,22,4.5.2 矩陣式鍵盤(pán)與LED顯示示例,步驟:判有無(wú)鍵按下、判按下哪

溫馨提示

  • 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)論