第3章 MCS-51單片機(jī)指令系統(tǒng)_第1頁
第3章 MCS-51單片機(jī)指令系統(tǒng)_第2頁
第3章 MCS-51單片機(jī)指令系統(tǒng)_第3頁
第3章 MCS-51單片機(jī)指令系統(tǒng)_第4頁
第3章 MCS-51單片機(jī)指令系統(tǒng)_第5頁
已閱讀5頁,還剩85頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

3.1MCS-51指令系統(tǒng)的分類、格式及一般說明3.2尋址方式3.3分類指令

3.4匯編語言程序設(shè)計(jì)第3章MCS-51單片機(jī)指令系統(tǒng)主要內(nèi)容:MCS-51單片機(jī)指令系統(tǒng)有如下特點(diǎn):〔1〕指令執(zhí)行時間快?!?〕指令短,約有一半的指令為單字節(jié)指令?!?〕用一條指令即可實(shí)現(xiàn)2個一字節(jié)的相乘或相除?!?〕具有豐富的位操作指令。〔5〕可直接用傳送指令實(shí)現(xiàn)端口的輸入輸出操作。3.1MCS-51指令系統(tǒng)的分類、格式及一般說明 3.1.1指令分類3.1.2指令格式3.1.3指令描述符號介紹返回本章首頁主要內(nèi)容:3.1.1指令分類 按指令功能,MCS-51指令系統(tǒng)分為數(shù)據(jù)傳遞與交換、算術(shù)運(yùn)算、邏輯運(yùn)算、程序轉(zhuǎn)移、布爾處理操作、CPU控制等6類。布爾處理操作類指令又稱位操作指令。返回本節(jié)3.1.2指令格式在MCS-51指令中,一般指令主要由操作碼、操作數(shù)組成。指令應(yīng)具有以下功能:〔1〕操作碼指明執(zhí)行什么性質(zhì)和類型的操作。例如,數(shù)的傳送、加法、減法等。〔2〕操作數(shù)指明操作的數(shù)本身或者是操作數(shù)所在的地址。〔3〕指定操作結(jié)果存放的地址。返回本節(jié) 3.1.3指令描述符號介紹Rn——當(dāng)前選中的存放器區(qū)中的8個工作存放器R0~R7〔n=0~7〕。Ri——當(dāng)前選中的存放器區(qū)中的2個工作存放器R0、R1〔i=0,1〕。direct—8位的內(nèi)部數(shù)據(jù)存儲器單元中的地址。#data——包含在指令中的8位常數(shù)。#data16——包含在指令中的16位常數(shù)。addr16——16位目的地址。addr11——11位目的地址。rel——8位帶符號的偏移字節(jié),簡稱偏移量。DPTR——數(shù)據(jù)指針,可用作16位地址存放器。bit——內(nèi)部RAM或?qū)S么娣牌髦械闹苯訉ぶ肺?。A——累加器。B——專用存放器,用于乘法和除法指令中。C——進(jìn)位標(biāo)志或進(jìn)位位,或布爾處理機(jī)中的累加器。@——間址存放器或基址存放器的前綴,如@Ri,@DPTR。/——位操作數(shù)的前綴,表示對該位操作數(shù)取反,如/bit?!痢瑑?nèi)RAM的直接地址或存放器。(×)——由×尋址的單元中的內(nèi)容?!^左邊的內(nèi)容被箭頭右邊的內(nèi)容所代替。返回本節(jié)3.2尋址方式 3.2.1立即尋址 3.2.2直接尋址3.2.3存放器尋址3.2.4存放器間接尋址3.2.5變址尋址 3.2.6相對尋址 3.2.7位尋址返回本章首頁主要內(nèi)容:3.2.1立即尋址 指令中直接給出操作數(shù)的尋址方式。立即操作數(shù)用前面加有#號的8位或16位數(shù)來表示。例如:MOV A,#60H ;A←#60HMOV DPTR,#3400H ;DPTR←#3400HMOV 30H,#40H ;30H單元←#40H上述三條指令執(zhí)行完后,累加器A中數(shù)據(jù)為立即數(shù)據(jù)60H,DPTR存放器中數(shù)據(jù)為3400H,30H單元中數(shù)據(jù)為立即數(shù)40H。返回本節(jié)3.2.2直接尋址 指令中直接給出操作數(shù)地址的尋址方式,能進(jìn)行直接尋址的存儲空間有SFR存放器和內(nèi)部數(shù)據(jù)RAM。例如: MOV PSW,#20H ;PSW←#20HPSW為直接尋址存放器的符號地址。MOV A,30H ;A←30H內(nèi)部RAM單元中的內(nèi)容30H為直接給出的內(nèi)部RAM的地址。返回本節(jié)3.2.3存放器尋址 以通用存放器的內(nèi)容為操作數(shù)的尋址方式。通用存放器指A、B、DPTR以及R0~R7、Cy。例如: CLR A ;A←0INC DPTR ;DPTR←DPTR+1ADD R5,#20H ;R5←#20H+R5返回本節(jié)3.2.4存放器間接尋址以存放器中內(nèi)容為地址,以該地址中內(nèi)容為操作數(shù)的尋址方式。間接尋址的存儲器空間包括內(nèi)部數(shù)據(jù)RAM和外部數(shù)據(jù)RAM。能用于存放器間接尋址的存放器有R0,R1,DPTR,SP。其中R0、R1必須是工作存放器組中的存放器。SP僅用于堆棧操作。例如: MOV@R0,A;指令操作過程示意圖如圖3-1所示。又如: MOVXA,@R1;A←指令操作過程示意圖如圖3-2所示。再如: MOVX@DPTR,A;指令操作過程示意圖如圖3-3所示。片內(nèi)RAM30HR034HA30H34H圖3-1MOV@R0,A間接尋址示意圖返回片外RAM45HA10H45H10HR1片外RAM2000HDPTR30HA2000H30H圖3-2MOVXA,@R1間接尋址示意圖圖3-3MOVX@DPTR,A間接尋址示意圖返回本節(jié)返回3.2.5變址尋址 變址尋址只能對程序存儲器中數(shù)據(jù)進(jìn)行操作。由于程序存儲器是只讀的,因此變址尋址只有讀操作而無寫操作,在指令符號上采用MOVC的形式〔如圖3-4所示〕。例如: MOVCA,@A+DPTR;A←〔A+DPTR〕又如: MOVCA,@A+PC;A←〔A+PC〕這條指令與上條指令不同的是,基址存放器是PC。 JMP @A+DPTR圖3-4MOVCA,@A+DPTR

變址尋址示意圖程序存儲器2000HDPTR64H(10H)A2010H64H10H2000H返回本節(jié)3.2.6相對尋址 以當(dāng)前程序計(jì)數(shù)器PC的內(nèi)容為根底,加上指令給出的一字節(jié)補(bǔ)碼數(shù)〔偏移量〕形成新的PC值的尋址方式。相對尋址用于修改PC值,主要用于實(shí)現(xiàn)程序的分支轉(zhuǎn)移。例如,SJMP08H;PC←PC+2+08H指令操作示意圖如圖3-5所示。程序存儲器(2000H)200AHSJMP200AH08H2000H+208HPC2000H圖3-52000H8008SJMP08H

相對尋址示意圖返回本節(jié)3.2.7位尋址位尋址只能對有位地址的單元作位尋址操作。位尋址其實(shí)是一種直接尋址方式,不過其地址是位地址。例如: SETB10H;將10H位置1假設(shè)22H單元中存放著數(shù)據(jù)40H,22H單元的D0位的位地址為10H,執(zhí)行上述指令后〔22H〕=41H。又如: MOV32H,C;32H←進(jìn)位位CORLC,32H;C←C∨32H返回本節(jié)3.2.8尋址空間尋址方式存儲空間(尋址空間)立即尋址程序存儲器直接尋址片內(nèi)RAM低128B和SFR區(qū)寄存器尋址R0~R7(工作寄存器區(qū)),A,B,Cy(位)DPTR寄存器間接尋址片內(nèi)RAM(00H~FFH)、片外RAM基址寄存器+變址寄存器的間接尋址程序存儲器位尋址片內(nèi)RAM區(qū)(20H~20F),SFR區(qū)(字節(jié)地址可被8整除的寄存器)相對尋址程序存儲器256B范圍(PC+rel)3.3分類指令 3.3.1數(shù)據(jù)傳送類指令3.3.2算術(shù)運(yùn)算類指令3.3.3邏輯運(yùn)算與循環(huán)類指令3.3.4程序轉(zhuǎn)移類指令3.3.5調(diào)用子程序及返回指令3.3.6空操作指令3.3.7位操作指令返回本章首頁3.3.1數(shù)據(jù)傳送類指令(28)數(shù)據(jù)傳送類指令共28條,是將源操作數(shù)送到目的操作數(shù)。指令執(zhí)行后,源操作數(shù)不變,目的操作數(shù)被源操作數(shù)取代。數(shù)據(jù)傳送類指令用到的助記符有MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH、POP8種。源操作數(shù)可采用存放器、存放器間接、直接、立即、變址5種尋址方式尋址,目的操作數(shù)可以采用存放器、存放器間接、直接尋址3種尋址方式。MCS-51單片機(jī)片內(nèi)數(shù)據(jù)傳送途徑如圖3-6所示。直接地址direct累加器A直接地址direct間接地址@Ri寄存器Rn立即數(shù)#data寄存器DPTR圖3-6MCS-51單片機(jī)片內(nèi)數(shù)據(jù)傳送圖1.以A為目的操作數(shù)MOVA,Rn ;A←RnMOVA,direct ;A←〔direct〕MOVA,@Ri ;A←〔Ri〕MOVA,#data ;A←#data2.以Rn為目的操作數(shù)MOVRn,A ;Rn←AMOVRn,direct ;Rn←〔direct〕MOVRn,#data ;Rn←#data3.以直接地址為目的操作數(shù)MOVdirect,A ;direct←(A)MOVdirect1,direct2 ;direct1←(direct2)MOVdirect,#data ;direct←#dataMOVdirect,@Ri ;direct←((Ri))MOVdirect,Rn ;direct←(Rn)4.以間接地址為目的操作數(shù)MOV@Ri,A ;〔Ri〕←AMOV@Ri,direct ;〔Ri〕←〔direct〕MOV@Ri,#data ;〔Ri〕←#data例如:設(shè)〔30H〕=6FH,R1=40H,執(zhí)行MOV@R1,30H后,30H單元中數(shù)據(jù)取出送入R1間接尋址的40H單元,〔40H〕=6FH。5.以DPTR為目的操作數(shù)MOVDPTR,#data16;DPTR←#data16例如執(zhí)行MOVDPTR,#2000H后,〔DPTR〕=2000H?!纠?.1】MOVA,#10HMOVR0,#20HMOVR1,AMOV20H,#00HMOVDPTR,#2000HMOV40H,@R0MOV@R1,40H程序執(zhí)行后的結(jié)果:A=10H,R0=20H,R1=10H,〔40H〕=00H〔10H〕=00H,〔20H〕=00H,DPTR=2000H6.訪問外部數(shù)據(jù)RAMMOVXA,@DPTR ;A←〔DPTR〕MOVX@DPTR,A ;〔DPTR〕←AMOVXA,@Ri ;A←〔Ri〕MOVX@Ri,A ;〔Ri〕←A片外RAM區(qū)64KB〔0000H~0FFFFH〕只能與累加器A互傳數(shù)據(jù)7.讀程序存儲器MOVCA,@A+DPTR ;A←〔A+DPTR〕MOVCA,@A+PC ;A←〔A+PC〕例如A=30H,DPTR=3000H,程序存儲器單元〔3030H〕=50H,執(zhí)行MOVCA,@A+DPTR后,A=50H?!纠?.2】查表求0~9的平方值。

ORG1000HSTART:MOVDPTR,#2000H

MOVA,#NUMB;NUMB=0~9MOVCA,@A+DPTRSJMP$2000H:DB0,1,4,9,16,25,36,49,64,81例3.3查表將累加器A中的0~9的二進(jìn)制數(shù)轉(zhuǎn)換成ASCII碼。

ORG2000HSTART:MOVA,#NUMB;NUMB=0~9 ADDA,#02H;修正地址 MOVCA,@A+PC SJMP$TAB:DB‘0’,‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’8.?dāng)?shù)據(jù)交換l

字節(jié)交換XCHA,Rn ;A<=>RnXCHA,direct ;A<=>〔direct〕XCHA,@Ri ;A<=>〔Ri〕l

半字節(jié)交換XCHDA,@Ri ;A0~3<=>〔Ri〕0~3SWAPA ;A0~3<=>A4~79.堆棧操作所謂堆棧是在片內(nèi)RAM中按“先進(jìn)后出,后進(jìn)先出〞原那么設(shè)置的專用存儲區(qū)。數(shù)據(jù)的進(jìn)棧出棧由指針SP統(tǒng)一管理。堆棧的操作有如下兩條專用指令:PUSHdirect;SP←〔SP+1〕,〔SP〕←〔direct〕POP direct ;〔direct〕←〔SP〕,SP←SP-1PUSH是進(jìn)?!不蚍Q為壓入操作〕指令。指令執(zhí)行過程如圖3-7所示。POP是出棧〔或稱為彈出操作〕指令。指令執(zhí)行過程如圖3-8所示。片內(nèi)RAM30H11H10HSP××片內(nèi)RAM50H40H11H10HSP××40H30H片內(nèi)RAM50H40H11H10H50H××SP30H片內(nèi)RAM40H11H10H34H××SP30H34H34H××××執(zhí)行前執(zhí)行前執(zhí)行前PUSH指令后執(zhí)行POP指令后圖3-7指令PUSH操作示意圖圖3-8指令POP操作示意圖【3.4】將片內(nèi)RAM30H單元與40H單元中的內(nèi)容互換。方法1〔直接地址傳送法〕:MOV 31H,30HMOV 30H,40HMOV 40H,31HSJMP $方法2〔間接地址傳送法〕:MOV R0,#40HMOV R1,#30HMOV A,@R0MOV B,@R1MOV @R1,AMOV @R0,BSJMP $方法3〔字節(jié)交換傳送法〕:MOV A,30HXCH A,40HMOV 30H,ASJMP $方法4〔堆棧傳送法〕:PUSH 30HPUSH 40HPOP 30HPOP 40HSJMP $返回本節(jié)3.3.2算術(shù)運(yùn)算類指令(24) 1.加法指令(13)1).不帶進(jìn)位加指令 ADDA,Rn ;A←(A)+(Rn) ADDA,direct ;A←(A)+〔direct〕 ADDA,@Ri ;A←(A)+〔(Ri)〕 ADDA,#data ;A←(A)+#data標(biāo)志位:C、AC、OV、P2).帶進(jìn)位加指令 ADDCA,Rn ;A←(A)+(Rn)+C ADDCA,direct ;A←(A)+〔direct〕+C ADDCA,@Ri ;A←(A)+〔(Ri)〕+C ADDCA,#data ;A←(A)+#data+C

例:設(shè)A=20H,R0=21H,C=1,執(zhí)行指令 ADDCA,R0后, A=42H。【例3.5】試把存放在R1R2和R3R4中的兩個16位數(shù)相加,結(jié)果存于R5R6中。解:參考程序如下:MOV A,R2 ;取第一個數(shù)的低8位ADD A,R4 ;兩數(shù)的低8位相加MOV R6,A ;保存和的低8位MOV A,R1;取第一個數(shù)的高8位ADDC A,R3;兩數(shù)的高8位相加,并把 低8位相加時的進(jìn)位位加進(jìn)來MOV R5,A;把相加的高8位存入R5存放器中SJMP$3).加1指令 INCA ;A←(A)+1 INCRn ;Rn←(Rn)+1 INCdirect ;direct←〔direct〕+1 INC@Ri ;〔Ri〕←〔(Ri)〕+1 INCDPTR ;DPTR←(DPTR)+1例如:〔30H〕=22H,執(zhí)行INC30H后,〔30H〕=23H。2.減法指令(8)1〕.帶借位減指令 SUBBA,Rn ;A←(A)–(Rn)-C SUBBA,direct ;A←(A)-〔direct〕-C SUBBA,@Ri ;A←(A)-〔(Ri)〕-C SUBBA,#data ;A←(A)-#data–C例:設(shè)A=39H,R0=20H,〔20H〕=32H,C=1,執(zhí)行指令SUBBA,@R0后, A=06H。2〕.減1指令 DECA ;A←(A)-1 DECRn ;Rn←(Rn)-1 DECdirect ;direct←〔direct〕-1 DEC@Ri ;〔Ri〕←〔(Ri)〕-1例如,R0=30H,〔30H〕=22H,執(zhí)行 DEC @R0后, 〔30H〕=21H。3.十進(jìn)制調(diào)整指令 DAA;把A中按二進(jìn)制相加的結(jié)果調(diào)整成按BCD碼相加的結(jié)果例:A=65BCD,B=78BCD,C=0,執(zhí)行以下語句 ADDA,B DA A 后, A=43BCD,C=1。 設(shè)被加數(shù)存于內(nèi)部RAM地址為32H、31H、30H單元中,加數(shù)存于地址為42H、41H、40H單元中,和數(shù)存于地址52H、51H、50H單元中,加數(shù)、被加數(shù)已按壓縮型BCD碼存放于相應(yīng)單元中。 試編制6位BCD碼加法程序,并考慮產(chǎn)生溢出時轉(zhuǎn)符號地址OVER處。兩個6位壓縮BCD碼相加求和難點(diǎn):BCD碼減法運(yùn)算的實(shí)現(xiàn)

1實(shí)現(xiàn)方法:2BCD碼減數(shù)的補(bǔ)數(shù)求法:例3.6設(shè)A=78H,R1=56H,求BCD碼減法:A-R1;解:先求-R1的BCD碼補(bǔ)數(shù),即9AH-56H=44H,再求加法A+[-R1]補(bǔ)數(shù);操作過程如下: 01111000〔78H〕 +01000100〔44H〕10111100〔BCH〕+01100110〔66H〕100100010〔122H〕得到的結(jié)果為:78H-56H=22H4.乘法指令 MULAB

;BA←A×BA和B中各存放一個8位無符號數(shù),指令執(zhí)行后,16位乘積的高8位在B中,低8位存A中。例: 設(shè)A=30H,B=60H,執(zhí)行MULAB后,

A=00H,B=12H。重點(diǎn):多字節(jié)乘操作算法〔雙字節(jié)〕3.6利用MUL指令實(shí)現(xiàn)雙字節(jié)乘操作:4054H×2005H,其中R1=40H,R0=54H,R3=20H,R2=05H,結(jié)果由低到高存放在R4~R7中。解:程序?qū)崿F(xiàn)的算法: R1 R0 × R3 R2 (R0R2)H(R0R2)L (R1R2)H (R1R2)L (R0R3)H (R0R3)L(R1R3)H (R1R3)L(R1R3)H((R1R3)L+(R0R3)H+(R1R2)H)((R0R3)L+(R1R2)L+(R0R2)H)(R0R2)L

(R7)(R6)(R5)(R4)5.除法指令 DIVAB

;A÷B→商在A中,余數(shù)在B中

例3.7利用DIV指令將工作存放器R7單元的8位二進(jìn)制數(shù)轉(zhuǎn)換為3位BCD碼。解: MOVB,#64H ;B←除數(shù)100 MOVA,R7 ;A←被除數(shù) DIVAB ;A÷B,A←商〔百位數(shù)BCD碼〕,B←余數(shù) MOVR6,A ;R6←將百位數(shù)BCD碼 MOVA,B ;A←余數(shù)作被除數(shù) MOVB,#0AH ;B←除數(shù)10 DIVAB ;A÷B,A←商〔十位數(shù)BCD碼〕, ;B←余數(shù)〔個位BCD碼〕 SWAPA ;十位BCD碼調(diào)整到A中高4位 ADDA,B ;A中壓縮成2位BCD碼 MOVR7,A ;R7←十位、個位BCD碼返回本節(jié)思考題1DAA指令的作用是什么?怎樣使用?2試用三種方法將累加器A中無符號數(shù)乘2。3.3.3邏輯運(yùn)算與循環(huán)類指令(20+4)1.“與〞操作指令2.“或〞操作指令3.“異或〞操作指令4.求反與去除指令5.循環(huán)指令返回本節(jié)3.3.4程序轉(zhuǎn)移類指令 1.無條件轉(zhuǎn)移指令(4)l

絕對〔短〕轉(zhuǎn)移指令A(yù)JMP addr11 ;PC10~0←addr11l

長轉(zhuǎn)移指令LJMP addr16 ;PC←addr16l

短〔相對〕轉(zhuǎn)移指令SJMP rel ;PC←PC+2+rell

間接轉(zhuǎn)移指令JMP @A+DPTR ;PC←A+DPTR2.條件轉(zhuǎn)移指令(8)l

累加器為零〔非零〕轉(zhuǎn)移指令(2)l

減1非零轉(zhuǎn)移指令(2)l

兩數(shù)不等轉(zhuǎn)移指令(4)3.3.5調(diào)用子程序及返回指令(4)1.調(diào)用子程序指令LCALLaddr16;PC←PC+3,SP←SP+1,〔SP〕←PC7~10;SP←SP+1,〔SP〕←PC15~8,PC←addr16ACALLaddr11;PC←PC+2,SP←SP+1,〔SP〕←PC7~0;SP←SP+1,〔SP〕←PC15~8,PC10~0←addr112.返回指令RET ;PC15~8←〔SP〕,SP←SP-1 ;PC7~0←〔SP〕,SP←SP-1RETI;PC15~8←〔SP〕,SP←SP-1 ;PC7~0←〔SP〕,SP←SP-1返回本節(jié)3.3.6空操作指令(1) NOP;PC←PC+1這是一條單字節(jié)指令。執(zhí)行時,不作任何操作〔即空操作〕,僅將程序計(jì)數(shù)器PC的內(nèi)容加1,使CPU指向下一條指令繼續(xù)執(zhí)行程序。這條指令常用來產(chǎn)生一個機(jī)器周期的時間延遲。返回本節(jié)3.3.7位操作指令(17) 1.位數(shù)據(jù)傳送指令 MOV C,bit ;C←〔bit〕 MOV bit,C ;bit←C2.位狀態(tài)修改指令 CLR C ;C←0 CLR bit ;〔bit〕←0 SETB C ;C←1 SETB bit ;〔bit〕←13.位邏輯運(yùn)算指令A(yù)NL C,bit ;C←C∧〔bit〕ANL C,/bit ;C←C∧〔/bit〕ORL C,bit ;C←C∨〔bit〕ORL C,/bit ;C←C∨〔/bit〕CPL CCPL bit4.位轉(zhuǎn)移指令JC rel ;假設(shè)C=1,那么轉(zhuǎn)移〔PC←PC+2+rel〕;否那么程序順序執(zhí)行JNC rel ;假設(shè)C=0,那么轉(zhuǎn)移〔PC←PC+2+rel〕;否那么程序順序執(zhí)JB bit,rel ;假設(shè)(bit)=1,那么轉(zhuǎn)移〔PC←PC+3+rel〕;否那么程序順序執(zhí)行JNB bit,rel ;假設(shè)(bit)=0,那么轉(zhuǎn)移〔PC←PC+3+rel〕;否那么程序順序執(zhí)行JBC bit,rel ;假設(shè)(bit)=1,那么PC←PC+3+rel,〔bit〕←0;否那么程序順序執(zhí)行功能:分別檢測指定位是1還是0,假設(shè)條件符合,那么CPU轉(zhuǎn)向指定的目標(biāo)地址去執(zhí)行程序;否那么,順序執(zhí)行下條指令。返回本節(jié)3.4匯編語言程序設(shè)計(jì)匯編語言格式與偽指令1定義在匯編時不產(chǎn)生機(jī)器指令代碼,不影響程序的執(zhí)行,僅產(chǎn)生供匯編用的某些指令。2常用的根本偽指令 1〕程序起始地址偽指令---ORG 格式:ORG〈表達(dá)式〉ORG0100H START:MOVA,#00H;從START開始的目標(biāo)程 序,其起始地址由0100H開始 2〕數(shù)據(jù)存儲說明偽指令返回本章首頁〔1〕定義字節(jié)數(shù)據(jù)偽指令-DB 格式:〈標(biāo)號:〉DB〈表達(dá)式〉 HERE:DB56H;將數(shù)據(jù)56H存入HERE指示的存儲單元中 DB0A7H;將0A7H存入HERE+1的存儲單元中〔2〕定義字?jǐn)?shù)據(jù)偽指令—DW格式:〈標(biāo)號:〉DW〈表達(dá)式或表達(dá)式串〉 ABC:DW1234H,4567H,0A5CH;12H存入ABC指示的單 元,34H存入〔ABC〕+1單元中,按此;順序?qū)⒑罄m(xù)字節(jié) 存入對應(yīng)存儲單元中?!?〕存儲區(qū)說明偽指令---DS格式:〈標(biāo)號:〉DS〈表達(dá)式〉 BASE:DS0100H;程序存儲器從標(biāo)號BASE為首址開始,空 出256個存儲單元,以備另用。3)為標(biāo)號賦值偽指令1)

標(biāo)號等值偽指令–EQU格式:〈標(biāo)號:〉EQU〈表達(dá)式〉TTY:EQU1080H;標(biāo)號TTY等值于1080H2)定義標(biāo)號值偽指令---DL格式:〈標(biāo)號:〉DL〈表達(dá)式〉COUNT1:DL2300H;定義COUNT1=2300HCOUNT2:DLCOUNT1+1;COUNT2=2300H+1注意:DL可對同一源程序中對同一標(biāo)號屢次賦值,即可更改已定義的標(biāo)號值;而用EQU那么只能給標(biāo)號一次賦值,而后整個源程序中再不能更改。4〕匯編結(jié)束偽指令—END一個源程序只能而且必須有一個END指令,設(shè)置在整個程序的結(jié)束處。它有兩種格式〈標(biāo)號:〉END〈表達(dá)式〉〈標(biāo)號:〉END有無表達(dá)式的區(qū)別在于前者匯編結(jié)束后立即轉(zhuǎn)向由表達(dá)式指定的開始地址開始執(zhí)行程序。注意:如果END語句出現(xiàn)在中間,那么匯編程序?qū)⒉粎R編END后面的語句。

SS1簡單程序設(shè)計(jì)SS2分支程序設(shè)計(jì)SS3循環(huán)程序設(shè)計(jì)SS4子程序設(shè)計(jì)5MCS—51源程序的基本格式SS3.4.2MCS-51單片機(jī)匯編語言程序設(shè)計(jì)返回本章首頁1簡單程序設(shè)計(jì)例1:拆字程序段將一個字節(jié)內(nèi)的兩個BCD碼十進(jìn)制數(shù)拆開并變成相應(yīng)的ASCII碼,存入兩個RAM單元中。設(shè)該BCD碼已存放在內(nèi)部RAM的30H單元中,變換后的ASCII碼分別存放在31H和32H單元中,且高位BCD碼的ASCII碼存于31H單元。數(shù)字0~9的ASCII碼為30H~39H,完成拆字轉(zhuǎn)換只需將一個字節(jié)的兩個BCD碼拆開放在另兩個單元的低4位,并在其高位賦以0011即可。程序如下所示:MOV R0,#32H;將32H單元地址送R0MOV@R0,#00H;32H單元清0MOVA,30H;兩個BCD碼送AXCHDA,@R0;將低位BCD碼送32H單元ORL32H,#30H;完成低位BCD碼的轉(zhuǎn)換SWAPA;將高位BCD碼調(diào)到低位ORLA,#30H;完成高位BCD碼的轉(zhuǎn)換MOV31H,A;將高位BCD碼的ASCII碼存入31H單元返回本節(jié)2分支程序設(shè)計(jì)例2:兩個無符號數(shù)比較大小。設(shè)存儲單元ST1和ST2中存放兩個無符號二進(jìn)制數(shù),找出其中的大數(shù)存入ST3單元中。程序流程圖如以下圖所示:開始ST1指針(指針)A指針+1指針A>(指針)?(指針)A指針+1指針A(指針)結(jié)束NY返回本節(jié)3循環(huán)程序設(shè)計(jì)1)單重循環(huán)結(jié)構(gòu)程序2)多重循環(huán)結(jié)構(gòu)程序采用循環(huán)程序進(jìn)行軟件延時,一般可實(shí)現(xiàn)任意延時要求,但需犧牲CPU工作。返回本節(jié)例3.多重循環(huán)程序設(shè)計(jì)。試設(shè)計(jì)延時1秒鐘的程序。程序如下: ORG2000H MOVR5,#2LOP3: MOVR6,#250LOP2: MOVR7,#250LOP1: NOP NOP DJNZR7,LOP1 DJNZR6,LOP2 DJNZR5,LOP3 RET4子程序結(jié)構(gòu)設(shè)計(jì)子程序及其調(diào)用1、必須標(biāo)明子程序的入口地址,又稱首地址,以便于主程序調(diào)用。2、必須以返回指令RET結(jié)束子程序。1、傳遞參數(shù)。2、傳遞地址。主程序的現(xiàn)場保護(hù)與恢復(fù) 1、調(diào)用前保護(hù),返回后恢復(fù) 2、調(diào)用后保護(hù),返回前恢復(fù)。返回本節(jié)5MCS—51源程序的根本格式由于不同類型的單片機(jī)其有關(guān)資源的地址分配不同,故而其對應(yīng)的源程序格式也各不相同。MCS—51系列單片機(jī)的中斷矢量地址被分配在程序存儲器的0003H~0033H區(qū)域,而源程序的起始地址必須從0000H單元開始,因而源程序的首條指令應(yīng)是跳轉(zhuǎn)指令,跳過中斷矢量地址區(qū),轉(zhuǎn)入主程序。這是由MCS—51系列單片機(jī)的硬件結(jié)構(gòu)所規(guī)定的。在MCS—51系列的指令系統(tǒng)中,無程序運(yùn)行指令,系統(tǒng)復(fù)位后立即開始執(zhí)行應(yīng)用系統(tǒng)程序,由于復(fù)位后的程序存儲器指針(PC)值為0000H,所以程序必定從0000H單元開始執(zhí)行。所以程序存儲器的0000H~0002H三個單元專門用于安排一條跳轉(zhuǎn)指令,從而滿足程序既從0000H存儲單元開始執(zhí)行,又跳過中斷矢量地址段轉(zhuǎn)去執(zhí)行應(yīng)用系統(tǒng)的主程序。在中斷矢量地址段,由于分配給每個中斷效勞程序的地址空間只有8個字節(jié)的存儲單元,一般是不夠用的,實(shí)際應(yīng)用中也常安排一條跳轉(zhuǎn)指令,跳轉(zhuǎn)到對應(yīng)的中斷效勞程序去執(zhí)行。所以,一般中斷效勞程序總是安排在主程序后面的高地址區(qū)。此外,一個應(yīng)用系統(tǒng)軟件,總有局部子程序供主程序調(diào)用,一般也都安排在主程序地址空間之外空余的地址段。有些應(yīng)用系統(tǒng)軟件,常有固定參數(shù)需存放在程序存儲器中,例如LED顯示編碼等,以供主程序或子程序查用。一般,這局部均安排在主要程序之后的高地址段。因此,在一個MCS—51系列應(yīng)用系統(tǒng)源程序,其根本地址空間可劃分為:中斷矢量空間段;主程序地址空間段;中斷效勞程序和子程序地址空間段;固定常數(shù)地址空間段四局部。除中斷矢量地址空間段固定外,其余均應(yīng)視程序量分配地址空間,其順序也不受此限。可見,任一個MCS—51系列應(yīng)用軟件源程序的根本格式總是由這四局部組成。···

ORG0000H AJMPSTART;轉(zhuǎn)向主程序 ORG0003H LJMP INTIE0;轉(zhuǎn)向中斷0服務(wù)子程序 ORG000BH LJMP INTTF0;轉(zhuǎn)向定時器0中斷服務(wù)程序

ORG0050HSTART:MOVA,#00H;主程序從0050H單元開始 MOVR1,#7FH MOVR0,#00HLOOP0:MOV@R0,A;內(nèi)部RAM從00~7FH單元清0;可根據(jù)實(shí)際需要而設(shè)置程序

INC R0;

DJNZ R1,LOOP0;;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論