C的匯編語(yǔ)言程序設(shè)計(jì)_第1頁(yè)
C的匯編語(yǔ)言程序設(shè)計(jì)_第2頁(yè)
C的匯編語(yǔ)言程序設(shè)計(jì)_第3頁(yè)
C的匯編語(yǔ)言程序設(shè)計(jì)_第4頁(yè)
C的匯編語(yǔ)言程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩53頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、2022-3-231第第4 4章章 80C5180C51的匯編語(yǔ)言程序設(shè)計(jì)的匯編語(yǔ)言程序設(shè)計(jì)程序編制的程序編制的方法方法和和技巧技巧4.1源程序的源程序的編輯編輯和和匯編匯編4.2基本基本程序結(jié)構(gòu)程序結(jié)構(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.52022-3-232v 單片機(jī)應(yīng)用系統(tǒng)由單片機(jī)應(yīng)用系統(tǒng)由硬件系統(tǒng)硬件系統(tǒng)和和應(yīng)用程序應(yīng)用程序構(gòu)成構(gòu)成v 匯編語(yǔ)言匯編語(yǔ)言v 高級(jí)語(yǔ)言高級(jí)語(yǔ)言v 應(yīng)用程序設(shè)計(jì)方法應(yīng)用程序設(shè)計(jì)方法 匯編語(yǔ)言匯編語(yǔ)言,生成的目標(biāo)程序占內(nèi)存空間少、運(yùn)行速,生成的目標(biāo)程序占內(nèi)存空間少、運(yùn)行速度快,具有效率高、實(shí)時(shí)性強(qiáng)

2、。度快,具有效率高、實(shí)時(shí)性強(qiáng)。 高級(jí)語(yǔ)言高級(jí)語(yǔ)言,對(duì)系統(tǒng)的功能描述與實(shí)現(xiàn)簡(jiǎn)單,程序閱,對(duì)系統(tǒng)的功能描述與實(shí)現(xiàn)簡(jiǎn)單,程序閱讀、修改和移植方便,適合于編寫(xiě)復(fù)雜的程序。讀、修改和移植方便,適合于編寫(xiě)復(fù)雜的程序。 2022-3-2334.1 程序編制的方法和技巧程序編制的方法和技巧程序編制的步驟程序編制的步驟v 明確任務(wù):功能要求、技術(shù)指標(biāo)明確任務(wù):功能要求、技術(shù)指標(biāo)v 運(yùn)行環(huán)境調(diào)研運(yùn)行環(huán)境調(diào)研v 任務(wù)分析任務(wù)分析v 將實(shí)際問(wèn)題轉(zhuǎn)化為計(jì)算機(jī)處理的程序算法將實(shí)際問(wèn)題轉(zhuǎn)化為計(jì)算機(jī)處理的程序算法v 算法比較與優(yōu)化(內(nèi)存需求算法比較與優(yōu)化(內(nèi)存需求與與運(yùn)行速度)運(yùn)行速度)v 算法設(shè)計(jì)算法設(shè)計(jì)2022-3-23

3、4v 流程描述流程描述v 流程圖符號(hào)流程圖符號(hào)v “超級(jí)循環(huán)超級(jí)循環(huán)”框架框架2022-3-235v 強(qiáng)化模塊觀(guān)念強(qiáng)化模塊觀(guān)念v 使程序占用空間減少、結(jié)構(gòu)清晰使程序占用空間減少、結(jié)構(gòu)清晰v 循環(huán)初值和結(jié)束條件,避免循環(huán)初值和結(jié)束條件,避免“死機(jī)死機(jī)”現(xiàn)象現(xiàn)象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)試方便程序編制的方法和技巧程序編制的方法和技巧v 采用循環(huán)和子程序采用循環(huán)和子程序?qū)χ袛嘧映绦蜻€

4、有注意保護(hù)對(duì)中斷子程序還有注意保護(hù)PSWPSW的內(nèi)容的內(nèi)容2022-3-236匯編語(yǔ)言的語(yǔ)句格式匯編語(yǔ)言的語(yǔ)句格式v 非數(shù)字字符開(kāi)頭,后跟字母、數(shù)字、非數(shù)字字符開(kāi)頭,后跟字母、數(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 指令助記符指令助記符是指令功能的英文縮寫(xiě)。是指令功能的英文縮寫(xiě)

5、。2022-3-237v 數(shù)據(jù):二進(jìn)制(數(shù)據(jù):二進(jìn)制(B B) 十進(jìn)制(十進(jìn)制(D D或省略或省略D D) 十六進(jìn)制(十六進(jìn)制(H H),注意),注意A AFF開(kāi)頭時(shí)要加開(kāi)頭時(shí)要加“ “0 0” ” 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)成(見(jiàn)表表達(dá)式:由運(yùn)算符和數(shù)據(jù)構(gòu)成(見(jiàn)表4.14.1)v 操作數(shù)操作數(shù)v 注釋注釋英文分號(hào)英文分號(hào)“; ;”開(kāi)頭開(kāi)頭2022-3-238優(yōu)先級(jí)運(yùn) 算 符功 能表達(dá)式及其結(jié)果示例高低()括號(hào)4*(5+6)即44NOT、HIGH、L

6、OW取反、取高字節(jié)、取低字節(jié)NOT 55H 即AAH;HIGH 1234H 即12H、正號(hào)、負(fù)號(hào)5、6*、/、MOD乘、除(取商)、取余數(shù)17 / 5 即3; 17 MOD 5 即2、加、減 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.1 A514.1 A51匯編器的運(yùn)算符及其優(yōu)先級(jí)匯編器的運(yùn)算符及其優(yōu)先級(jí)2022-3-2394.2 源程序的編輯和匯編源程序的編輯和匯編目標(biāo)

7、程序的產(chǎn)生過(guò)程如下圖:目標(biāo)程序的產(chǎn)生過(guò)程如下圖:2022-3-2310源程序的編輯和匯編源程序的編輯和匯編v 源程序的編輯源程序的編輯 ORG ORG 0000H LJMP MAIN ORG ORG 0040HMAIN:MOV R7,#16 MOV R0,#60H MOV A,#55HLOOP:MOV R0,A INC R0 DJNZ R7,LOOP SJMP $ ENDENDv 依據(jù)匯編語(yǔ)言規(guī)則依據(jù)匯編語(yǔ)言規(guī)則v 用好用好偽指令偽指令v 符號(hào)符號(hào)不用中文不用中文v SJMP $SJMP $ 用于調(diào)試用于調(diào)試v 以以 .ASM.ASM存盤(pán)存盤(pán)2022-3-2311v 源程序的匯編源程序的匯編v

8、 匯編源程序轉(zhuǎn)為目標(biāo)程序的過(guò)程叫匯編源程序轉(zhuǎn)為目標(biāo)程序的過(guò)程叫匯編匯編v 匯編通常在匯編通常在WindowsWindows下的下的集成開(kāi)發(fā)環(huán)境集成開(kāi)發(fā)環(huán)境完成完成v 用用A51.EXEA51.EXE匯編生成匯編生成.OBJ.OBJ、.LIB.LIB及及.LST.LSTv 目標(biāo)程序的連接目標(biāo)程序的連接v .OBJ.OBJ、.LIB.LIB經(jīng)經(jīng)BL51.EXEBL51.EXE生成無(wú)擴(kuò)展名的生成無(wú)擴(kuò)展名的絕對(duì)地址目標(biāo)文件絕對(duì)地址目標(biāo)文件v 絕對(duì)地址目標(biāo)文件絕對(duì)地址目標(biāo)文件可以用于仿真器可以用于仿真器dScope51dScope51調(diào)試調(diào)試v 調(diào)試無(wú)誤的目標(biāo)文件用調(diào)試無(wú)誤的目標(biāo)文件用OH51.EXEO

9、H51.EXE轉(zhuǎn)換為轉(zhuǎn)換為.HEX.HEX文件文件v .HEX.HEX文件經(jīng)文件經(jīng)編程器編程器寫(xiě)入單片機(jī)存儲(chǔ)器寫(xiě)入單片機(jī)存儲(chǔ)器2022-3-2312偽指令偽指令v 偽指令,也叫匯編命令。僅對(duì)匯編過(guò)程進(jìn)行指示偽指令,也叫匯編命令。僅對(duì)匯編過(guò)程進(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 8000HSTART:MOV A,#30H ORGORG可多次使用,但地址值的順序要由小到大可多次使用,但地址值的順序要由小到大v 結(jié)束匯

10、編偽指令結(jié)束匯編偽指令ENDENDEND該偽指令位于源程序的該偽指令位于源程序的最后一行最后一行。2022-3-2313v 定義字節(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 32DATA1:DW 324A4AH,3CHH,3CH

11、 1400H32H 4AH00H3CH1401H1402H1403H大端模式2022-3-2314v 定義常值為符號(hào)名偽指令定義常值為符號(hào)名偽指令EQUEQU符號(hào)名符號(hào)名 EQU EQU 常值表達(dá)式常值表達(dá)式 LENLEN EQUEQU 10 10 SUMSUM EQUEQU 21H 21HBLOCKBLOCK EQU EQU 22H 22H CLR A CLR A MOV R7, MOV R7,LENLEN MOV R0, MOV R0,BLOCKBLOCK LOOP:ADD A,R0 LOOP:ADD A,R0 INC R0 INC R0 DJNZ R7,LOOP DJNZ R7,LOOP

12、 MOV MOV SUMSUM,A ,A 符號(hào)名為:符號(hào)名為:v地址地址v常數(shù)常數(shù)v段名段名v字符串字符串v寄存器名寄存器名v位名位名比較:比較:標(biāo)號(hào)標(biāo)號(hào)只能是地址只能是地址注意:用注意:用EQUEQU定義的定義的“符號(hào)名符號(hào)名”一經(jīng)定義便不能重新定義和改變。一經(jīng)定義便不能重新定義和改變。2022-3-2315v 定義位地址為符號(hào)名偽指令定義位地址為符號(hào)名偽指令BITBIT符號(hào)名符號(hào)名 BIT BIT 位地址表達(dá)式位地址表達(dá)式如:如:ST BIT P1.0 ;ST BIT P1.0 ;將將P1.0P1.0的位地址賦給符號(hào)名的位地址賦給符號(hào)名STSTCF BIT 0D7H ;CF BIT 0D7

13、H ;將位地址為將位地址為D7HD7H的位定義為符號(hào)名的位定義為符號(hào)名v用用BITBIT定義的定義的“符號(hào)名符號(hào)名”一經(jīng)定義便不能重新定義和改變一經(jīng)定義便不能重新定義和改變v其它一些偽指令參見(jiàn)教材表其它一些偽指令參見(jiàn)教材表4.2 4.2 2022-3-2316順序程序順序程序(無(wú)分支、無(wú)循環(huán))(無(wú)分支、無(wú)循環(huán))4.3 基本程序結(jié)構(gòu)基本程序結(jié)構(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碼。編寫(xiě)程序?qū)⒃摂?shù)據(jù)轉(zhuǎn)換成壓碼。編寫(xiě)程序?qū)⒃?/p>

14、數(shù)據(jù)轉(zhuǎn)換成壓縮縮BCDBCD碼存放在碼存放在20H20H單元。單元。2022-3-2317 ORG 0040H ORG 0040HSTART: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é)保留低

15、半字節(jié) ORL 20H,A ; ORL 20H,A ;合并到結(jié)果單元合并到結(jié)果單元 SJMP $ SJMP $ END END2022-3-2318分支程序分支程序(單分支、雙分支、多分支)(單分支、雙分支、多分支)【例例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并送

16、回原單元。并送回原單元。2022-3-2319 ORG 0040HORG 0040HSTART:MOV A,30H ;START:MOV A,30H ;取取x x至累加器至累加器 JZ NEXTJZ NEXT ;x = 0 ;x = 0 ,轉(zhuǎn),轉(zhuǎn)NEXTNEXT ANL A,#80H ; ANL A,#80H ;否,保留符號(hào)位否,保留符號(hào)位 JZ DONEJZ DONE ;x 0 ;x 0 ,轉(zhuǎn)結(jié)束,轉(zhuǎn)結(jié)束 MOV A,#05H ;x 0 MOV A,#05H ;x 0 ,處理,處理Y=X+5Y=X+5 ADD A,30H ADD A,30H MOV 30H,A ;X+05H MOV 30H,

17、A ;X+05H送送Y Y SJMP DONE SJMP DONE NEXT:MOV 30H,#20H ;x = 0 NEXT:MOV 30H,#20H ;x = 0 ,20H20H送送Y Y DONE:SJMP DONE DONE:SJMP DONE END END 2022-3-2320【例例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。 2022-3-2321 START:MOV R7,#3 ; STA

18、RT:MOV R7,#3 ;以轉(zhuǎn)移序號(hào)以轉(zhuǎn)移序號(hào)3 3為例為例 ACALL JPNUMACALL JPNUM AJMP START AJMP START JPNUM:MOV DPTR,#TAB ; JPNUM:MOV DPTR,#TAB ;置分支入口地址表首址置分支入口地址表首址 MOV A,R7MOV A,R7 ADD A,R7ADD 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

19、MOVC A,A+DPTR ; MOVC A,A+DPTR ;取地址低字節(jié)取地址低字節(jié) MOV DPL,A ;MOV DPL,A ;處理程序入口地址低處理程序入口地址低8 8位送位送DPLDPL MOV DPH,R3 ; MOV DPH,R3 ;處理程序入口地址高處理程序入口地址高8 8位送位送DPHDPH CLR A CLR A JMP A+DPTRJMP A+DPTR 2022-3-2322 TAB:DW PP0 TAB:DW PP0 DW PP1 DW PP1 DW PP2 DW PP2 DW PP3DW PP3 DW PP4 DW PP4 PP0:MOV 30H,#0 ; PP0:MO

20、V 30H,#0 ;轉(zhuǎn)移序號(hào)為轉(zhuǎn)移序號(hào)為0 0時(shí)時(shí), ,置功能號(hào)置功能號(hào)“0 0”于于30H30H單元單元 RETRET PP1:MOV 30H,#1 ; PP1:MOV 30H,#1 ;轉(zhuǎn)移序號(hào)為轉(zhuǎn)移序號(hào)為1 1時(shí)時(shí), ,置功能號(hào)置功能號(hào)“1 1”于于30H30H單元單元 RETRET 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單元單元 RETRET PP3:MOV 30H,#3PP3:MOV 30H,#3 ; ;轉(zhuǎn)移序號(hào)為轉(zhuǎn)移序號(hào)為3 3時(shí)時(shí), ,置功能號(hào)置功能號(hào)“3 3”于于30H30H

21、單元單元 RETRET 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單元單元 RETRET2022-3-2323循環(huán)程序循環(huán)程序(2種:先執(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,#1

22、6 ; LOOP:MOV R0,A ;LOOP:MOV R0,A ;循環(huán)處理循環(huán)處理 INC R0 ;INC R0 ; DJNZ R7,LOOP ; DJNZ R7,LOOP ;循環(huán)修改,判結(jié)束循環(huán)修改,判結(jié)束 SJMP $ ;SJMP $ ;結(jié)束處理結(jié)束處理2022-3-2324【例例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 ;置

23、初值置初值 MOV DPTR,#1000HMOV DPTR,#1000HLOOP0:MOV A,R0 ;LOOP0:MOV A,R0 ;取數(shù)據(jù)取數(shù)據(jù) CJNE A,#24H,LOOP1 ; CJNE A,#24H,LOOP1 ;循環(huán)結(jié)束?循環(huán)結(jié)束? 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

24、 DONE ;結(jié)束處理結(jié)束處理2022-3-23254.4 子程序及其調(diào)用子程序及其調(diào)用 完成完成通用功能通用功能、反復(fù)使用反復(fù)使用的程序設(shè)計(jì)成的程序設(shè)計(jì)成子程序。子程序。使應(yīng)用使應(yīng)用程序結(jié)構(gòu)清晰緊湊,便于閱讀和調(diào)試。程序結(jié)構(gòu)清晰緊湊,便于閱讀和調(diào)試。 v 執(zhí)行要由其它程序來(lái)調(diào)用,執(zhí)行完后要返回到調(diào)用程序執(zhí)行要由其它程序來(lái)調(diào)用,執(zhí)行完后要返回到調(diào)用程序 v 結(jié)構(gòu)上仍然采用一般程序的結(jié)構(gòu)上仍然采用一般程序的3 3種結(jié)構(gòu)種結(jié)構(gòu) v調(diào)用時(shí)注意:調(diào)用時(shí)注意:一是現(xiàn)場(chǎng)的保護(hù)和恢復(fù);一是現(xiàn)場(chǎng)的保護(hù)和恢復(fù);二是主程序與子程序間的參數(shù)傳遞。二是主程序與子程序間的參數(shù)傳遞。2022-3-2326現(xiàn)場(chǎng)保護(hù)與恢復(fù)現(xiàn)

25、場(chǎng)保護(hù)與恢復(fù)v在主程序中實(shí)現(xiàn)(在主程序中實(shí)現(xiàn)(結(jié)構(gòu)靈活結(jié)構(gòu)靈活) PUSH PSW ;PUSH PSW ;保護(hù)現(xiàn)場(chǎng)(保護(hù)現(xiàn)場(chǎng)( 含當(dāng)前工作寄存器組號(hào))含當(dāng)前工作寄存器組號(hào))PUSH ACC ;PUSH ACC ;PUSH B ;PUSH B ;MOV PSW,#10H ;MOV PSW,#10H ;切換當(dāng)前工作寄存器組切換當(dāng)前工作寄存器組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)前工作寄存器組切換含當(dāng)前工作寄存器組切換2022-3-23

26、27v在子程序中實(shí)現(xiàn)(在子程序中實(shí)現(xiàn)(程序規(guī)范、清晰程序規(guī)范、清晰)SUB1:PUSH PSW ;SUB1:PUSH PSW ;保護(hù)現(xiàn)場(chǎng)(保護(hù)現(xiàn)場(chǎng)( 含當(dāng)前工作寄存器組號(hào))含當(dāng)前工作寄存器組號(hào)) PUSH ACC ;PUSH ACC ; PUSH B ; PUSH B ; MOV PSW,#10H ; MOV PSW,#10H ;切換當(dāng)前工作寄存器組切換當(dāng)前工作寄存器組 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)前工作寄存器組切換內(nèi)含當(dāng)前工作寄存器組切換 RETRET2022-3-2328參數(shù)傳遞參數(shù)傳遞v

27、 利用累加器或寄存器(利用累加器或寄存器(簡(jiǎn)單、快速,但參數(shù)個(gè)數(shù)不多簡(jiǎn)單、快速,但參數(shù)個(gè)數(shù)不多)【例例4-64-6】實(shí)現(xiàn)兩個(gè)實(shí)現(xiàn)兩個(gè)8 8位的十六進(jìn)制無(wú)符號(hào)數(shù)求和的子程序。位的十六進(jìn)制無(wú)符號(hào)數(shù)求和的子程序。SADD:MOV A,R3 ;SADD:MOV A,R3 ;取加數(shù)(在取加數(shù)(在R3R3中)中) CLR CCLR C ADD A,R4 ; ADD A,R4 ;被加數(shù)(在被加數(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 S

28、JMP 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中中 RETRET入口入口: :(R3R3)= =加數(shù);加數(shù); (R4R4)= =被加數(shù)。被加數(shù)。出口出口: :(R3R3)= =和的高字節(jié);和的高字節(jié); (R4R4)= =和的低字節(jié)。和的低字節(jié)。2022-3-2329v 利用存儲(chǔ)器(利用存儲(chǔ)器(個(gè)數(shù)多,用個(gè)數(shù)多,用R0R0或或R1R1及及DPTRDPTR為參數(shù)表指針為參數(shù)表指針)【例

29、例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 R7,#4 ;字節(jié)數(shù)字節(jié)數(shù)4 4送計(jì)數(shù)器送計(jì)數(shù)器 CLR C ;CLR C ;NADD1:MOV A,R0 ;NADD1:MOV A,R0 ;利用指針利用指針, ,

30、取加數(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 2022-3-2330v 利用堆棧利用堆棧 【例例4-84-8】 將內(nèi)部將內(nèi)部RAMRAM中中20H20H單元中的單元中的1 1個(gè)字節(jié)十六進(jìn)制數(shù)轉(zhuǎn)換為個(gè)字節(jié)十六進(jìn)制數(shù)轉(zhuǎn)換為2 2位位ASCIIASCII碼,存放在碼,存放在R0R

31、0指示的兩個(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 R1DEC 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,#0FH ;ANL A,#0FH ;取一位十六進(jìn)制數(shù)取一位十六進(jìn)制數(shù) ADD A,#2 ;ADD A,#2 ;偏移調(diào)整偏移調(diào)整, ,所

32、加值為所加值為MOVCMOVC與與DBDB間總字節(jié)數(shù)間總字節(jié)數(shù) MOVC A,A+PC ;MOVC A,A+PC ;查表查表 XCH A,R1 ;1XCH A,R1 ;1字節(jié)指令字節(jié)指令, ,存結(jié)果于堆棧中存結(jié)果于堆棧中 RET ;1RET ;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,41H,42H,43H,44H,45H,46H DB 38H,39H,41H,42H,43H,44H,45H,46H2022-3-2331v驗(yàn)證程序段

33、驗(yàn)證程序段 MAIN:MOV A,20H ;MAIN:MOV A,20H ;取被轉(zhuǎn)換數(shù)至取被轉(zhuǎn)換數(shù)至A A SWAP A SWAP A PUSH ACC ; PUSH ACC ;預(yù)轉(zhuǎn)換的數(shù)據(jù)(在低半字節(jié))入棧預(yù)轉(zhuǎn)換的數(shù)據(jù)(在低半字節(jié))入棧 ACALL HEASCACALL 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 ;PUSH 20H ;預(yù)轉(zhuǎn)換的數(shù)據(jù)(在低半字節(jié))入棧預(yù)轉(zhuǎn)換的數(shù)據(jù)(在低半字節(jié))入棧 AC

34、ALL HEASCACALL 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-9 已知BLOCK1和BLOCK2為起始地址的存儲(chǔ)區(qū)中分別有5字節(jié)無(wú)符號(hào)被減數(shù)和減數(shù)(低位在前,高位在后)。請(qǐng)編制一個(gè)減法子程序,令它們相減,并把差值放入BLOCK1為起始地址的存儲(chǔ)單元。解:用減法指令從低字節(jié)開(kāi)始相減。相應(yīng)程序?yàn)椋?ORG 1000HSBYTESUB: MOV R0,#BLOCK1 ;被減數(shù)始址送R0 MOV R1,#BL

35、OCK2 ;減數(shù)始址送R1 MOV R2,#05H ;字節(jié)長(zhǎng)送R2 CLR C ;Cy清零 LOOP: MOV A,R0 ;被減數(shù)送A SUBB A,R1 ;相減 MOV R0,A ;存差 INC R0 ;修改被減數(shù)地址指針 INC R1 ;修改減數(shù)地址指針 DJNZ R2,LOOP ;若未完,則LOOP RET END例4-10 多字節(jié)十進(jìn)制BCD碼減法子程序如下: 入口:被減數(shù)低字節(jié)地址在R1,減數(shù)低字節(jié)地址在R0,字節(jié)數(shù)在R2。 出口:差(補(bǔ)碼)的低字節(jié)地址在R0,字節(jié)數(shù)在R3。程序?yàn)椋?ORG 1000H SBCD: MOV R3,#00H ;差字節(jié)數(shù)置0 CLR 07H ;符號(hào)位清0

36、 CLR C ;借位位清0 SBCD1: MOV A,#9AH ;減數(shù)對(duì)100 求補(bǔ)碼 SUBB A,R0 ADD A,R1 ;補(bǔ)碼相加 DA A ;十進(jìn)制相加調(diào)整 MOV R0,A ;存結(jié)果 INC R0 ;地址值增加1 INC R1 INC R3 ;差字節(jié)增加1 CPL C ;進(jìn)位位求反,以形成正確的借位 DJNZ R2,SBCD1 ;未減完,轉(zhuǎn)SBCD1,繼續(xù) JNC SBCD2 ;無(wú)借位,轉(zhuǎn)SBCD2 SETB 07H ;有借位,置“1”符號(hào)位 SBCD2: RET ;返回主程序例4.13 16位無(wú)符號(hào)數(shù)乘法程序。已知BLOCK1和BLOCK2開(kāi)始的存儲(chǔ)單元內(nèi)存放有16位乘數(shù)和被乘數(shù)(

37、低字節(jié)在前,高字節(jié)在后)。試編程求積并把積放入BLOCK3開(kāi)始的連續(xù)四個(gè)存儲(chǔ)單元(低字節(jié)在前,高字節(jié)在后)。 解:MCS-51乘法指令只能完成兩個(gè)8位無(wú)符號(hào)數(shù)相乘,因此16位無(wú)符號(hào)數(shù)求積必須將它們分解成四個(gè)8位數(shù)相乘來(lái)實(shí)現(xiàn)。其方法有先乘后加和邊乘邊加兩種,現(xiàn)以邊乘邊加進(jìn)行分析。邊乘邊加的乘法原理和過(guò)程如圖4-8所示。圖中:ab為16位被乘數(shù)(a為高8位,b為低8位)、cd為16位乘數(shù)(c為高8位,d為低8位)。第一次乘法完成bd,其積為bdH和bdL(bdH為高8位,bdL為低8位);第二次乘法完成ad,其積為adH和adL(adH為高8位,adL為低8位);同理可以得到的三次和第四次乘積bc

38、HbcL和acHacL,其中bcH和acH分別為高8位。abcd的積共為4字節(jié),分別存放在R0為起始地址的連續(xù)4個(gè)內(nèi)存單元。相應(yīng)參考程序?yàn)椋?a b c d bdH bdL +) adH adL R2 R3 R0 +) bcH bcL R1 R2 R0+1 +) acH acL R0+3 R0+2 圖4-8 邊乘邊加16位乘法法則示意圖 (1)主程序 ORG 1000H MOV R4,BLOCK1 MOV R5,BLOCK1+1 ;乘數(shù)送R5R4 MOV R6,BLOCK2 MOV R7,BLOCK2+1 ;被乘數(shù)送R7R6 MOV R0,#BLOCK3 ;R0指向積單元始址 ACALL ML

39、TY ;轉(zhuǎn)入乘法子程序 (2)乘法子程序 ;入口參數(shù):R7R6存放被乘數(shù) ;R5R4存放乘數(shù),R0存放積單元起始地址 MLTY: MOV A,R6 MOV B,R4 MUL AB ;bd = BA MOV R0,A ;bdL送(R0) MOV R3,B ;bdH送R3 MOV A,R7 MOV B,R4 MUL AB ;ad = BA ADD A,R3 ;加法形成Cy MOV R3,A ;bdH+adL送R3 MOV A,B ADDC A,#00H MOV R2,A ;adH+Cy送R2 MOV A,R6 MOV B,R5 MUL AB ;bc = BA ADD A,R3 INC R0 MOV

40、 R0,A ;R3+bcL送(R0+1) MOV A,R2 ADDC A,B ;加法,并形成Cy MOV R2,A ;R2+bcH+Cy送R2 MOV R1,#00H JNC NXET ;若Cy = 0,則NEXT INC R1 ;若Cy 1,則存R1NEXT: MOV A,R7 MOV B,R5 MUL AB ;ac = B ADD A, R2 INC R0 MOV R0,A ;R2+acL送(R0+2) MOV A,B ADDC A, R1 INC R0 MOV R0,A ;R1+acH+Cy送(R0+3) RET ;返回主程序 ENDv 例4-11 設(shè)a、b、c分別存于內(nèi)部RAM的30H

41、、31H、32H,請(qǐng)編制出求c = a2+b2,設(shè)a和b皆為小于10的整數(shù)。解:主程序通過(guò)累加器A傳送子程序的入口參數(shù)a或b,子程序也通過(guò)累加器A傳送出口參數(shù)a2或b2給主程序,子程序?yàn)榍笠粋€(gè)數(shù)的平方的通用子程序。相應(yīng)程序如下: ORG 1000H MOV A,30H ;入口參數(shù)a送A ACALL SQR ;求a2 MOV R1,A ; a2送R1 MOV A,31H ;入口參數(shù)b送A ACALL SQR ;求b2 ADD A,R1 ; a2 b2送A MOV 32H,A ;存入MDC SJMP $ ;結(jié)束 SQR: ADD A,#01H ;地址調(diào)整 MOVC A,A+PC ;查平方表 RET

42、 ;返回 SQRTAB: DB 0,1,4,9,16 DB 25,36,49,64,81 END 例4-12從ASCII編碼表可知,若4位二進(jìn)制數(shù)小于10,則此二進(jìn)制數(shù)加上30H即變?yōu)橄鄳?yīng)的ASCII碼,若大于10,則應(yīng)加上37H方可。由于該過(guò)程比較簡(jiǎn)單,所以下面直接給出轉(zhuǎn)換子程序。 入口:R2存放轉(zhuǎn)換前4位二進(jìn)制數(shù) 出口:R2存放轉(zhuǎn)換后的ASCII碼 源程序: ORG 1000H ASCB1: MOV A,R2 ANL A,#0FH ; 取出四位二進(jìn)制數(shù) PUSH ACC ; 壓入堆棧 CLR C SUBB A,#0AH ; 與數(shù)10 比較 POP A JC LOOP ; 小于10,則轉(zhuǎn)LO

43、OP執(zhí)行 ADD A,#07H ; 否則,該數(shù)加7 LOOP: ADD A,#30H ; 加30H,轉(zhuǎn)換為ASCII碼 MOV R2,A ; 保存結(jié)果,結(jié)果存于R2 RET(1) 4位二進(jìn)制轉(zhuǎn)換為ASCII代碼(2)ASCII碼轉(zhuǎn)換為四位二進(jìn)制數(shù)這是上述轉(zhuǎn)換的逆過(guò)程,程序如下: 入口:轉(zhuǎn)換前ASCII碼送R2。 出口:轉(zhuǎn)換后的二進(jìn)制數(shù)存于R2。 源程序: ORG 1000H BCDB1: MOV A,R2 CLR C SUBB A,30H ; ASCII碼減30H MOV R2,A ; 二進(jìn)制數(shù)據(jù)保存于R2 SUBB A,#0AH ; JC LOOP ; 若該數(shù)10,返回主程序 MOV A,R

44、2 ; 若該數(shù)10, 再減7 SUBB A,07H MOV R2,A ; 所得二進(jìn)制數(shù)送R2 LOOP: RET ; 返回主程序(3) BCD 碼轉(zhuǎn)換為二進(jìn)制碼子程序 設(shè)有用BCD碼表示的4位十進(jìn)制數(shù)分別存放于R1、R2中,其中R2存千位和百位數(shù),R1存拾位和個(gè)位數(shù),要把其轉(zhuǎn)換為純二進(jìn)制碼,可用由高位到低位逐位檢查BCD碼的數(shù)值,然后累加各十進(jìn)制位對(duì)應(yīng)的二進(jìn)制數(shù)來(lái)實(shí)現(xiàn)。其中1000D=03E8H,100D=0064H,10=000AH(各位數(shù)的BCD碼與二進(jìn)制碼相同)。子程序如下: 入口:待轉(zhuǎn)換的BCD碼存于R1、R2中,分配如下 低位字節(jié) 拾位數(shù) 個(gè)位數(shù) R1 高位字節(jié) 千位數(shù) 百位數(shù) R2

45、 出口:結(jié)果存在20H、21H單元中,其中20H存低字節(jié),21H存高字節(jié)。程序: BCDBI1:MOV 20H,#00H MOV 21H,#00H ;存結(jié)果單元 MOV R3,#0E8H MOV R4,#03H ;1千的二進(jìn)制數(shù)送R3、R4 MOV A, R2 ANL A,#0F0H ;取千位數(shù) SWAP A ;將千位數(shù)移至低四位 JZ BRAN1 ;千位數(shù)為0,則轉(zhuǎn)BRAN1 LOOP1: DEC A ACALL ADDT ;千位數(shù)不為0,加千位數(shù)二進(jìn)制碼 JNZ LOOP1 BRAN1: MOV R3,#64H MOV R4,#00H ;百位數(shù)的二進(jìn)制碼送R3、R4 MOV A,R2 AN

46、L A,#0FH ;取百位數(shù) JZ BRAN2 ;為0則轉(zhuǎn)BRAN2,否則繼續(xù) LOOP2: DEC A ACALL ADDT JNZ LOOP2 ;加百位數(shù)的二進(jìn)制碼 BRAN2:MOV R3,#0AH MOV A,R1 ANL A,#0F0H ;取十位數(shù) SWAP A ;將十位數(shù)移至低四位 JZ BRAN3 ;十位數(shù)為0,轉(zhuǎn)BRAN3,否則繼續(xù) LOOP3: DEC A ACALL ADDT JNZ LOOP3 ;加十位數(shù)的二進(jìn)制瑪 BRAN3: MOV A,R1 ANL A,#0FH MOV R3,A ACALL ADDT RET ADDT:PUSH PSW CLR C MOV A,20

47、H ;在20H、21H單元中 ADD A,R3 ;累計(jì)轉(zhuǎn)換結(jié)果 MOV 20H,A MOV A,21H ADDC A,R4 MOV 21H,A POP PSW RET2022-3-2346【例例】 N種分支的轉(zhuǎn)移程序NJMPv 功能:根據(jù)入口條件轉(zhuǎn)向N個(gè)程序段v 入口:(R3)=入口條件(0,1,2,3)v 出口:(R0)=RAM的低8位地址v (R1)=RAM的高8位地址v 出口:執(zhí)行不同的子程序后,累加器中為讀取到的數(shù) N-JMP: MOV A , R3 MOV DPTR, #JMPTBL MOVC A, A+DPTR JMP A+DPTR JMPTBL: DB MEM0-JMPTBL D

48、B MEM1-JMPTBL DB MEM2-JMPTBL DB MEM3-JMPTBL MEM0: MOV A, R0 ;從內(nèi)部RAM讀數(shù) RET MEM1: MOVX A, R0 ;從外部256B的RAM讀數(shù) RET MEM2: MOV DPL, R0 ;從外部64KB的RAM讀數(shù) MOV DPH, R1 MOVX A, DPTR RETMEM3: MOV A, R1 ;從外部4KB的RAM讀數(shù) ANL A, #0FH ANL P2, #11110000B ORL P2, A MOVX A, R0 RET 【例例】128種分支轉(zhuǎn)移程序種分支轉(zhuǎn)移程序JMP-128 功能:根據(jù)入口條件轉(zhuǎn)移到12

49、8個(gè)目的地址 入口:(R3)=轉(zhuǎn)移目的地址的序號(hào)00H7FH 出口:轉(zhuǎn)移到相應(yīng)子程序入口 JMP-128: MOV A,R3 RL A MOV DPTR,#JMPTAB JMP A+DPTR JMPTAB: AJMP ROUT00 AJMP ROUT01 ;128個(gè)子程序首址 AJMP ROUT7Fv【例例】 256種分支轉(zhuǎn)移程序種分支轉(zhuǎn)移程序JMP-256v功能:根據(jù)入口條件轉(zhuǎn)移到256個(gè)目的地址v入口:(R3)轉(zhuǎn)移目的地址的程序(00HFFH)v出口:(SP)當(dāng)前棧頂內(nèi)容為轉(zhuǎn)移子程序的入口地址(高位)v JMP256: MOV A, R3v MOV DPTR, #TBLv CLR Cv R

50、LC Av JNC LOW128v INC DPHv LOW128: MOV SAVE, Av MOVC A, A+DPTRv PUSH ACCv MOV A, SAVEv INC Av MOVC A, A+DPTRv PUSH ACCv RETv TBL: DW ROUT0v 【例例】大于256的 分支轉(zhuǎn)移程序JMP-Nv 功能:根據(jù)入口條件轉(zhuǎn)向N個(gè)分支程序,N(最大的存貯容量散轉(zhuǎn)表首址)/ 3v 入口:(R7R6)子程序序號(hào)(0N)v JMP_N: MOV DPTR, #TABv MOV A, R7v MOV B, #3v MUL ABv ADD A, DPHv MOV DPH, Av M

51、OV A, R6v MOV B, #3v MUL ABv XCH A, Bv ADD A, DPHv XCH A, Bv JMP A+DPTR2022-3-23524.5 簡(jiǎn)單簡(jiǎn)單I/O設(shè)備的并口直接驅(qū)動(dòng)示例設(shè)備的并口直接驅(qū)動(dòng)示例獨(dú)立式鍵盤(pán)與獨(dú)立式鍵盤(pán)與LEDLED顯示示例顯示示例【例例4-174-17】數(shù)據(jù)端與數(shù)據(jù)端與P0P0口口正序正序連接。編寫(xiě)程序,分別實(shí)現(xiàn)功能:連接。編寫(xiě)程序,分別實(shí)現(xiàn)功能:上電后數(shù)碼管顯示上電后數(shù)碼管顯示“P P”,按下任何鍵后,顯示從,按下任何鍵后,顯示從“0 0”開(kāi)始每隔開(kāi)始每隔1 1秒加秒加1 1,加至,加至“F F”后,數(shù)碼管顯示后,數(shù)碼管顯示“P P”,進(jìn)入

52、等待按鍵狀態(tài)。,進(jìn)入等待按鍵狀態(tài)。 2022-3-2353 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,#0FFHNOKEY: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

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論