單片機(jī)第4章80C51的匯編語(yǔ)言程序的設(shè)計(jì)ppt課件_第1頁(yè)
單片機(jī)第4章80C51的匯編語(yǔ)言程序的設(shè)計(jì)ppt課件_第2頁(yè)
單片機(jī)第4章80C51的匯編語(yǔ)言程序的設(shè)計(jì)ppt課件_第3頁(yè)
單片機(jī)第4章80C51的匯編語(yǔ)言程序的設(shè)計(jì)ppt課件_第4頁(yè)
單片機(jī)第4章80C51的匯編語(yǔ)言程序的設(shè)計(jì)ppt課件_第5頁(yè)
已閱讀5頁(yè),還剩35頁(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、第第4 4章章 80C51 80C51的匯編言語(yǔ)程序設(shè)計(jì)的匯編言語(yǔ)程序設(shè)計(jì)程序編制的方法和技巧程序編制的方法和技巧4.1源程序的編輯和匯編源程序的編輯和匯編4.2根本程序構(gòu)造根本程序構(gòu)造4.3子程序及其調(diào)用子程序及其調(diào)用4.4簡(jiǎn)單簡(jiǎn)單I/O設(shè)備的并口直接驅(qū)動(dòng)例如設(shè)備的并口直接驅(qū)動(dòng)例如4.5v 單片機(jī)運(yùn)用系統(tǒng)由硬件系統(tǒng)和運(yùn)用程序構(gòu)成單片機(jī)運(yùn)用系統(tǒng)由硬件系統(tǒng)和運(yùn)用程序構(gòu)成v 匯編言語(yǔ)匯編言語(yǔ)v 高級(jí)言語(yǔ)高級(jí)言語(yǔ)v 運(yùn)用程序設(shè)計(jì)方法運(yùn)用程序設(shè)計(jì)方法 匯編言語(yǔ),生成的目的程序占內(nèi)存空間少、匯編言語(yǔ),生成的目的程序占內(nèi)存空間少、運(yùn)轉(zhuǎn)速度快,具有效率高、實(shí)時(shí)性強(qiáng)。運(yùn)轉(zhuǎn)速度快,具有效率高、實(shí)時(shí)性強(qiáng)。 高級(jí)言

2、語(yǔ),對(duì)系統(tǒng)的功能描畫與實(shí)現(xiàn)簡(jiǎn)單,程序閱高級(jí)言語(yǔ),對(duì)系統(tǒng)的功能描畫與實(shí)現(xiàn)簡(jiǎn)單,程序閱讀、修正和移植方便,適宜于編寫復(fù)雜的程序。讀、修正和移植方便,適宜于編寫復(fù)雜的程序。 4.1 程序編制的方法和技巧程序編制的方法和技巧4.1.1 4.1.1 程序編制的步驟程序編制的步驟v 明確義務(wù):功能要求、技術(shù)目的明確義務(wù):功能要求、技術(shù)目的v 運(yùn)轉(zhuǎn)環(huán)境調(diào)研運(yùn)轉(zhuǎn)環(huán)境調(diào)研v 義務(wù)分析義務(wù)分析v 將實(shí)踐問題轉(zhuǎn)化為計(jì)算機(jī)處置的程序算法將實(shí)踐問題轉(zhuǎn)化為計(jì)算機(jī)處置的程序算法v 算法比較與優(yōu)化內(nèi)存需求與運(yùn)轉(zhuǎn)速度算法比較與優(yōu)化內(nèi)存需求與運(yùn)轉(zhuǎn)速度v 算法設(shè)計(jì)算法設(shè)計(jì)v 流程描畫流程描畫v 流程圖符號(hào)流程圖符號(hào)v “ “超級(jí)循

3、環(huán)框架超級(jí)循環(huán)框架v 強(qiáng)化模塊觀念強(qiáng)化模塊觀念v 使程序占用空間減少、構(gòu)造明晰使程序占用空間減少、構(gòu)造明晰v 循環(huán)初值和終了條件,防止循環(huán)初值和終了條件,防止“死機(jī)景象死機(jī)景象v 子程序的現(xiàn)場(chǎng)維護(hù)留意棧平衡、存放器內(nèi)容子程序的現(xiàn)場(chǎng)維護(hù)留意棧平衡、存放器內(nèi)容v 程序模塊主程序模塊、各種子程序模塊程序模塊主程序模塊、各種子程序模塊v 模塊化優(yōu)點(diǎn):分塊設(shè)計(jì)、便于閱讀、調(diào)試方便模塊化優(yōu)點(diǎn):分塊設(shè)計(jì)、便于閱讀、調(diào)試方便4.1.2 4.1.2 程序編制的方法和技巧程序編制的方法和技巧v 采用循環(huán)和子程序采用循環(huán)和子程序?qū)χ袛嘧映绦蜻€有留意維護(hù)對(duì)中斷子程序還有留意維護(hù)PSWPSW的內(nèi)容的內(nèi)容4.1.3 4.

4、1.3 匯編言語(yǔ)的語(yǔ)句格式匯編言語(yǔ)的語(yǔ)句格式v 非數(shù)字字符開頭,后跟字母、數(shù)字、非數(shù)字字符開頭,后跟字母、數(shù)字、“- -、“?等?等v 不能用已定義的保管字指令助記符、偽指令等不能用已定義的保管字指令助記符、偽指令等v 后跟英文冒號(hào)后跟英文冒號(hào)“: :KeilKeil的匯編器的匯編器A51A51可以識(shí)別的語(yǔ)句方式為:可以識(shí)別的語(yǔ)句方式為:v 標(biāo)號(hào)即符號(hào)地址標(biāo)號(hào)即符號(hào)地址標(biāo)號(hào): 指令助記符 操作數(shù)1, 操作數(shù)2, 操作數(shù)3, ;注釋v 指令助記符指令助記符是指令功能的英文縮寫。是指令功能的英文縮寫。v 數(shù)據(jù):二進(jìn)制數(shù)據(jù):二進(jìn)制B Bv 十進(jìn)制十進(jìn)制D D或省略或省略D Dv 十六進(jìn)制十六進(jìn)制H

5、H,留意,留意AFAF開頭時(shí)要加開頭時(shí)要加“0 0v ASCII ASCII碼,如碼,如 A A,12451245v 符號(hào):符號(hào)名、標(biāo)號(hào)或符號(hào):符號(hào)名、標(biāo)號(hào)或“$ $PCPC的當(dāng)前值的當(dāng)前值v 表達(dá)式:由運(yùn)算符和數(shù)據(jù)構(gòu)成見表表達(dá)式:由運(yùn)算符和數(shù)據(jù)構(gòu)成見表4.14.1v 操作數(shù)操作數(shù)v 注釋注釋英文分號(hào)英文分號(hào)“; ;開頭開頭優(yōu)先級(jí)運(yùn) 算 符功 能表達(dá)式及其結(jié)果示例高低()括號(hào)4*(5+6)即44NOT、HIGH、LOW取反、取高字節(jié)、取低字節(jié)NOT 55H 即AAH;HIGH 1234H 即12H、正號(hào)、負(fù)號(hào)5、6*、/、MOD乘、除(取商)、取余數(shù)17 / 5 即3; 17 MOD 5 即2

6、、加、減 54 即 9; 54 =即1SHL、SHR左移、右移2 SHL 2即8;8 SHR 2 即 2AND、OR、XOR與、或、異或45H AND 0FH即05H、=、=比較運(yùn)算符MOV A,X8;若X8為真,則為MOV A,01H若X8為假,則為MOV A,00H表表4.14.14.2 源程序的編輯和匯編源程序的編輯和匯編目的程序的產(chǎn)生過程如以下圖:目的程序的產(chǎn)生過程如以下圖:4.2.1 4.2.1 源程序的編輯和匯編源程序的編輯和匯編v 源程序的編輯源程序的編輯 ORG 0000H ORG 0000H LJMP MAIN LJMP MAIN ORG 0040H ORG 0040HMAI

7、N:MOV R7,#16 MAIN:MOV R7,#16 MOV R0,#60H MOV R0,#60H MOV A,#55H MOV A,#55HLOOP:MOV R0,ALOOP:MOV R0,A INC R0 INC R0 DJNZ R7,LOOP DJNZ R7,LOOP SJMP $ SJMP $ END ENDv 根據(jù)匯編言語(yǔ)規(guī)那根據(jù)匯編言語(yǔ)規(guī)那么么v 用好偽指令用好偽指令v 符號(hào)不用中文符號(hào)不用中文v SJMP $ SJMP $ 用于調(diào)試用于調(diào)試v 以以 .ASM .ASM存盤存盤v 源程序的匯編源程序的匯編v 匯編源程序轉(zhuǎn)為目的程序的過程叫匯編匯編源程序轉(zhuǎn)為目的程序的過程叫匯編

8、v 匯編通常在匯編通常在WindowsWindows下的集成開發(fā)環(huán)境完成下的集成開發(fā)環(huán)境完成v 用用A51.EXEA51.EXE匯編生成匯編生成.OBJ.OBJ、.LIB.LIB及及.LST.LSTv 目的程序的銜接目的程序的銜接v .OBJ.OBJ、.LIB.LIB經(jīng)經(jīng)BL51.EXEBL51.EXE生成無(wú)擴(kuò)展名的絕對(duì)地址目的文件生成無(wú)擴(kuò)展名的絕對(duì)地址目的文件v 絕對(duì)地址目的文件可以用于仿真器調(diào)試絕對(duì)地址目的文件可以用于仿真器調(diào)試v 調(diào)試無(wú)誤的目的文件用調(diào)試無(wú)誤的目的文件用OH51.EXEOH51.EXE轉(zhuǎn)換為轉(zhuǎn)換為.HEX.HEX文件文件v .HEX.HEX文件經(jīng)編程器寫入單片機(jī)存儲(chǔ)器文件

9、經(jīng)編程器寫入單片機(jī)存儲(chǔ)器4.2.2 4.2.2 偽指令偽指令v 偽指令,也叫匯編命令。僅對(duì)匯編過程進(jìn)展指示偽指令,也叫匯編命令。僅對(duì)匯編過程進(jìn)展指示v 偽指令無(wú)對(duì)應(yīng)的單片機(jī)可執(zhí)行代碼偽指令無(wú)對(duì)應(yīng)的單片機(jī)可執(zhí)行代碼v 起始地址設(shè)定偽指令起始地址設(shè)定偽指令ORGORGORG ORG 表達(dá)式表達(dá)式表達(dá)式通常為十六進(jìn)制地址,例:表達(dá)式通常為十六進(jìn)制地址,例: ORG 8000H ORG 8000HSTART:MOV A,#30HSTART:MOV A,#30H ORGORG可多次運(yùn)用,但地址值的順序要由小到大可多次運(yùn)用,但地址值的順序要由小到大v 終了匯編偽指令終了匯編偽指令ENDENDEND該偽指令

10、位于源程序的最后一行。該偽指令位于源程序的最后一行。v 定義字節(jié)數(shù)據(jù)表偽指令定義字節(jié)數(shù)據(jù)表偽指令DBDBv定義字?jǐn)?shù)據(jù)表偽指令定義字?jǐn)?shù)據(jù)表偽指令DWDW1000H 標(biāo)號(hào):標(biāo)號(hào): DB DB 字節(jié)數(shù)據(jù)表字節(jié)數(shù)據(jù)表如:如:ORG 1000HORG 1000HDB -2,-4,-6,8,10,18DB -2,-4,-6,8,10,18FEH FCHFAH08H0AH12H1001H 標(biāo)號(hào):標(biāo)號(hào): DW DW 字?jǐn)?shù)據(jù)表字?jǐn)?shù)據(jù)表 ORG 1400H ORG 1400HDATA1:DW 324AH,3CHDATA1:DW 324AH,3CH 1400H32H 4AH00H3CH1401H1402H1403H

11、大端方式v 定義常值為符號(hào)名偽指令定義常值為符號(hào)名偽指令EQUEQU符號(hào)名符號(hào)名 EQU EQU 常值表達(dá)式常值表達(dá)式 LEN EQU 10 SUM EQU 21HBLOCK EQU 22H CLR A MOV R7,LEN MOV R0,BLOCK LOOP:ADD A,R0 INC R0 DJNZ R7,LOOP MOV SUM,A 符號(hào)名為:符號(hào)名為:地址地址常數(shù)常數(shù)段名段名字符串字符串存放器名存放器名位名位名比較:標(biāo)號(hào)只能是地址比較:標(biāo)號(hào)只能是地址v 定義位地址為符號(hào)名偽指令定義位地址為符號(hào)名偽指令BITBIT符號(hào)名符號(hào)名 BIT BIT 位地址表達(dá)式位地址表達(dá)式如:如:ST BIT

12、P1.0 ;ST BIT P1.0 ;將將P1.0P1.0的位地址賦給符號(hào)名的位地址賦給符號(hào)名STSTCF BIT 0D7H ;CF BIT 0D7H ;將位地址為將位地址為D7HD7H的位定義為符號(hào)名的位定義為符號(hào)名用用BITBIT定義的定義的“符號(hào)名一經(jīng)定義便不能重新符號(hào)名一經(jīng)定義便不能重新定義和改動(dòng)定義和改動(dòng)其它一些偽指令參見教材表其它一些偽指令參見教材表4.2 4.2 4.3 根本程序構(gòu)造根本程序構(gòu)造v普通不影響標(biāo)志存放器普通不影響標(biāo)志存放器PSWPSW的形狀。的形狀。v 傳送類指令有兩大類傳送類指令有兩大類v 普通傳送普通傳送 MOV MOV v 特殊傳送,如:特殊傳送,如:v MO

13、VC MOVCv MOVX MOVXv PUSH PUSH、POPPOPv XCH XCH、XCHDXCHDv SWAP SWAP 4.3.1 4.3.1 順序程序順序程序無(wú)分支、無(wú)循環(huán)無(wú)分支、無(wú)循環(huán)4.3 根本程序構(gòu)造根本程序構(gòu)造【例【例4-14-1】片內(nèi)】片內(nèi)RAMRAM的的21H21H單單元存放一個(gè)十進(jìn)制數(shù)據(jù)十元存放一個(gè)十進(jìn)制數(shù)據(jù)十位的位的ASCIIASCII碼,碼,22H22H單元存單元存放該數(shù)據(jù)個(gè)位的放該數(shù)據(jù)個(gè)位的ASCIIASCII碼。碼。編寫程序?qū)⒃摂?shù)據(jù)轉(zhuǎn)換成編寫程序?qū)⒃摂?shù)據(jù)轉(zhuǎn)換成緊縮緊縮BCDBCD碼存放在碼存放在20H20H單元。單元。 ORG 0040H ORG 0040H

14、START:MOV A,21H ;START:MOV A,21H ;取十位取十位ASCIIASCII碼碼 ANL A,#0FH ; ANL A,#0FH ;保管低半字節(jié)保管低半字節(jié) SWAP A ; SWAP A ;移至高半字節(jié)移至高半字節(jié) MOV 20H,A ; MOV 20H,A ;存于存于20H20H單元單元 MOV A,22H ; MOV A,22H ;取個(gè)位取個(gè)位ASCIIASCII碼碼 ANL A,#0FH ; ANL A,#0FH ;保管低半字節(jié)保管低半字節(jié) ORL 20H,A ; ORL 20H,A ;合并到結(jié)果單元合并到結(jié)果單元 SJMP $ SJMP $ END END4.

15、3.2 4.3.2 分支程序分支程序單分支、雙分支、多分支單分支、雙分支、多分支【例【例4-24-2】設(shè)變量】設(shè)變量x x以補(bǔ)碼以補(bǔ)碼的方式存放在片內(nèi)的方式存放在片內(nèi)RAMRAM的的30H30H單元,變量單元,變量y y與與x x的關(guān)的關(guān)系是系是: :當(dāng)當(dāng)x x大于大于0 0時(shí)時(shí),y=x;,y=x;當(dāng)當(dāng)x=0 x=0時(shí)時(shí),y=20H;,y=20H;當(dāng)當(dāng)x x小于小于0 0時(shí)時(shí),y=x+5,y=x+5。編制程序。編制程序, ,根根據(jù)據(jù)x x的大小求的大小求y y并送回原單并送回原單元。元。 ORG 0040H ORG 0040HSTART:MOV A,30H ;START:MOV A,30H ;

16、取取x x至累加器至累加器 JZ NEXT ;x = 0, JZ NEXT ;x = 0,轉(zhuǎn)轉(zhuǎn)NEXTNEXT ANL A,#80H ; ANL A,#80H ;否,保管符號(hào)位否,保管符號(hào)位 JZ DONE ;x 0, JZ DONE ;x 0,轉(zhuǎn)終了轉(zhuǎn)終了 MOV A,#05H ;x 0 MOV A,#05H ;x 0處置處置 ADD A,30H ADD A,30H MOV 30H,A ;X+05H MOV 30H,A ;X+05H送送Y Y SJMP DONE SJMP DONE NEXT:MOV 30H,#20H ;x = 0,20H NEXT:MOV 30H,#20H ;x = 0,2

17、0H送送Y Y DONE:SJMP DONE DONE:SJMP DONE END END 【例【例4-34-3】根據(jù)】根據(jù)R7R7的內(nèi)容的內(nèi)容x x轉(zhuǎn)移序號(hào)轉(zhuǎn)向相應(yīng)的處置程序。轉(zhuǎn)移序號(hào)轉(zhuǎn)向相應(yīng)的處置程序。設(shè)設(shè)R7R7內(nèi)容為內(nèi)容為0 04 4,對(duì)應(yīng)的處置程序入口地址分別為,對(duì)應(yīng)的處置程序入口地址分別為PP0PP0PP4PP4。 START:MOV R7,#3 ; START:MOV R7,#3 ;以轉(zhuǎn)移序號(hào)以轉(zhuǎn)移序號(hào)3 3為例為例 ACALL JPNUM ACALL JPNUM AJMP START AJMP START JPNUM:MOV DPTR,#TAB ; JPNUM:MOV DPTR

18、,#TAB ;置分支入口地址表首址置分支入口地址表首址 MOV A,R7 MOV A,R7 ADD A,R7 ; ADD A,R7 ;乘乘2 2,調(diào)整偏移量,調(diào)整偏移量 MOV R3,A MOV R3,A MOVC A,A+DPTR ; MOVC A,A+DPTR ;取地址高字節(jié),暫存于取地址高字節(jié),暫存于R3R3 XCH A,R3 XCH A,R3 INC A INC A MOVC A,A+DPTR ; MOVC A,A+DPTR ;取地址低字節(jié)取地址低字節(jié) MOV DPL,A ; MOV DPL,A ;處置程序入口地址低處置程序入口地址低8 8位送位送DPLDPL MOV DPH,R3 ;

19、 MOV DPH,R3 ;處置程序入口地址高處置程序入口地址高8 8位送位送DPHDPH CLR A CLR A JMP A+DPTR JMP A+DPTR TAB:DW PP0 TAB:DW PP0 DW PP1 DW PP1 DW PP2 DW PP2 DW PP3 DW PP3 DW PP4 DW PP4 PP0:MOV 30H,#0 ; PP0:MOV 30H,#0 ;轉(zhuǎn)移序號(hào)為轉(zhuǎn)移序號(hào)為0 0時(shí)時(shí), ,置功能號(hào)置功能號(hào)“0“0于于30H30H單元單元 RET RET PP1:MOV 30H,#1 ; PP1:MOV 30H,#1 ;轉(zhuǎn)移序號(hào)為轉(zhuǎn)移序號(hào)為1 1時(shí)時(shí), ,置功能號(hào)置功能號(hào)

20、“1“1于于30H30H單元單元 RET RET PP2:MOV 30H,#2 ; PP2:MOV 30H,#2 ;轉(zhuǎn)移序號(hào)為轉(zhuǎn)移序號(hào)為2 2時(shí)時(shí), ,置功能號(hào)置功能號(hào)“2“2于于30H30H單元單元 RET RET PP3:MOV 30H,#3 ; PP3:MOV 30H,#3 ;轉(zhuǎn)移序號(hào)為轉(zhuǎn)移序號(hào)為3 3時(shí)時(shí), ,置功能號(hào)置功能號(hào)“3“3于于30H30H單元單元 RET RET PP4:MOV 30H,#4 ; PP4:MOV 30H,#4 ;轉(zhuǎn)移序號(hào)為轉(zhuǎn)移序號(hào)為4 4時(shí)時(shí), ,置功能號(hào)置功能號(hào)“4“4于于30H30H單元單元 RET RET 4.3.3 4.3.3 循環(huán)程序循環(huán)程序2種:

21、先執(zhí)行,后判別;先判別,后執(zhí)行種:先執(zhí)行,后判別;先判別,后執(zhí)行【例【例4-44-4】將內(nèi)部】將內(nèi)部RAMRAM的的30H30H至至3FH3FH單元初始化為單元初始化為00H00H。MAIN:MOV R0,#30H ;MAIN:MOV R0,#30H ;置初值置初值 MOV A,#00H ; MOV A,#00H ; MOV R7,#16 ; MOV R7,#16 ; LOOP:MOV R0,A ;LOOP:MOV R0,A ;循環(huán)處置循環(huán)處置 INC R0 ; INC R0 ; DJNZ R7,LOOP ; DJNZ R7,LOOP ;循環(huán)修正,判終了循環(huán)修正,判終了 SJMP $ ; SJ

22、MP $ ;終了處置終了處置【例【例4-54-5】將內(nèi)部】將內(nèi)部RAMRAM起始地址為起始地址為60H60H的數(shù)據(jù)串傳送到外部的數(shù)據(jù)串傳送到外部RAMRAM中中起始地址為起始地址為1000H1000H的存儲(chǔ)區(qū)域,直到發(fā)現(xiàn)的存儲(chǔ)區(qū)域,直到發(fā)現(xiàn)$ $ 字符停頓傳送。字符停頓傳送。 MAIN:MOV R0,#60H ; MAIN:MOV R0,#60H ;置初值置初值 MOV DPTR,#1000H MOV DPTR,#1000HLOOP0:MOV A,R0 ;LOOP0:MOV A,R0 ;取數(shù)據(jù)取數(shù)據(jù) CJNE A,#24H,LOOP1 ; CJNE A,#24H,LOOP1 ;循環(huán)終了?循環(huán)終

23、了? SJMP DONE ; SJMP DONE ;是是LOOP1:MOVX DPTR,A ;LOOP1:MOVX DPTR,A ;循環(huán)處置循環(huán)處置 INC R0 ; INC R0 ;循環(huán)修正循環(huán)修正 INC DPTR INC DPTR SJMP LOOP0 ; SJMP LOOP0 ;繼續(xù)循環(huán)繼續(xù)循環(huán) DONE:SJMP DONE ; DONE:SJMP DONE ;終了處置終了處置4.4 子程序及其調(diào)用子程序及其調(diào)用 完成通用功能、反復(fù)運(yùn)用的程序設(shè)計(jì)成子程序。使運(yùn)用完成通用功能、反復(fù)運(yùn)用的程序設(shè)計(jì)成子程序。使運(yùn)用程序構(gòu)造明晰緊湊,便于閱讀和調(diào)試程序構(gòu)造明晰緊湊,便于閱讀和調(diào)試 v 執(zhí)行要由

24、其它程序來(lái)調(diào)用,執(zhí)行完后要前往到調(diào)執(zhí)行要由其它程序來(lái)調(diào)用,執(zhí)行完后要前往到調(diào)用程序用程序 構(gòu)造上依然采用普通程序的構(gòu)造上依然采用普通程序的3 3種構(gòu)造種構(gòu)造 調(diào)用時(shí)留意:調(diào)用時(shí)留意:一是現(xiàn)場(chǎng)的維護(hù)和恢復(fù);一是現(xiàn)場(chǎng)的維護(hù)和恢復(fù);二是主程序與子程序間的參數(shù)傳送。二是主程序與子程序間的參數(shù)傳送。4.4.1 4.4.1 現(xiàn)場(chǎng)維護(hù)與恢復(fù)現(xiàn)場(chǎng)維護(hù)與恢復(fù)v在主程序中實(shí)現(xiàn)構(gòu)造靈敏在主程序中實(shí)現(xiàn)構(gòu)造靈敏 PUSH PSW ;PUSH PSW ;維護(hù)現(xiàn)場(chǎng)維護(hù)現(xiàn)場(chǎng) 含當(dāng)前任務(wù)存放器組號(hào)含當(dāng)前任務(wù)存放器組號(hào)PUSH ACC ;PUSH ACC ;PUSH B ;PUSH B ;MOV PSW,#10H ;MOV PS

25、W,#10H ;切換當(dāng)前任務(wù)存放器組切換當(dāng)前任務(wù)存放器組LCALL addr16 ;LCALL addr16 ;子程序調(diào)用,子程序調(diào)用, POP B ;POP B ;恢復(fù)現(xiàn)場(chǎng)恢復(fù)現(xiàn)場(chǎng)POP ACC ;POP ACC ;POP PSW ;POP PSW ;含當(dāng)前任務(wù)存放器組切換含當(dāng)前任務(wù)存放器組切換v在子程序中實(shí)現(xiàn)程序規(guī)范、明晰在子程序中實(shí)現(xiàn)程序規(guī)范、明晰SUB1:PUSH PSW ;SUB1:PUSH PSW ;維護(hù)現(xiàn)場(chǎng)維護(hù)現(xiàn)場(chǎng) 含當(dāng)前任務(wù)存放器組含當(dāng)前任務(wù)存放器組號(hào)號(hào) PUSH ACC ; PUSH ACC ; PUSH B ; PUSH B ; MOV PSW,#10H ; MOV PSW

26、,#10H ;切換當(dāng)前任務(wù)存放器組切換當(dāng)前任務(wù)存放器組 POP B ; POP B ;恢復(fù)現(xiàn)場(chǎng)恢復(fù)現(xiàn)場(chǎng) POP ACC ; POP ACC ; POP PSW ; POP PSW ;內(nèi)含當(dāng)前任務(wù)存放器組切換內(nèi)含當(dāng)前任務(wù)存放器組切換 RET RET4.4.2 4.4.2 參數(shù)傳送參數(shù)傳送v 利用累加器或存放器簡(jiǎn)單、快速,但參數(shù)個(gè)數(shù)不多利用累加器或存放器簡(jiǎn)單、快速,但參數(shù)個(gè)數(shù)不多【例4-6】實(shí)現(xiàn)兩個(gè)8位的十六進(jìn)制無(wú)符號(hào)數(shù)求和的子程序。SADD:MOV A,R3 ;SADD:MOV A,R3 ;取加數(shù)在取加數(shù)在R3R3中中 CLR C CLR C ADD A,R4 ; ADD A,R4 ;被加數(shù)在被

27、加數(shù)在R4R4中加中加A A JC PP1 JC PP1 MOV R3,#00H ; MOV R3,#00H ;結(jié)果小于結(jié)果小于255255時(shí),高字節(jié)時(shí),高字節(jié)R3R3內(nèi)容為內(nèi)容為00H00H SJMP PP2 SJMP PP2 PP1:MOV R3,#01H ; PP1:MOV R3,#01H ;結(jié)果大于結(jié)果大于255255時(shí),高字節(jié)時(shí),高字節(jié)R3R3內(nèi)容為內(nèi)容為01H01H PP2:MOV R4,A ; PP2:MOV R4,A ;結(jié)果的低字節(jié)在結(jié)果的低字節(jié)在R4R4中中 RET RET入口入口: :R3R3= =加數(shù);加數(shù); R4R4= =被加數(shù)。被加數(shù)。出口出口: :R3R3= =和的

28、高字節(jié);和的高字節(jié); R4R4= =和的低字節(jié)。和的低字節(jié)。v 利用存儲(chǔ)器個(gè)數(shù)多,用利用存儲(chǔ)器個(gè)數(shù)多,用R0R0或或R1R1及及DPTRDPTR為參數(shù)表指針為參數(shù)表指針【例【例4-74-7】將內(nèi)部】將內(nèi)部RAM RAM 中兩個(gè)中兩個(gè)4 4字節(jié)無(wú)符號(hào)整數(shù)相加,和的高字節(jié)無(wú)符號(hào)整數(shù)相加,和的高字節(jié)由字節(jié)由R0R0指向。數(shù)據(jù)采用大端方式存儲(chǔ)。指向。數(shù)據(jù)采用大端方式存儲(chǔ)。入口入口: :R0R0= =加數(shù)低字節(jié)地址;加數(shù)低字節(jié)地址; R1R1= =被加數(shù)低字節(jié)地址。被加數(shù)低字節(jié)地址。出口出口: :R0R0= =和的高字節(jié)起始地址。和的高字節(jié)起始地址。 NADD:MOV R7,#4 ; NADD:MOV

29、R7,#4 ;字節(jié)數(shù)字節(jié)數(shù)4 4送計(jì)數(shù)器送計(jì)數(shù)器 CLR C ; CLR C ;NADD1:MOV A,R0 ;NADD1:MOV A,R0 ;利用指針利用指針, ,取加數(shù)低字節(jié)取加數(shù)低字節(jié) ADDC A,R1 ; ADDC A,R1 ;利用指針利用指針, ,被加數(shù)低字節(jié)加被加數(shù)低字節(jié)加A A MOV R0,A ; MOV R0,A ; DEC R0 DEC R0 DEC R1 DEC R1 DJNZ R7,NADD1 DJNZ R7,NADD1 INC R0 ; INC R0 ;調(diào)整指針,指向出口調(diào)整指針,指向出口 RET RET v 利用堆棧利用堆棧 【例【例4-84-8】 將內(nèi)部將內(nèi)部R

30、AMRAM中中20H20H單元中的單元中的1 1個(gè)字節(jié)十六進(jìn)制數(shù)轉(zhuǎn)換為個(gè)字節(jié)十六進(jìn)制數(shù)轉(zhuǎn)換為2 2位位ASCIIASCII碼,存放在碼,存放在R0R0指示的兩個(gè)單元中。指示的兩個(gè)單元中。入口:預(yù)轉(zhuǎn)換數(shù)據(jù)低半字節(jié)在棧頂入口:預(yù)轉(zhuǎn)換數(shù)據(jù)低半字節(jié)在棧頂 出口:轉(zhuǎn)換結(jié)果出口:轉(zhuǎn)換結(jié)果ASCIIASCII碼在棧頂碼在棧頂 HEASC:MOV R1,SP ; HEASC:MOV R1,SP ;借用借用R1R1為堆棧指針為堆棧指針 DEC R1 DEC R1 DEC R1 ;R1 DEC R1 ;R1指向被轉(zhuǎn)換數(shù)據(jù)指向被轉(zhuǎn)換數(shù)據(jù) XCH A,R1 ; XCH A,R1 ;取被轉(zhuǎn)換數(shù)據(jù)取被轉(zhuǎn)換數(shù)據(jù) ANL A

31、,#0FH ; ANL A,#0FH ;取一位十六進(jìn)制數(shù)取一位十六進(jìn)制數(shù) ADD A,#2 ; ADD A,#2 ;偏移調(diào)整偏移調(diào)整, ,所加值為所加值為MOVCMOVC與與DBDB間間總字節(jié)數(shù)總字節(jié)數(shù) MOVC A,A+PC ; MOVC A,A+PC ;查表查表 XCH A,R1 ;1 XCH A,R1 ;1字節(jié)指令字節(jié)指令, ,存結(jié)果于堆棧中存結(jié)果于堆棧中 RET ;1 RET ;1字節(jié)指令字節(jié)指令A(yù)SCTAB:DB 30H,31H,32H,33H,34H,35H,36H,37HASCTAB:DB 30H,31H,32H,33H,34H,35H,36H,37H DB 38H,39H,41

32、H,42H,43H,44H,45H,46H DB 38H,39H,41H,42H,43H,44H,45H,46H驗(yàn)證程序段驗(yàn)證程序段 MAIN:MOV A,20H ;MAIN:MOV A,20H ; SWAP A SWAP A PUSH ACC ; PUSH ACC ;預(yù)轉(zhuǎn)換的數(shù)據(jù)在低半字節(jié)入棧預(yù)轉(zhuǎn)換的數(shù)據(jù)在低半字節(jié)入棧 ACALL HEASC ACALL HEASC POP ACC ; POP ACC ;彈出棧頂結(jié)果于彈出棧頂結(jié)果于ACCACC中中 MOV R0,A ; MOV R0,A ;存轉(zhuǎn)換結(jié)果高字節(jié)存轉(zhuǎn)換結(jié)果高字節(jié) INC R0 ; INC R0 ;修正指針修正指針 PUSH 20H

33、 ; PUSH 20H ;預(yù)轉(zhuǎn)換的數(shù)據(jù)在低半字節(jié)入棧預(yù)轉(zhuǎn)換的數(shù)據(jù)在低半字節(jié)入棧 ACALL HEASC ACALL HEASC POP ACC ; POP ACC ;彈出棧頂結(jié)果于彈出棧頂結(jié)果于ACCACC中中 MOV R0,A ; MOV R0,A ;存轉(zhuǎn)換結(jié)果低字節(jié)存轉(zhuǎn)換結(jié)果低字節(jié) SJMP $ SJMP $4.4.3 4.4.3 常用子程序例如略常用子程序例如略4.5 簡(jiǎn)單簡(jiǎn)單I/O設(shè)備的并口直接驅(qū)動(dòng)例如設(shè)備的并口直接驅(qū)動(dòng)例如4.5.1 4.5.1 獨(dú)立式鍵盤與獨(dú)立式鍵盤與LEDLED顯示例如顯示例如【例【例4-174-17】數(shù)據(jù)端與】數(shù)據(jù)端與P0P0口正序銜接。編寫程序,分別實(shí)現(xiàn)口正序

34、銜接。編寫程序,分別實(shí)現(xiàn)功能:上電后數(shù)碼管顯示功能:上電后數(shù)碼管顯示“P“P,按下任何鍵后,顯示從,按下任何鍵后,顯示從“0“0開場(chǎng)每隔開場(chǎng)每隔1 1秒加秒加1 1,加至,加至“F“F后,數(shù)碼管顯示后,數(shù)碼管顯示“P“P,進(jìn)入等待按鍵形狀。進(jìn)入等待按鍵形狀。 TEMP EQU 30H TEMP EQU 30HORG 0000HORG 0000HJMP STARTJMP START ORG 0100H ORG 0100HSTART:MOV SP,#5FHSTART:MOV SP,#5FH MOV P0,#8CH ; MOV P0,#8CH ;顯示顯示PPMOV P3,#0FFHMOV P3,#0

35、FFHNOKEY:MOV A,P3NOKEY:MOV A,P3CPL ACPL AJZ NOKEY ;JZ NOKEY ;無(wú)鍵按下無(wú)鍵按下MOV TEMP,P3 ;MOV TEMP,P3 ;有鍵按下有鍵按下CALL D10msCALL D10msMOV A,P3MOV A,P3CJNE A,TEMP,NOKEY;CJNE A,TEMP,NOKEY;去抖去抖MOV R7,#16MOV R7,#16MOV R2,#0MOV R2,#0LOOP:MOV A,R2LOOP:MOV A,R2 MOV DPTR,#CODE_P0 MOV DPTR,#CODE_P0 MOVC A,A+DPTR MOVC A

36、,A+DPTR MOV P0,A MOV P0,A INC R2 INC R2 SETB RS0 ; SETB RS0 ;切換組切換組 CALL D_1S CALL D_1S CLR RS0 CLR RS0 DJNZ R7,LOOP DJNZ R7,LOOP JMP START JMP START D_1S D_1S:子程序:子程序D10msD10ms:子程序:子程序 CODE_P0:DB 0C0H,0F9H,0A4H,0B0HCODE_P0:DB 0C0H,0F9H,0A4H,0B0H DB 99H,92H,82H,0F8H DB 99H,92H,82H,0F8H DB 80H,90H,88H,83H, DB 80H,90H,88H,83H, DB 0C6H,0A1H,86H,8EH DB 0C6H,0A1H,86H,8EH 有時(shí)為方便走線而采用逆序銜接,顯示段碼要進(jìn)展調(diào)整:有時(shí)為方便走線而采用逆序銜接,顯示段碼要進(jìn)展調(diào)整:CODE_P2:DB 03H,9FH,25H,0DH,9

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論