




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第3章章 MCS-51系列單片機(jī)指令系統(tǒng)系列單片機(jī)指令系統(tǒng)及匯編言語(yǔ)程序設(shè)計(jì)及匯編言語(yǔ)程序設(shè)計(jì)uMCS-51單片機(jī)的尋址方式單片機(jī)的尋址方式uMCS-51單片機(jī)分類指令單片機(jī)分類指令 uMCS-51單片機(jī)匯編言語(yǔ)程序設(shè)計(jì)根底單片機(jī)匯編言語(yǔ)程序設(shè)計(jì)根底 3.1 MCS-51單片機(jī)的尋址方式單片機(jī)的尋址方式MCS-51單片機(jī)共有7種尋址方式:立刻尋址直接尋址存放器尋址存放器間接尋址變址尋址相對(duì)尋址位尋址1. 立刻尋址 立刻尋址就是把操作數(shù)直接在指令中給出,即操作數(shù)包含在指令中。立刻操作數(shù)有8位和16位兩種方式,前面加“來(lái)表示。例如:MOV A, #0FFH ;將立刻數(shù)FFH傳送到累加器A中 MO
2、V DPTR, #2000H ;將16位立刻數(shù)2000H傳送到數(shù)據(jù)指針DPTR中 MOV 40H, # 60H ;將立刻數(shù)60H傳送到40H內(nèi)部RAM單元中2. 直接尋址 指令中直接給出操作數(shù)地址的尋址方式。 例如:MOV A,30H ;內(nèi)部RAM中的30H單元中的數(shù)據(jù)內(nèi)容傳送到累加器A中3. 存放器尋址 以通用存放器的內(nèi)容為操作數(shù)的尋址方式。通用存放器包括:A,B,DPTR,R0R7。其中,R0R7必需在任務(wù)存放器組之中。 例如:INC R0 ;R01R0 需求留意的是,A和B既是通用存放器,又是具有直接地址的特殊功能存放器。 4. 存放器間接尋址 以存放器中的內(nèi)容為地址,該地址中的內(nèi)容為操
3、作數(shù)的尋址方式??梢杂糜诖娣牌鏖g接尋址的存放器有:R0,R1,DPTR,SP。其中,R0,R1必需在任務(wù)存放器組之中,SP僅用于堆棧操作。 例如: MOVX A, R1 ;外部數(shù)據(jù)RAM中地址為P2R1的單元內(nèi)容A MOVX DPTR,A ;A外部數(shù)據(jù)RAM中DPTR為地址的單元 存放器間接尋址的存儲(chǔ)器空間包括:內(nèi)部數(shù)據(jù)RAM和外部數(shù)據(jù)RAM。 內(nèi)部數(shù)據(jù)RAM共用128字節(jié),用一個(gè)字節(jié)的R0或R1可尋址整個(gè)空間。 外部數(shù)據(jù)RAM最大可達(dá)64K字節(jié),僅用R0或R1無(wú)法尋址整個(gè)空間。在MCS-51系列單片機(jī)指令中,對(duì)外部數(shù)據(jù)RAM作間接尋址有兩種方法:第一種由P2口提供高8位外部數(shù)據(jù)RAM地址,由
4、R0或R1提供低8位地址,由此共同尋址64K空間;第二種是用16位的DPTR作存放器間接尋址。5. 變址尋址 由程序計(jì)數(shù)器PC或DPTR加上偏移量存放器A中內(nèi)容之和構(gòu)成操作數(shù)地址的尋址方式。變址尋址只能對(duì)程序存儲(chǔ)器中的數(shù)據(jù)作尋址操作。由于程序存儲(chǔ)器是只讀存儲(chǔ)器,因此變址尋址操作只需讀操作而無(wú)寫操作。 例如: MOVC A, A+DPTR ;A+DPTR為地址的存儲(chǔ)器單元內(nèi)容A MOVC A, A+PC ;A+PC為地址的存儲(chǔ)器單元內(nèi)容A6. 相對(duì)尋址 以當(dāng)前程序計(jì)數(shù)器PC的內(nèi)容為基址,加上指令給出的一字節(jié)補(bǔ)碼數(shù)構(gòu)成新的PC值的尋址方式。PC中的當(dāng)前值稱為基地址,一字節(jié)補(bǔ)碼數(shù)稱為偏移量,新的PC
5、值稱為轉(zhuǎn)移目的地址。 例如:JC 80H ;C1跳轉(zhuǎn) 表示進(jìn)位位C為0,那么程序計(jì)數(shù)器PC中的內(nèi)容不改動(dòng),即不轉(zhuǎn)移。假設(shè)進(jìn)位位C為1,那么PC中的當(dāng)前值為基地址加上偏移量80H后所得到的結(jié)果作為該轉(zhuǎn)移指令的目的地址。7. 位尋址 對(duì)位地址中的內(nèi)容作位操作的尋址方式。單片機(jī)中只需內(nèi)部RAM和特殊功能存放器的部分單元有位地址兩者一致編址,地址空間為00HFFH,因此,位尋址只能對(duì)有位地址的這兩個(gè)空間作尋址操作。 例如 SETB 20H ;120H位 MOV 32H,C ;進(jìn)位位C32H位3.2 分類指令分類指令 MCS-51單片機(jī)共有111條指令,按功能分類,MCS-51指令系統(tǒng)可分為5大類:數(shù)據(jù)
6、傳送類指令共29條算術(shù)操作類指令共24條邏輯操作類指令共24條控制轉(zhuǎn)移類指令共17條布爾變量操作類指令共17條1.數(shù)據(jù)傳送類指令共數(shù)據(jù)傳送類指令共29條條 l 以累加器A為目的操作數(shù)類指令4條 l MOV A,dir l MOV A,#data l MOV A,Rn l MOV A,Ri l 例:R120H,20H55H,指令MOV A,R1執(zhí)行后,A55H。l 以存放器Rn為目的操作數(shù)的指令3條l MOV Rn,dir l MOV Rn,#data l MOV Rn,A l 例:40H30H,指令MOV R7,40H執(zhí)行后,R730H。 l 以直接地址為目的操作數(shù)的指令5條 l MOV di
7、r,dirl MOV dir,#data l MOV dir,A l MOV dir,Rn l MOV dir,Ri l 例:R050H,50H10H,指令MOV 35H,R0執(zhí)行后,(35H)10H。l 以間接地址為目的操作數(shù)的指令3條l MOV Ri,dir l MOV Ri,#data l MOV Ri,A l 查表指令2條l MOVC A,A+DPTR l MOVC A,A+PC l 例:A20H,DPTR2000H,指令MOVC A,A+DPTR執(zhí)行后,程序存儲(chǔ)器2020H單元中的內(nèi)容送入A。 l 累加器A與片外數(shù)據(jù)存儲(chǔ)器RAM傳送指令4條 l MOVX DPTR,A l MOVX
8、A,DPTR l MOVX A,,Ri l MOVX Ri,A l 例:DPTR2000H,外部RAM中2000H18H,指令MOVX A,DPTR執(zhí)行后,A18H。l 例:P210H,R150H,A64H,指令MOVX R1,A執(zhí)行后,外部RAM中1050H64H。l 堆棧操作類指令2條l PUSH dir l POP dir l 例:SP07H,35H55H,指令PUSH 35H執(zhí)行后,55H送入08H地址單元,SP08H。l 交換指令5條 l XCH A,Rn l XCH A,Ri l XCH A,dir l XCHD A,Ri l SWAP A l 例:A80H,R032H,32HFF
9、H,指令XCHD A,R0執(zhí)行后,A8FH,32HF0H。l 16位數(shù)據(jù)傳送指令1條 l MOV DPTR,#data16 2.算術(shù)操作類指令共算術(shù)操作類指令共24條條 算術(shù)運(yùn)算指令共有24條,算術(shù)運(yùn)算主要是執(zhí)行加、減、乘、除、增量、減量和十進(jìn)制調(diào)整等指令。加法指令4條 ADD A,#data ADD A,dir ADD A,Rn ADD A,Ri 帶進(jìn)位加法指令4條 ADDC A,dir ADDC A,#data ADDC A,Rn ADDC A,Ri 帶借位減法指令4條 SUBB A,dir SUBB A,#data SUBB A,Rn SUBB A,Ri 例:A38H,R120H,20H
10、23H,C1,指令SUBB A,R1執(zhí)行后,A14H l 乘法指令1條l MUL A, B l 例:A50H,BA0H,指令MUL A, B執(zhí)行后,A00H,B32H l 除法指令1條l DIV A, B l 例:A28H,B12H,指令DIV A, B執(zhí)行后,A02H,B04H l 加1指令5條l INC A l INC dir l INC Ri l INC Rn l INC DPTR l 減1指令4條l DEC A l DEC dir l DEC Ri l DEC Rn l 十進(jìn)制調(diào)整指令1條 l DA A ;把A中按二進(jìn)制相加后的結(jié)果調(diào)整成按BCD數(shù)相加的結(jié)果 3.邏輯操作類指令共邏輯操
11、作類指令共24條條 邏輯操作類指令共有24條,主要包括“與、“或、“異或、求反、清0、左右移位等邏輯操作?!芭c操作指令6條 ANL A,dir ANL A,#data ANL A,Rn ANL A,Ri ANL dir,A ANL dir,#data “或操作指令6條 ORL A,dir ORL A,#data ORL A,Rn ORL A,Ri ORL dir,A ORL dir,#data 例:21H3AH,A14H,指令ORL 21H,A執(zhí)行后,21H3EH。l “異或操作指令6條 l XRL A,dir l XRL A,#data l XRL A,Rn l XRL A,Ri l XRL
12、 dir,A l XRL dir,#data l 例:R023H,23H32H,A53H,指令XRL A,R0執(zhí)行后,A61Hl 求反指令1條CPL A ;累加器A中的內(nèi)容按位取反 l 清零指令1條CLR A ;0A,累加器A中的內(nèi)容清零 l 循環(huán)移位指令4條 RL A ;累加器A中的內(nèi)容左移一位 RR A ;累加器A中的內(nèi)容右移一位 RLC A ;累加器A中的內(nèi)容連同進(jìn)位位C左移一位 RRC A ;累加器A中的內(nèi)容連同進(jìn)位位C右移一位例:A16H,指令RR A執(zhí)行后,A0BH。 4.控制轉(zhuǎn)移類指令控制轉(zhuǎn)移類指令 共共17條條 控制轉(zhuǎn)移類指令共有17條,用于控制程序的流向,所控制的范圍即為程序
13、存儲(chǔ)器區(qū)間。子程序調(diào)用指令4條絕對(duì)調(diào)用指令 ACALL addr11 絕對(duì)調(diào)用指令實(shí)如今2K地址范圍內(nèi)的子程序調(diào)用。本指令實(shí)現(xiàn)的操作將不改動(dòng)原PC的高5位,僅把11位地址addr11送入PC的低11位,以此確定子程序的入口地址。由于整個(gè)64K程序存儲(chǔ)器空間被分成32個(gè)根本2K地址范圍見(jiàn)表3.4,編程時(shí),必需保證緊接ACALL指令后面的那一條指令的第一字節(jié)與被調(diào)用子程序的入口地址在同一2K范圍內(nèi),否那么將不能運(yùn)用ACALL指令實(shí)現(xiàn)這種調(diào)用。表3.4 程序存儲(chǔ)器空間中的32個(gè)根本2K地址范圍0000H07FFH5800H5FFFHB000HB7FFH0800H0FFFH6000H67FFHB800
14、HBFFFH1000H17FFH6800H6FFFHC000HC7FFH1800H1FFFH7000H77FFHC800HCFFFH2000H27FFH7800H7FFFHD000HD7FFH2800H2FFFH8000H87FFHD800HDFFFH3000H37FFH8800H8FFFHE000HE7FFH3800H3FFFH9000H97FFHE800HEFFFH4000H47FFH9800H9FFFHF000HF7FFH4800H4FFFHA000HA7FFHF800HFFFFH5000H57FFHA800HAFFFH 長(zhǎng)調(diào)用指令 LCALL addr16 長(zhǎng)調(diào)用指令為64K程序存儲(chǔ)器
15、空間中的全范圍子程序調(diào)用指令,子程序的入口地址可在64K地址空間中的任一處。 子程序前往指令 RET 從被調(diào)用子程序前往,與LCALL與ACALL指令配合運(yùn)用。 中斷前往指令 RETI 從中斷效力程序中前往,除具有RET功能外,還具有恢復(fù)中斷邏輯的功能,需留意的是,RETI指令不能用RET替代。l 轉(zhuǎn)移類指令12條l 轉(zhuǎn)移類指令分為無(wú)條件轉(zhuǎn)移指令和條件轉(zhuǎn)移指令兩組。無(wú)條件轉(zhuǎn)移指令包括絕對(duì)轉(zhuǎn)移、長(zhǎng)轉(zhuǎn)移、短轉(zhuǎn)移和間接轉(zhuǎn)移;條件轉(zhuǎn)移指令包括結(jié)果為零、結(jié)果為非零、減“1后結(jié)果為非零以及兩數(shù)不相等的轉(zhuǎn)移條件等,它們?nèi)坎捎孟鄬?duì)轉(zhuǎn)移的方式。l 無(wú)條件轉(zhuǎn)移指令4條l 【1】長(zhǎng)轉(zhuǎn)移指令l LJMP addr1
16、6 l 長(zhǎng)轉(zhuǎn)移指令為64K程序存儲(chǔ)器空間的全范圍轉(zhuǎn)移指令,轉(zhuǎn)移地址可為16位地址值中的任一值。l 【2】絕對(duì)轉(zhuǎn)移指令l AJMP addr11 l 絕對(duì)轉(zhuǎn)移指令為2K地址范圍內(nèi)的轉(zhuǎn)移指令,對(duì)轉(zhuǎn)移目的地址的要求與ACALL指令中對(duì)子程序入口地址的要求一樣。l 【3】短轉(zhuǎn)移指令l SJMP rel ;PC+ 2 + relPCl 短轉(zhuǎn)移指令為一頁(yè)地址范圍內(nèi)的相對(duì)轉(zhuǎn)移指令。由于rel為1字節(jié)補(bǔ)碼偏移量,且SJMP rel指令為2字節(jié)指令,所以轉(zhuǎn)移范圍為126D129Dl 【4】間接轉(zhuǎn)移指令l JMP A+DPTR 條件轉(zhuǎn)移指令8條 【1】累加器為零/非零轉(zhuǎn)移指令 JZ rel 假設(shè)A=0,那么PC+
17、 2 + relPC,程序轉(zhuǎn)移到偏移量所指向的地址 假設(shè)A0,程序順序執(zhí)行 JNZ rel 假設(shè)A0,那么PC+ 2 + relPC,程序轉(zhuǎn)移到偏移量所指向的地址 假設(shè)A=0,程序順序執(zhí)行 【2】?jī)蓴?shù)不等轉(zhuǎn)移指令 CJNE A,dir,rel 假設(shè)Adir,那么PC 3 relPC,程序轉(zhuǎn)移; 假設(shè)Adir,那么程序順序執(zhí)行 CJNE A,#data,rel 假設(shè)A#data,那么PC 3 relPC,程序轉(zhuǎn)移; 假設(shè)A#data,那么程序順序執(zhí)行 CJNE Rn, #data,rel 假設(shè)Rn#data,那么PC3 relPC,程序轉(zhuǎn)移; 假設(shè)Rn#data,那么程序順序執(zhí)行 CJNE Ri
18、,#data,rel 假設(shè)(Ri)#data,那么PC 3 relPC,程序轉(zhuǎn)移; 假設(shè)(Ri)#data,那么程序順序執(zhí)行【3】減“1非零轉(zhuǎn)移指令 DJNZ Rn,rel Rn1Rn, 假設(shè)Rn0,那么PC2relPC,程序轉(zhuǎn)移; 假設(shè)Rn0,那么程序順序執(zhí)行 DJNZ dir,rel dir1dir,假設(shè)dir)0,那么PC3relPC,程序轉(zhuǎn)移; 假設(shè)dir)0,那么程序順序執(zhí)行 需求留意的是,DJNZ Rn,rel是2字節(jié)指令,而DJNZ dir,rel 是3字節(jié)指令,所以在滿足轉(zhuǎn)移條件后,前者是PC2relPC,而后者是PC3relPC。例:闡明下面一段程序運(yùn)轉(zhuǎn)后累加器A中的結(jié)果。
19、MOV 23H,0AH CLR ALOOP:ADD A,23H DJNZ 23H,LOOP SJMP $解:根據(jù)程序可知,運(yùn)算結(jié)果A1098765432155D37H空操作指令1條 NOP 5.布爾變量操作類指令共布爾變量操作類指令共17條條 布爾變量操作類指令共有17條,其共同特點(diǎn)是對(duì)進(jìn)位位C和直接位地址bit的操作,包括清零、置位、求反、邏輯與、邏輯或、位傳送以及判別轉(zhuǎn)移指令。 清位指令2條 CLR C ;0C CLR bit ;0bit置位指令2條 SETB C ;1C SETB bit ;1bit位求反指令2條 CPL C CPL bit 位邏輯“與指令2條 ANL C,bit ANL
20、 C, bitbitl 位邏輯“或指令2條l ORL C,bit l ORL C, l 位傳送指令2條l MOV C,bit ;bitCl MOV bit,C ;Cbit l 位控制轉(zhuǎn)移指令5條位控制轉(zhuǎn)移指令是以位的形狀作為實(shí)現(xiàn)程序轉(zhuǎn)移的判別條件,引見(jiàn)如下:l JC rel l 假設(shè)C=1,那么PC+2+relPC,程序轉(zhuǎn)移; 否那么程序順序執(zhí)行l(wèi) JNC rel l 假設(shè)C=0,那么PC+2+relPC,程序轉(zhuǎn)移;否那么程序順序執(zhí)行l(wèi) JB bit,rel l 假設(shè)bit=1,那么PC+3+relPC,程序轉(zhuǎn)移;否那么程序順序執(zhí)行l(wèi) JNB bit,rel l 假設(shè)bit=0,那么PC+3+
21、relPC,程序轉(zhuǎn)移;否那么程序順序執(zhí)行l(wèi) JBC bit,rel l 假設(shè)bit=1,那么PC+3+relPC,程序轉(zhuǎn)移,且該位清零;否那么程序順序執(zhí)行bit3.3 MCS-51單片機(jī)匯編言語(yǔ)程序設(shè)計(jì)單片機(jī)匯編言語(yǔ)程序設(shè)計(jì)l匯編言語(yǔ)概述l順序程序 l分支程序 l循環(huán)程序 l子程序 1.匯編言語(yǔ)概述 構(gòu)造化程序的概念 順序構(gòu)造 順序構(gòu)造是按照語(yǔ)句實(shí)現(xiàn)的先后次序執(zhí)行一系列的操作,它沒(méi)有分支、循環(huán)和轉(zhuǎn)移。 分支構(gòu)造 分支構(gòu)造又叫條件選擇構(gòu)造,根據(jù)不同情況做出判別和選擇,以便執(zhí)行不同的程序段。分支的意思是在兩個(gè)或多個(gè)不同的操作中選擇其中的一個(gè)。 循環(huán)構(gòu)造 循環(huán)構(gòu)造是反復(fù)執(zhí)行一系列操作,直到某個(gè)條件出
22、現(xiàn)為止。循環(huán)實(shí)踐上是分支構(gòu)造的一種擴(kuò)展,循環(huán)能否繼續(xù)是依托條件判別語(yǔ)句來(lái)完成的。按照條件判別的位置,可以把循環(huán)分為“當(dāng)型循環(huán)和“直到型循環(huán)。第一種情況是先作條件判別,第二種情況是先執(zhí)行一次循環(huán),然后判別能否繼續(xù)循環(huán)。 匯編言語(yǔ)程序設(shè)計(jì)的普通步驟 分析問(wèn)題,籠統(tǒng)出描畫問(wèn)題的數(shù)學(xué)模型; 確定處理問(wèn)題的算法或解題思想; 繪制流程圖和構(gòu)造圖; 分配存儲(chǔ)空間和任務(wù)單元; 編制程序; 程序靜態(tài)檢查,上機(jī)調(diào)試; 編寫相關(guān)闡明。 匯編言語(yǔ)的語(yǔ)句格式 MCS-51匯編言語(yǔ)的語(yǔ)句格式應(yīng)符合以下構(gòu)造: 【標(biāo)號(hào):】 操作碼 【操作數(shù)】【;注釋】 匯編言語(yǔ)語(yǔ)句由標(biāo)號(hào)、操作碼、操作數(shù)和注釋4部分組成。其中,標(biāo)號(hào)和注釋部分
23、可以沒(méi)有,甚至某些指令的操作數(shù)也可以沒(méi)有,如NOP、RET指令等。 標(biāo)號(hào)位于語(yǔ)句的開場(chǎng),由以字母開頭的字母和數(shù)字組成,它代表該語(yǔ)句的地址。標(biāo)號(hào)與操作碼之間要用“:隔開,標(biāo)號(hào)與“:之間不能有空格,“:與操作碼之間可以有空格。 操作碼是指令的助記符。 操作數(shù)在操作碼之后,二者用空格分開。操作數(shù)可以是數(shù)據(jù),也可以是地址。有多個(gè)操作數(shù)時(shí),操作數(shù)之間用逗號(hào)分開。 注釋在語(yǔ)句的最后,以“;開場(chǎng),是闡明性的文字,與語(yǔ)句的詳細(xì)功能無(wú)關(guān)。 指令中的數(shù)據(jù)可以是十進(jìn)制、十六進(jìn)制、二進(jìn)制、八進(jìn)制數(shù)和字符串,詳細(xì)格式如下: 十進(jìn)制數(shù)以D結(jié)尾,也可以省略,如55D或55; 十六進(jìn)制數(shù)以H結(jié)尾,如55H。假設(shè)數(shù)據(jù)以AF開頭
24、,其前必需加數(shù)字0,如0FFH; 二進(jìn)制數(shù)以B結(jié)尾,如00110011B; 八進(jìn)制數(shù)以O(shè)或Q結(jié)尾,如55O或55Q; 字符串用或表示,如M表示字符M的ASCII碼。 例:MAIN: MOV A,00H ;將A清零 在這條指令中,MAIN為標(biāo)號(hào),表示該指令的地址;MOV為操作碼,表示指令的功能為數(shù)據(jù)傳送;A和00H為操作數(shù);將A清零為注釋,用于闡明這條語(yǔ)句的功能,注釋內(nèi)容不參與程序的匯編。偽指令 ORG:匯編程序起始地址 ORG用來(lái)闡明其后程序段在存儲(chǔ)器中存放的起始地址。 例: ORG 0030H MAIN:MOV 20H,0FFH MOV 30H,0FEH ORG 0030H闡明從MAIN開場(chǎng)
25、的程序從存儲(chǔ)器的0030H地址單元開場(chǎng)存放,并且MAIN0030H。 EQU:賦值指令 EQU用來(lái)給變量標(biāo)號(hào)賦予一個(gè)確定的數(shù)值。 例:DATA EQU 0AH MAIN EQU 1000H 這段程序使DATA0AH,MAIN1000H。 DB:定義數(shù)據(jù)字節(jié) DB指令按字節(jié)數(shù)的方式把數(shù)據(jù)存放在存儲(chǔ)單元中。 例:TAB: DB 0C0H,0F9H,0A4H,0B0H,99H 92H,82H,0F8H,80H,90H 這段程序從表頭TAB起,延續(xù)存放了十個(gè)字節(jié)的數(shù)值:0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H。 DW:定義數(shù)據(jù)字 DW指令按字雙字節(jié)的方式
26、把數(shù)據(jù)存放在存儲(chǔ)單元中。例:ORG 1020H DW 30H,31H,1020H這段程序把數(shù)據(jù)30H,31H,1020H以字雙字節(jié)的方式存放在從1020H開場(chǎng)的一片存儲(chǔ)單元中。 DS:定義存儲(chǔ)區(qū) DS從指定的地址單元開場(chǎng),保管一定數(shù)量的存儲(chǔ)單元。例:ORG 0100H DS 5從0100H地址開場(chǎng),空出5個(gè)字節(jié)的存儲(chǔ)單元來(lái),為程序所用。 BIT:位定義 其功能是把位地址賦給字符稱號(hào)。例:LED BIT P1.0 是將位地址P1.0賦給變量LED。 END:匯編終了 END命令闡明匯編言語(yǔ)程序終了。2.順序程序 順序程序是指程序中沒(méi)有運(yùn)用轉(zhuǎn)移類指令的程序段,機(jī)器執(zhí)行這類程序時(shí)也只需按照先后順序依
27、次執(zhí)行,中間不會(huì)有任何分支、循環(huán),也不需求調(diào)用子程序。 例:將一個(gè)單字節(jié)十六進(jìn)制數(shù)轉(zhuǎn)換成BCD碼。 解:算法分析。單字節(jié)十六進(jìn)制數(shù)在0255之間,將其除以100后,商為百位數(shù);余數(shù)除以10,商為十位數(shù),余數(shù)為個(gè)位數(shù)。 設(shè)單字節(jié)數(shù)存放在40H,轉(zhuǎn)換后,百位數(shù)存放在R0中,十位數(shù)存放在R1中,個(gè)位數(shù)存放在R2中,詳細(xì)程序如下: ORG 0030H MOV A, 40H ;將單字節(jié)十六進(jìn)制數(shù)送入A中 MOV B,#64H ;將100送入B中 DIV AB MOV R0,A ;百位數(shù)送R0,余數(shù)在B中 XCH A,B ;余數(shù)送入A中 MOV B,#0AH DIV AB ;商為十位數(shù),余數(shù)為個(gè)位數(shù) MO
28、V R1,A MOV R2,B SJMP $ 例:設(shè)變量放在片內(nèi)RAM 20H單元,其取值范圍為00H,01H,02H,03H,04H,05H,要求編制一段查表程序,查出變量的平方值,并放入片內(nèi)RAM 21H單元。 解:在程序存儲(chǔ)器的一片指定的地址單元中,建立各個(gè)變量的平方值表,用數(shù)據(jù)指針指向表的首地址,那么變量與數(shù)據(jù)指針之和的地址單元中的內(nèi)容就是變量的平方值,程序如下; ORG 0030H MAIN:MOV DPTR,#0500H ;將表的首地址送給數(shù)據(jù)指針 MOV A,20H ;將變量送入A中 MOVC A,DPTR+A ;查表得到變量的平方值 MOV 21H,A ;將平方值送到指定的地址
29、單元 SJMP $ TAB EQU 0500H ;給表賦首地址 TAB DB 00H,01H,04H,09H,10H,19H ;建立平方值表 END3.分支程序 例:將一位十六進(jìn)制數(shù)轉(zhuǎn)換為ASCII碼。設(shè)十六進(jìn)制數(shù)在A中A的高4位為0,轉(zhuǎn)換結(jié)果仍存放在A中。 解:十六進(jìn)制數(shù)轉(zhuǎn)換為ASCII碼的原那么是:十六進(jìn)制的09,加30H即轉(zhuǎn)換為ASCII碼;0AH0FH要加37H才干轉(zhuǎn)換為ASCII碼,詳細(xì)程序如下: ORG 0030H CJNE A,#0AH,NO10 ;判別十六進(jìn)制數(shù)能否為10NO10:JC LT10 ;C=1,即十六進(jìn)制數(shù)小于10那么轉(zhuǎn)移 ADD A,#07H ;十六進(jìn)制數(shù)大于或等
30、于10,那么先加07H LT10:ADD A,#30H SJMP $ 例:設(shè)變量X以補(bǔ)碼的方式存放在片內(nèi)RAM 30H單元,函數(shù)Y與X有如下的關(guān)系:試編制程序,根據(jù)X的大小求出Y,并放回原單元。 解:取出變量后,先對(duì)變量X作取值范圍的判別,再按照函數(shù)表達(dá)式求出Y的值。對(duì)符號(hào)的判別可以用位操作類指令,也可以用邏輯運(yùn)算類指令,此處用邏輯運(yùn)算指令。程序流程圖如圖3.1所示。X X0Y= #20HX=0X+5X0, ;,;, ;程序如下: ORG 0030HMAIN:MOV A,30H JZ NEXT ;判別X能否為零 ANL A,80H ;判別符號(hào)位 JZ ED ;假設(shè)X大于0,YX MOV A,#
31、05H ADD A,30H MOV 30H,A SJMP EDNEXT:MOV 30H,#20HED: SJMP $圖3.14.循環(huán)程序 例:將內(nèi)部數(shù)據(jù)RAM中20H3FH單元的內(nèi)容傳送到外部數(shù)據(jù)存儲(chǔ)器,起始單元地址為2000H。 解:20H3FH合計(jì)32個(gè)單元,需傳送32次數(shù)據(jù)。將R1作為循環(huán)計(jì)數(shù)器,程序流程圖如圖3.2所示。詳細(xì)程序如下: 所謂循環(huán)程序是指單片機(jī)反復(fù)執(zhí)行某一段程序,這個(gè)程序段通常稱為循環(huán)體。循環(huán)是在一定條件控制下進(jìn)展的,以決議是繼續(xù)循環(huán)執(zhí)行或是終了循環(huán)。程序循環(huán)是經(jīng)過(guò)條件轉(zhuǎn)移指令進(jìn)展控制的。MAIN:MOV R0,#20H ;將數(shù)據(jù)首地址賦給R0 MOV DPTR,#200
32、0H ;設(shè)置外部RAM首地址 MOV R1,#20H ;設(shè)置循環(huán)計(jì)數(shù)器LOOP:MOV A,R0 ;取內(nèi)部RAM數(shù)據(jù) MOVX DPTR,A ;將數(shù)據(jù)送往外部RAM INC R0 ;調(diào)整內(nèi)部數(shù)據(jù)RAM ;指針,指向下一個(gè)數(shù)據(jù) INC DPTR ;調(diào)整外部RAM指針 DJNZ R1,LOOP SJMP $ 例:把片內(nèi)數(shù)據(jù)RAM 30H39H單元中的10個(gè)無(wú)符號(hào)數(shù)逐一比較,按從小到大的順序依次陳列在這片單元中。 解:為了把10個(gè)單元中的數(shù)按從小到大的順序陳列,可以從30H單元開場(chǎng),取前數(shù)與后數(shù)比較,假設(shè)前數(shù)小于后數(shù),那么順序繼續(xù)比較下去;假設(shè)前數(shù)大于后數(shù),那么前數(shù)和后數(shù)交換后再繼續(xù)比較下去。第一次
33、循環(huán)將在最后單元中得到最大的數(shù),要得到一切數(shù)據(jù)從小到大的陳列需求進(jìn)展多重循環(huán)。程序流程圖如圖3.3所示。詳細(xì)程序如下:MAIN:CLR 00H ;去除交換標(biāo)志位 MOV R7,#0AH MOV R0,#30H ;數(shù)據(jù)區(qū)首地址 MOV A,R0LOOP:INC R0 MOV R2,A ;保管前數(shù) SUBB A,R0 MOV A,R2 ;恢復(fù)前數(shù) JC NEXT ;判別前后兩數(shù)大小 SETB 00H XCH A,R0 ;前后兩數(shù)交換 DEC R0 XCH A,R0 INC R0NEXT:MOV A,R0 ;取下一個(gè)數(shù) DJNZ R7,LOOP JB 00H,MAIN ;交換后重新比較 SJMP $
34、5.子程序 在調(diào)用子程序時(shí),要留意以下幾個(gè)問(wèn)題: 子程序占用的存儲(chǔ)單元和存放器。假設(shè)在調(diào)用子程序之前,主程序曾經(jīng)運(yùn)用了這些存儲(chǔ)單元或存放器,在調(diào)用后,這些存儲(chǔ)單元或存放器又被子程序運(yùn)用,就應(yīng)領(lǐng)先把這些存儲(chǔ)單元或存放器中的內(nèi)容壓入堆棧維護(hù)起來(lái),調(diào)用完后再?gòu)亩褩V袕棾?,加以恢?fù)。 入口參數(shù)和出口參數(shù)。調(diào)用之前要按照子程序的要求設(shè)置好入口參數(shù),只需這樣才干在調(diào)用后,從出口參數(shù)處得到調(diào)用后的正確結(jié)果。 參數(shù)的傳送。子程序可以從指定的地址單元或存放器獲得調(diào)用程序的數(shù)據(jù)參數(shù),經(jīng)過(guò)調(diào)用后得到的數(shù)據(jù)可輸出到指定的地址單元或存放器,從而實(shí)現(xiàn)兩者之間的參數(shù)傳送。 可遞歸性與可重入性??蛇f歸性是指子程序可以調(diào)用本人
35、,可重入性是指一個(gè)子程序可以同時(shí)被多個(gè)程序調(diào)用。這兩個(gè)特性主要是對(duì)大規(guī)模復(fù)雜系統(tǒng)程序的要求,對(duì)普通運(yùn)用程序可不作要求。例:經(jīng)過(guò)調(diào)用子程序?qū)崿F(xiàn)延時(shí)100ms,設(shè)單片機(jī)晶振頻率為12MHz。 解:子程序稱號(hào)為DELAY,可實(shí)現(xiàn)1256ms的延時(shí)功能,詳細(xì)延時(shí)時(shí)長(zhǎng)可以經(jīng)過(guò)設(shè)置入口參數(shù)獲得,入口參數(shù)放在R3中,詳細(xì)程序如下:MAIN:PUSH PSW MOV PSW,#08H MOV R3,#64H ;入口參數(shù)為100 LCALL DELAY ;調(diào)用子程序 POP PSW SJMP $DELAY:MOV R2,#0FAH LOOP: NOP ;內(nèi)層循環(huán)為1ms NOP DJNZ R2,LOOP DJN
36、Z R3,DELAY RET例:將存于R0中的一位十六進(jìn)制數(shù)R0的高4位為0轉(zhuǎn)換為七段顯示碼,并將結(jié)果送P1口顯示。設(shè)七段顯示器為共陰極接法。解:顯示子程序?yàn)镈IR,詳細(xì)程序如下:ORG 0000H LJMP MAINORG 0030HMAIN:LCALL DELAY MOV P1,#00H LCALL DIR DIR:PUSH ACC MOV A,R0 ;取R0中的數(shù) MOV DPTR,#TABLE MOVC A,A+DPTR ;查表,取出七段顯示碼 MOV P1,A POP ACC RETDELAY:MOV R7,#0FAHLOOP: MOV R6,#0FAHLOOP1:DJNZ R6,L
37、OOP1 DJNZ R7,LOOP RETTABLE:DB 40H,79H,24H,30H DB 19H,12H,02H,78H DB 00H,18H,08H,03H DB 46H,21H,06H,0EH END習(xí)題解答1. 什么是尋址方式?MCS-51單片機(jī)有哪幾種尋址方式?答案: 指令的一個(gè)重要的組成部分是操作數(shù),指令給出參與運(yùn)算的數(shù)據(jù)的方式稱為尋址方式,換句話說(shuō),尋址方式就是尋覓確定參與操作的數(shù)的真正地址。 MCS-51系列單片機(jī)共有7種尋址方式:立刻尋址、直接尋址、存放器尋址、存放器間接尋址、變址尋址、相對(duì)尋址和位尋址。2. 什么是指令系統(tǒng)?MCS-51單片機(jī)共有多少種指令?答案:CPU所能執(zhí)行的各種指令的集合稱為指令系統(tǒng)。MCS-51系列單片機(jī)的指令系統(tǒng)是一種簡(jiǎn)明易掌握、效率較高的指令系統(tǒng)。在MCS-51系列單片機(jī)的指令系統(tǒng)中共運(yùn)用了7種尋址方式、42種助記符,這些助記符與尋址方式組合起來(lái),共構(gòu)成111條指令,完成數(shù)據(jù)傳送、算數(shù)運(yùn)算、邏輯運(yùn)算、控制轉(zhuǎn)移以及位操作等方面的任務(wù)。3. 匯編言語(yǔ)的語(yǔ)句格式是什么?運(yùn)用標(biāo)號(hào)有什么限制?注釋段起什么作用?答案: MCS-51匯編言語(yǔ)的語(yǔ)句格式應(yīng)符合以下構(gòu)造: 【標(biāo)號(hào):】 操作碼 【操作數(shù)】【;注釋】 標(biāo)號(hào)位于語(yǔ)句的開場(chǎng),由以字母開頭的字母和數(shù)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 房產(chǎn)代持合同協(xié)議書范本
- 汽車內(nèi)飾配件采購(gòu)合同
- 離婚后住房分配合同樣本
- 二手施工設(shè)備購(gòu)銷合同
- 家族遺產(chǎn)分配合同
- 借款擔(dān)保反擔(dān)保合同樣本
- 學(xué)校裝修合同案例
- 門面房屋買賣合同
- 太陽(yáng)能發(fā)電政策考核試卷
- 新材料在新能源領(lǐng)域的應(yīng)用考核試卷
- 中央2025年中國(guó)科協(xié)所屬單位招聘社會(huì)在職人員14人筆試歷年參考題庫(kù)附帶答案詳解-1
- 殯儀服務(wù)員職業(yè)技能鑒定考試題(附答案)
- 電動(dòng)葫蘆吊裝方案計(jì)劃
- 2025年山東電工電氣集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 造價(jià)咨詢服務(wù)方案進(jìn)度計(jì)劃安排及保證措施
- 2024年認(rèn)證行業(yè)法律法規(guī)及認(rèn)證基礎(chǔ)知識(shí) CCAA年度確認(rèn) 試題與答案
- 2024年濰坊工程職業(yè)學(xué)院高職單招(英語(yǔ)/數(shù)學(xué)/語(yǔ)文)筆試歷年參考題庫(kù)含答案解析
- JIS C9335-1-2014 家用和類似用途電器.安全性.第1部分:通用要求
- 甲溝炎治療的護(hù)理與預(yù)防
- 哈工大微電子工藝緒論01單晶硅
- 供養(yǎng)直系親屬有關(guān)文件
評(píng)論
0/150
提交評(píng)論