第3章單片機指令系統(tǒng)教材_第1頁
第3章單片機指令系統(tǒng)教材_第2頁
第3章單片機指令系統(tǒng)教材_第3頁
第3章單片機指令系統(tǒng)教材_第4頁
第3章單片機指令系統(tǒng)教材_第5頁
已閱讀5頁,還剩52頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第三章指令系統(tǒng)51系列單片機指令集含有111條指令每條指令在執(zhí)行時要花去一定的時間,以機器周期為單位。按指令執(zhí)行時間分類:單周期(64條);雙周期(45條);4周期(2條)按指令的功能分類,可分為5大類:數(shù)據(jù)傳送類(28條);算術(shù)運算類(24條)邏輯運算及移位類(25條);控制轉(zhuǎn)移類(17條)位操作類(17條)每條指令在程序存儲器ROM中占據(jù)一定的空間,以字節(jié)為單位。按指令所占字節(jié)數(shù)分類:單字節(jié)(49條);雙字節(jié)(45條);3字節(jié)(17條)MCS-51單片機指令系統(tǒng)有如下特點:(1)指令執(zhí)行時間快。(2)指令短,約有一半的指令為單字節(jié)指令。(3)用一條指令即可實現(xiàn)2個一字節(jié)的相乘或相除。(4)具有豐富的位操作指令。(5)可直接用傳送指令實現(xiàn)端口的輸入輸出操作。指令格式在MCS-51指令中,一般指令主要由操作碼、操作數(shù)組成。指令應(yīng)具有以下功能:(1)操作碼指明執(zhí)行什么性質(zhì)和類型的操作。例如,數(shù)的傳送、加法、減法等。(2)操作數(shù)指明操作的數(shù)本身或者是操作數(shù)所在的地址。(3)指定操作結(jié)果存放的地址。單字節(jié)指令操作碼和操作數(shù)在同一個字節(jié)中。雙字節(jié)指令前一個字節(jié)為操作碼,后一個字節(jié)為操作數(shù)。三字節(jié)指令前一個字節(jié)為操作碼,后兩個字節(jié)為操作數(shù)。

指令描述符號介紹Rn——當前選中的寄存器區(qū)中的8個工作寄存器

R0~R7(n=0~7)。Ri——當前選中的寄存器區(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眉拇嫫髦械闹苯訉ぶ肺弧——累加器。B——專用寄存器,用于乘法和除法指令中。C——進位標志或進位位,或布爾處理機中的累加器。@——間址寄存器或基址寄存器的前綴,如@Ri,@DPTR。

/——位操作數(shù)的前綴,表示對該位數(shù)操作取反,如/bit。(×)——片內(nèi)RAM的直接地址。((×))——由×尋址的單元中的內(nèi)容。

——箭頭左邊的內(nèi)容被箭頭右邊的內(nèi)容所代替。51單片機指令的尋址方式立即尋址直接尋址寄存器尋址寄存器間接尋址變址尋址(基址寄存器+變址寄存器間接尋址)相對尋址位尋址尋址方式:指令按地址獲得操作數(shù)的方式七種尋址方式,一條指令可能含多種尋址方式。立即尋址

指令中直接給出操作數(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。注意:符號“#”表明其后跟的是立即數(shù),

立即數(shù)——就是數(shù)字量本身。直接尋址

指令中直接給出操作數(shù)地址的尋址方式,能進行直接尋址的存儲空間有SFR寄存器和內(nèi)部數(shù)據(jù)RAM。例如:MOVR1,1FH;R1←(1FH)

MOV30H,4AH;30H←(4AH)在本單片機中規(guī)定:訪問特殊功能寄存器SFR只能采用直接尋址方式。例如:MOVA,SP;A←(SP)MOVA,81H;A←(SP)MOVP1,#5AH;P1←#5AHMOV90H,#5AH;P1←#5AHMOVB,30H;B←(30H)相同相同寄存器尋址

以通用寄存器的內(nèi)容為操作數(shù)的尋址方式。通用寄存器指A、B、DPTR以及R0~R7

。從寄存器中讀取操作數(shù)或存放操作數(shù)進寄存器例如:CLR A ;A←0INC DPTR ;DPTR←(DPTR)+1ADD R5,#20H ;R5←(R5)+#20H

MOVA,B;

A←(B)

MOV30H,R0;30H←(R0)

MOVA,R1;A←(R1)寄存器間接尋址

寄存器中的內(nèi)容是一個地址,由該地址單元尋址到所需的操作數(shù)。間接尋址的存儲器空間包括內(nèi)部數(shù)據(jù)RAM和外部數(shù)據(jù)RAM。能用于寄存器間接尋址的寄存器有R0,R1,

DPTR,SP。其中R0、R1必須是工作寄存器組中的寄存器。SP僅用于堆棧操作。注意:1)“間接”表示某寄存器中的“內(nèi)容”只是一個“單元地址”,這個地址單元中存放的數(shù)據(jù)才是要找的“操作數(shù)”。2)符號“@”表示“在…”,其含義與讀音皆同“at”。例如:MOV@R0,A;(R0)←(A)

其指令操作過程示意圖如圖3-1所示。又如:MOVXA,@R1;A←外部RAM((P2R1))

其指令操作過程示意圖如圖3-2所示。再如:MOVX@DPTR,A;外部RAM(DPTR)←(A)

其指令操作過程示意圖如圖3-3所示。

片內(nèi)RAM30HR034HA30H34H圖3-1MOV@R0,A間接尋址示意圖片外RAM34HP245HA3410H45H10HR1片外RAM2000HDPTR30HA2000H30H圖3-2MOVXA,@R1間接尋址示意圖

圖3-3MOVX@DPTR,A間接尋址示意圖變址尋址

變址尋址只能對程序存儲器中數(shù)據(jù)進行操作。由于程序存儲器是只讀的,因此變址尋址只有讀操作而無寫操作,在指令符號上采用MOVC的形式。例如:MOVCA,@A+DPTR;A←((A)+(DPTR))[設(shè):A中已存有#10H,DPTR中已存有#2000H]操作:將10H+2000H=2010H單元中的數(shù)放進累加器A又如MOVCA,@A+PC;A←((A)+(PC))

這條指令與上條指令不同的是,基址寄存器是PC。圖3-4變址尋址示意圖程序存儲器2000HDPTR64H(10H)A2010H64H10H2000H相對尋址

以當前程序計數(shù)器PC的內(nèi)容為基礎(chǔ),加上指令給出的一字節(jié)補碼數(shù)(偏移量)形成新的PC值的尋址方式。相對尋址用于修改PC值,主要用于實現(xiàn)程序的分支轉(zhuǎn)移。

SJMPrel

操作:跳轉(zhuǎn)到的目的地址=當前16位PC值+rel

注意:1)“當前PC值”指程序中下一條指令所在的首地址,是一個16位數(shù);2)符號“rel”表示“偏移量”,是一個帶符號的單字節(jié)數(shù),范圍是:-128—+127(80H—7FH),程序存儲器(2000H)200AHSJMP200AH08H2000H+208HPC2000H例如,SJMP08H;PC←(PC)+2+08H

圖3-5相對尋址示意圖位尋址位尋址只能對有位地址的單元作位尋址操作。位尋址其實是一種直接尋址方式,不過其地址是位地址。指令中直接給出了操作數(shù)所在的位地址。例如:SETB10H;將10H位置1若22H單元中存放著數(shù)據(jù)40H,22H單元的D0位的位地址為10H,執(zhí)行上述指令后(22H)=41H。又如:MOV32H,C;32H←(C)ORLC,32H;C←(C)∨(32H)分類指令

數(shù)據(jù)傳送類指令算術(shù)運算類指令邏輯運算與循環(huán)類指令程序轉(zhuǎn)移類指令調(diào)用子程序及返回指令位操作指令空操作指令數(shù)據(jù)傳送類指令數(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單片機片內(nèi)數(shù)據(jù)傳送途徑如圖3-6所示。直接地址direct累加器A直接地址direct間接地址@Ri寄存器Rn立即數(shù)#data寄存器DPTR圖3-6MCS-51單片機片內(nèi)數(shù)據(jù)傳送圖1.以A為目的操作數(shù)MOVA,Rn

;A←(Rn)MOVA,direct;A←(direct)MOVA,@Ri

;A←((Ri))MOVA,#data;A←#data例:MOVA,R1 MOVA,10HMOVA,@R1 MOVA,#30H2.以Rn為目的操作數(shù)MOVRn,A ;Rn←(A)MOVRn,direct;Rn←(direct)MOVRn,#data ;Rn←#data例:MOVR1,A MOVR1,10HMOVR1,#10H3.以直接地址為目的操作數(shù)MOVdirect,A;

direct←(A)MOVdirect,Rn

;direct←(

Rn

)MOVdirect1,direct2;direct1←(direct2)MOVdirect,@Ri;

direct←(

(Ri))MOVdirect,#data;

direct←#data4.以間接地址為目的操作數(shù)MOV@Ri,A ;(Ri)←(A)MOV@Ri,direct ;(Ri)←(direct)MOV@Ri,#data ;(Ri)←#data例如:設(shè)(30H)=6FH,R1=40H,執(zhí)行MOV@R1,30H后,30H單元中數(shù)據(jù)取出6FH送入R1間接尋址的40H單元,(40H)=6FH。5.以DPTR為目的操作數(shù)MOVDPTR,#data16;DPTR←#data16例如執(zhí)行MOVDPTR,#2000H后,(DPTR)=2000H。6.訪問外部數(shù)據(jù)RAM

MOVXA,@DPTR ;A←((DPTR))MOVX@DPTR,A ;(DPTR)←(A)MOVXA,@Ri

;A←((P2Ri))MOVX@Ri,A ;(P2Ri)←(A)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。8.數(shù)據(jù)交換l

字節(jié)交換XCHA,Rn

;(A)<=>(Rn)XCHA,direct ;(A)<=>(direct)XCHA,@Ri

;(A)<=>((Ri))l

半字節(jié)交換XCHDA,@Ri

;(A)0~3<=>((Ri))0~3SWAPA ;(A)0~3<=>(A)4~79.堆棧操作所謂堆棧是在片內(nèi)RAM中按“先進后出,后進先出”原則設(shè)置的專用存儲區(qū)。數(shù)據(jù)的進棧出棧由指針SP統(tǒng)一管理。堆棧的操作有如下兩條專用指令:

PUSHdirect;SP←(SP)+1,(SP)←(direct)

POP direct;direct←(SP),SP←(SP)-1PUSH是進棧(或稱為壓入操作)指令。片內(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.1】將片內(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 $算術(shù)運算類指令

1.加法指令A(yù)DDA,Rn

;A←(A)+(Rn)ADDA,direct ;A←(A)+(direct)ADDA,@Ri

;A←(A)+((Ri))ADDA,#data;A←(A)+#data2.帶進位加指令A(yù)DDCA,Rn

;A←(A)+(Rn)+(C)ADDCA,direct;A←(A)+(direct)+(C)ADDCA,@Ri

;A←(A)+((Ri))+(C)ADDCA,#data;A←(A)+#data+(C)C為來自PSW狀態(tài)寄存器中的進位位C。例如,設(shè)A=20H,R0=21H,C=1,執(zhí)行指令A(yù)DDC

A,R0后,A=42H。3.帶借位減指令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。4.乘法指令MULA,B ;BA←(A)×(B)A和B中各存放一個8位無符號數(shù),指令執(zhí)行后,16位乘積的高8位在B中,低8位存A中。例如,A=30H,B=60H,執(zhí)行MULAB后,A=00H,B=12H。

5.除法指令DIVA,B;(A)÷(B)→商在A中,余數(shù)在B中

A和B中各存放一個8位無符號數(shù),A放被除數(shù),B放除數(shù)。指令執(zhí)行后,A中存放商,B中存入余數(shù)。若B=00H,則指令執(zhí)行后OV=1,A與B不變。例如,A=30H,B=07H,執(zhí)行DIVAB后,

A=06H,B=06H。6.加1指令I(lǐng)NCA ;A←(A)+1INCRn

;Rn←(Rn)+1INCdirect;direct←(direct)+1INC@Ri

;(Ri)←((Ri))+1INCDPTR;DPTR←(DPTR)+1例如,(30H)=22H,執(zhí)行INC30H后,(30H)=23H。7.減1指令DECA ;A←(A)-1DECRn

;Rn←(Rn)-1DECdirect ;direct←(direct)-1DEC@Ri

;(Ri)←((Ri))-1例如,R0=30H,(30H)=22H,執(zhí)行DEC@R0后,(30H)=21H。8.十進制調(diào)整指令DAA

;把A中按二進制相加的結(jié)果調(diào)整成按BCD碼相加的結(jié)果。例如,A=65BCD,B=78BCD,C=0,執(zhí)行下列語句ADD A,BDA A后,A=43BCD,C=1?!纠?.2】試把存放在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位相加時的進位位加進來

MOV R5,A ;把相加的高8位存入

R5寄存器中

SJMP$1.“與”操作指令2.“或”操作指令3.“異或”操作指令4.求反與清除指令5.移位指令邏輯運算類指令邏輯與(ANL),邏輯或(ORL),邏輯異或(XRL):累加器清零/取反操作(CLR,CPL——2條)CLRA——對累加器清零1Byte1個TmCPLA——對累加器按位取非1Byte1個Tm指令形式ByteTmANL(ORL,XRL)direct,

A21ANL(ORL,XRL)direct,#data32ANL(ORL,XRL)A,#data21ANL(ORL,XRL)A,direct21ANL(ORL,XRL)A,

@Ri11ANL(ORL,XRL)A,

Rn11邏輯運算指令的常見用法邏輯與ANL用于清0或者保留某些位:例:ANLA,#0FH;則(A)=0AH(已知累加器A中已存有數(shù):9AH)邏輯或ORL用于置1或者保留某些位:例:ORLA,#0FH;則(A)=9FH邏輯異或XRL用于取反或者保留某些位:例:XRLA,#0FH;則(A)=95H(A)

10011010#0FH

0000111195H

10010101邏輯運算及移位類指令累加器移位操作:(RL,RLC,RR,RRC——4條)RLA左環(huán)移累加器A累加器ACy累加器ACy累加器ARRCA帶進位位右環(huán)移RRA右環(huán)移RLCA帶進位位左環(huán)移控制轉(zhuǎn)移類指令無條件轉(zhuǎn)移:LJMP,AJMP,SJMP,JMP——4條LJMPaddr16長跳轉(zhuǎn)指令

——可在64K范圍內(nèi)跳轉(zhuǎn)AJMPaddr11絕對跳轉(zhuǎn)指令

——可在指令所在的2K范圍內(nèi)跳轉(zhuǎn)SJMPrel

相對跳轉(zhuǎn)指令

——可在當前PC-128與+127范圍內(nèi)跳轉(zhuǎn)JMP@A+DPTR間接長跳轉(zhuǎn)指令

——可在以DPTR為基址+A為偏移量之和所指向的64K程序范圍內(nèi)跳轉(zhuǎn)控制轉(zhuǎn)移類指令條件轉(zhuǎn)移:JZ,JNZ,CJNE,DJNZ——8條JZrelJNZrel——根據(jù)Acc的內(nèi)容是否為0決定是否跳轉(zhuǎn)DJNZdirect,relDJNZRn,

rel——將direct(或Rn)里的內(nèi)容減1,結(jié)果不等于0就跳轉(zhuǎn);等于0則不跳轉(zhuǎn)繼續(xù)往下走。條件轉(zhuǎn)移(續(xù))CJNEA,#data,relCJNEA,direct,rel

CJNE@Ri,#data,relCJNERn,#data,rel——將A(或@Ri

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論