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

下載本文檔

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

文檔簡介

第2章80C51系列單片機指令系統(tǒng)80C51指令的基本格式

80C51指令功能分類指令系統(tǒng)中的常用符號

80C51指令系統(tǒng)的七種尋址方式

數(shù)據(jù)傳送類指令算術(shù)運算類指令 邏輯運算及移位指令位操作類指令控制轉(zhuǎn)移類指令

51系列單片機指令集含有111條指令

每條指令在執(zhí)行時要花去一定的時間,以機器周期為單位。按指令執(zhí)行時間分類:單周期(64條);雙周期(45條);4周期(2條)按指令的功能分類,可分為5大類:數(shù)據(jù)傳送類(29條);算術(shù)運算類(24條)邏輯運算及移位類(24);控制轉(zhuǎn)移類(17條)位操作類(17條)

每條指令在程序存儲器ROM中占據(jù)一定的空間,以字節(jié)為單位。按指令所占字節(jié)數(shù)分類:單字節(jié)(49條);雙字節(jié)(46條);3字節(jié)(16條)§2-1指令系統(tǒng)基本概念標號:操作碼操作數(shù);注釋

2.1.1指令基本格式方括符[]表示可選項標號代表指令所在地址,1-8個字母/數(shù)字,“:”結(jié)尾[標號:]操作碼[目的操作數(shù)][,源操作數(shù)][;注釋]START:MOVA,#30H;將立即數(shù)30H傳送至A中

MOVDPTR,#5678H;將立即數(shù)5678H傳送至DPTR⑴標號:指令的符號地址。①用于一段功能程序的識別標記或控制 轉(zhuǎn)移地址。指令前的標號代表該指令的地址,是用符號表示的地址。

一般用英文字母和數(shù)字組成。④標號必須用冒號“:”與操作碼分隔。⑵操作碼:表示指令的操作功能①操作碼用助記符表示,它代表了指令的操作功能。②操作碼是指令的必需部分,是指令的核心,不可缺少。⑶操作數(shù):參加操作的數(shù)據(jù)或數(shù)據(jù)地址⑤操作數(shù)與操作碼之間用空格分隔,操作數(shù)與操作數(shù)之間用逗號“,”分隔。①操作數(shù)可以是數(shù)據(jù),也可以是數(shù)據(jù)的地址、 數(shù)據(jù)地址的地址或操作數(shù)的其他信息。②操作數(shù)可分為目的操作數(shù)和源操作數(shù)。③操作數(shù)可用二進制數(shù)、十進制數(shù)或十六進制數(shù)表示。④操作數(shù)的個數(shù)可以是0~3個。⑷注釋:指令功能說明。①注釋屬于非必需項,是為便于閱讀, 對指令功能作的說明和注解。②注釋必須以“;”開始。2.1.2指令分類⑶ 按指令功能分類:

可分為數(shù)據(jù)傳送類、算術(shù)運算類、邏輯運算類、位操作類和控制轉(zhuǎn)移類等5大類指令。80C51共有111條指令。⑴ 按指令長度分類:

可分為1字節(jié)、2字節(jié)和3字節(jié)指令。⑵ 按指令執(zhí)行時間分類:

可分為1機周、2機周和4機周指令。2.1.3指令系統(tǒng)中的常用符號⑹bit:位地址。SETBACC.7

代表片內(nèi)RAM中的可尋址位00H~7FH及SFR中的可尋址位

⑴#:立即數(shù)符。MOVA,#30H

#data:8位立即數(shù);#data16:16位立即數(shù)。⑵direct:8位直接地址MOVA,3AH

代表內(nèi)RAM00H~7FH或?qū)S眉拇嫫鞯?0H~FFH。⑶@:間接尋址符。MOVA,@R0如@Ri,@DPTR,@A+PC,@A+DPTR。⑷addr11:11位目的地址。

addr16:16位目的地址。⑸rel:帶符號的8位偏移地址。SJMPrel

用于轉(zhuǎn)移指令,其范圍是相對于下一條指令第1字節(jié)地址的-128~+127個字節(jié)。2.1.4尋址方式尋址就是尋找操作數(shù)的地址。七種尋址方式,一條指令可能含多種尋址方式立即尋址直接尋址寄存器尋址寄存器間接尋址變址尋址(基址寄存器+變址寄存器間接尋址)相對尋址位尋址⒈立即尋址

立即尋址是直接給出操作數(shù),操作數(shù)前有立即數(shù)符“#”。MOVA,#30H;將立即數(shù)30H傳送至A中MOVDPTR,#5678H;將立即數(shù)5678H傳送

至DPTR

ADDA,#05H;(A)←(A)+立即數(shù)05H注意:符號“#”表明其后跟的是立即數(shù),

立即數(shù)——就是數(shù)字量本身。⒉直接尋址MOVA,3AH

;將內(nèi)RAM3AH單元中的數(shù)據(jù)傳送至A中MOVA,P0

;將特殊功能寄存器P0口中的數(shù)據(jù)傳送至A中說明:3AH和P0是以direct形式出現(xiàn)的直接地址訪問特殊功能寄存器SFR只能采用直接尋址方式。

直接尋址是給出操作數(shù)的直接地址。直接尋址范圍為內(nèi)RAM128B和特殊功能寄存器。⒊寄存器尋址MOVA,R0;將R0中的數(shù)據(jù)傳送至A中INCAMULAB;累加器A乘以寄存器B從寄存器中讀取操作數(shù)或存放操作數(shù)進寄存器寄存器尋址的操作數(shù)在規(guī)定的寄存器中。

規(guī)定的寄存器有:①工作寄存器R0~R7②累加器A③雙字節(jié)AB④數(shù)據(jù)指針DPTR⑤位累加器Cy

這些被尋址寄存器中的內(nèi)容就是操作數(shù)⒋寄存器間接尋址MOVA,@R0;將以R0中內(nèi)容為地址的存儲單元中的數(shù)據(jù)傳送至A中MOVXA,@DPTR;將外RAMDPTR所指存儲單元中的數(shù)據(jù)傳送至A中PUSHPSW;將PSW中數(shù)據(jù)傳送至堆棧指針SP所指的存儲單元中MOV@R1,#0FH;(30H)←立即數(shù)0FH

寄存器中的內(nèi)容是一個地址,由該地址單元尋址到所需的操作數(shù)。間接尋址用間址符“@”作為前綴。注意:1)“間接”表示某寄存器中的“內(nèi)容”只是一個“單元地址”,這個地址單元中存放的數(shù)據(jù)才是要找的“操作數(shù)”。2)符號“@”表示“在…”,其含義與讀音皆同“at”。⒌變址尋址MOVCA,@A+DPTR在變址尋址中,操作數(shù)地址=基址+變址用于讀ROM數(shù)據(jù)操作。;將A的內(nèi)容與DPTR內(nèi)容相加,得到一個新地址,從該地址ROM中讀取數(shù)據(jù)送入A中。

以16位的地址指針寄存器DPTR或16位的PC寄存器為基址寄存器,以累加器A為變址寄存器,兩者中的“內(nèi)容”形成一個16位的“地址”,該“地址”所指的存儲單元中的內(nèi)容才是操作數(shù)。MOVCA,@A+PC;A(A+PC)

當(dāng)前PC值加上指令中規(guī)定的偏移量rel,構(gòu)成實際的操作數(shù)地址

例:SJMPrel

操作:跳轉(zhuǎn)到的目的地址=當(dāng)前16位PC值+rel⒍相對尋址注意:1)“當(dāng)前PC值”指程序中下一條指令所在的首地址,是一個16位數(shù);2)符號“rel”表示“偏移量”,是一個帶符號的單字節(jié)數(shù),范圍是:-128—+127(80H—7FH)在實際編程中,“rel”通常用標號代替;將位地址07H(字節(jié)地址20H中最高位)(00H-7FH)中的數(shù)據(jù)傳送至進位位Cy。⒎位尋址

位尋址是對內(nèi)RAM和特殊功能寄存器中的可尋址位進行操作的尋址方式。MOVC,07H

指令中直接給出了操作數(shù)所在的位地址。例:CLRP1.0;(P1.0)←0SETBACC.7;(ACC.7)←1CPLC;(C)←NOT(C)注意:

1)位地址里的數(shù)據(jù)只可能是一個0或12)有的位地址十分明確,如P1.0,ACC.7等,有的位地址則“不太明確”,如:

MOVA,17H;(A)←(17H),17H是字節(jié)地址

MOVACC.0,17H;(ACC.0)←(17H),這里ACC.0是位地址,所以該指令中的17H是22H單元的第7位§2-2指令系統(tǒng)功能分五類,共111條指令

數(shù)據(jù)傳送類指令

算術(shù)運算類指令

邏輯運算及移位指令

位操作類指令

控制轉(zhuǎn)移類指令①MOVA,Rn ;Rn→A,n=0~7

②MOVA,@Ri ;(Ri)→A,i=0、1③MOVA,direct;(direct)→A④MOVA,#data;data→A3.2.1數(shù)據(jù)傳送類指令⒈內(nèi)RAM數(shù)據(jù)傳送指令⑴以累加器A為目的字節(jié)的傳送指令(4條)【例3-1】若R0=40H,(30H)=60H,(40H)=50HMOVA,R0;將工作寄存器R0中的數(shù)據(jù)傳送至A中,A=40HMOVA,@R0;將以R0中內(nèi)容為地址的存儲單元中的數(shù)據(jù)送至A中A=50HMOVA,30H;將直接地址30H存儲單元中的數(shù)據(jù)傳送至A中,A=60HMOVA,#30H;將立即數(shù)#30H送入A中,A=30H①MOVRn,A;A→Rn,n=0~7②MOVRn,direct;(direct)→Rn,n=0~7③MOVRn,#data;data→Rn,n=0~7⑵以工作寄存器Rn為目的字節(jié)的傳送指令(3條)⑶以直接地址為目的字節(jié)的傳送指令(5條)①MOVdirect,A ;A→(direct)②MOVdirect,Rn ;Rn→(direct),n=0~7③MOVdirect,@Ri ;(Ri)→(direct),i=0、1④MOVdirect1,direct2;(direct2)→(direct1)⑤MOVdirect,#data ;data→(direct)⑷以寄存器間址為目的字節(jié)的傳送指令(3條)①MOV@Ri,A ;A→(Ri),i=0、1②MOV@Ri,direct;(direct)→(Ri),i=0、1③MOV@Ri,#data;data→(Ri),i=0、1⒉16位數(shù)據(jù)傳送指令MOVDPTR,#data16;data16→DPTRMOVDPTR,#1234H;DPTR=1234H該指令也可以用兩條8位數(shù)據(jù)傳送指令實現(xiàn):MOVDPH,#12H;DPH=12HMOVDPL,#34H;DPL=34H,DPTR=1234H①MOVXA,@Ri;(Ri)→A,i=0、1②MOVXA,@DPTR;(DPTR)→A③MOVX@Ri,A;A→(Ri),i=0、1④MOVX@DATR,A;A→(DATR)⒊外RAM傳送指令(4條)⒋讀ROM指令(2條)內(nèi)RAM(包括特殊功能寄存器):用MOV指令傳送;外RAM:用MOVX指令傳送;ROM:用MOVC指令傳送。①MOVCA,@A+DPTR;(A+DPTR)→A②MOVCA,@A+PC;PC+1→PC,(A+PC)→A

三個不同的存儲空間用三種不同的指令傳送:①PUSHdirect;SP+1→SP,(direct)→(SP)

②POPdirect;(SP)→(direct),SP-1→SP

⒌堆棧操作指令(2條)⒍交換指令(5條)①XCHA,Rn ;A←→Rn,n=0~7②XCHA,@Ri ;A←→(Ri),i=0、1③XCHA,direct;A←→(direct)SWAPA;A7~4←→A3~0⑴字節(jié)交換指令⑵半字節(jié)交換指令XCHDA,@Ri;A3~0←→(Ri)3~0

高4位不變。i=0、1⑶累加器高低四位互換①ADDA,Rn;A+Rn→A(n=0~7)

有進位,Cy=1;無進位,Cy=0②ADDA,@Ri;A+(Ri)→A(i=0、1)

有進位,Cy=1;無進位,Cy=0③ADDA,direct;A+(direct)→A

有進位,Cy=1;無進位,Cy=0④ADDA,#data;A+data→A

有進位,Cy=1;無進位,Cy=0

2.2.2算術(shù)運算類指令⒈加法指令⑴不帶Cy加法指令(4條)⑵帶Cy加法指令(4條)①ADDCA,Rn;A+Rn+Cy→A(n=0~7)

有進位,Cy=1;無進位,Cy=0②ADDCA,@Ri;A+(Ri)+Cy→A(i=0、1)

有進位,Cy=1;無進位,Cy=0③ADDCA,direct;A+(direct)+Cy→A

有進位,Cy=1;無進位,Cy=0④ADDCA,#data;A+data+Cy→A

有進位,Cy=1;無進位,Cy=0

⒉減法指令(4條)①SUBBA,Rn;A-Rn-Cy→A,(n=0~7),

有借位,Cy=1;無借位,Cy=0

②SUBBA,@Ri;A-(Ri)-Cy→A,(n=0~1),

有借位,Cy=1;無借位,Cy=0③SUBBA,direct;A-direct-Cy→A,

有借位,Cy=1;無借位,Cy=0④SUBBA,#data;A-data-Cy→A,

有借位,Cy=1;無借位,Cy=0

①INCA ;A+1→A②INCRn ;Rn+1→Rn,n=0~7③INC@Ri ;(Ri)+1→(Ri),i=0、1④INCdirect ;(direct)+1→(direct)⑤INCDPTR ;DPTR+1→DPTR⒊加1減1指令⑴加1指令(5條)⑵減1指令(4條)①DECA ;A-1→A②DECRn ;Rn-1→Rn,n=0~7③DEC@Ri ;(Ri)-1→(Ri),i=0、1④DECdirect;(direct)-1→(direct)

加1減1指令涉及A時,會影響P,但不影響其他標志位。

⒋BCD碼調(diào)整指令DAA功能:對加法運算結(jié)果進行BCD碼調(diào)整。十進制調(diào)整:(DAA——1條)用于兩個BCD碼之間的相加,這條指令只能跟在ADD或ADDC之后DIVAB;(A÷B)商→A,余數(shù)→BCy=0,OV=0

⒌乘除法指令⑴乘法指令(1條)MULAB;A×B→BA⑵除法指令(1條)三、邏輯運算及移位指令①ANLA,Rn;A∧Rn→A②ANLA,@Ri;A∧(Ri)→A③ANLA,#data;A∧data→A④ANLA,direct;A∧(direct)→A⑤ANLdirect,A;(direct)∧A→direct⑥ANLdirect,#data;(direct)∧data→direct⒈邏輯“與”運算指令(6條)⒉邏輯“或”運算指令(6條)①ORLA,Rn;A∨Rn→A②ORLA,@Ri;A∨(Ri)→A③ORLA,#data;A∨data→A④ORLA,direct;A∨(direct)→A⑤ORLdirect,A;(direct)∨A→direct⑥ORLdirect,#data;(direct)∨data→direct⒊邏輯“異或”運算指令(6條)①XRLA,Rn;ARn→A②XRLA,@Ri;A(Ri)→A③XRLA,#data;Adata→A④XRLA,direct;A(direct)→A⑤XRLdirect,A;(direct)A→direct⑥XRLdirect,#data;(direct)data→direct ①CLRA ;0→A ②CPLA ;A→A⒋清零和取反指令⒌循環(huán)移位指令(4條)①循環(huán)左移:RLA②帶Cy循環(huán)左移:RLCA

③循環(huán)右移:RRA

④帶Cy循環(huán)右移:RRCA

①MOVC,bit;(bit)→Cy

②MOVbit,C;Cy→bit四、位操作類指令⒈位傳送指令(2條)

指令中C即進位位Cy的助記符,bit為內(nèi)RAM20H~2FH中的128個可尋址位和特殊功能寄存器中的可尋址位存儲單元。將位存儲單元24H.4中的內(nèi)容傳送到位存儲單元24H.0。MOVC,24H.4;(24H.4)CMOV24H.0,C;C(24H.0)

或?qū)懗桑?/p>

MOVC,24H;(24H)C,(24H=24H.4)MOV20H,C;C(20H),(20H=24H.0)⑵位取反指令:①CPLC ;C→C②CPLbit ;(bit)→bit⒉位修正指令(6條)⑴位清0指令:①CLRC ;0→C②CLRbit ;0→bit⑶位置1指令:①SETBC ;1→C②SETBbit ;1→bit⑴位邏輯“與”運算指令:①ANLC,bit ;C∧(bit)→C②ANLC,/bit ;C∧(bit)→C⑵位邏輯“或”運算指令:①ORLC,bit ;C∨(bit)→C②ORLC,/bit

;C∨(bit)→C⒊位邏輯運算指令(4條)⑶相對轉(zhuǎn)移指令

SJMPrel;PC+2→PC,PC+rel→PC五、控制轉(zhuǎn)移類指令⒈無條件轉(zhuǎn)移指令(3條)⑴長轉(zhuǎn)移指令

LJMPaddr16;addr15~0→PC, ⑵短轉(zhuǎn)移指令

AJMPaddr11 ;PC+2→PC, addr10~0→PC10~0,PC15~11不變⑷間接轉(zhuǎn)移指令(散轉(zhuǎn)指令)

JMP@A+DPTR ;A+DPTR→PCLJMP、AJMP、SJMP無條件轉(zhuǎn)移指令的區(qū)別:①轉(zhuǎn)移范圍不一樣。

LJMP轉(zhuǎn)移范圍是64KB;

AJMP轉(zhuǎn)移范圍是與當(dāng)前PC值同一2KB;

SJMP轉(zhuǎn)移范圍是當(dāng)前PC-128B~+127B。使用AJMP和SJMP指令應(yīng)注意轉(zhuǎn)移目標地址是否在轉(zhuǎn)移范圍內(nèi),若超出范圍,程序?qū)⒊鲥e。②指令字節(jié)不一樣。

LJMP是3字節(jié)指令;

AJMP、SJMP是2字節(jié)指令。⒉條件轉(zhuǎn)移指令(13條)

條件轉(zhuǎn)移指令根據(jù)判斷條件可分為:⑴判C轉(zhuǎn)移⑵判bit轉(zhuǎn)移⑶判A轉(zhuǎn)移⑷減1非0轉(zhuǎn)移⑸比較不相等轉(zhuǎn)移指令滿足條件,則轉(zhuǎn)移;不滿足條件,則程序順序執(zhí)行。②

C=0轉(zhuǎn)移指令:

JNCrel ;PC+2→PC,

若Cy=0,則PC+rel→PC,轉(zhuǎn)移

若Cy=1,則程序順序執(zhí)行。⑴判C轉(zhuǎn)移指令(2條)①C=1轉(zhuǎn)移指令:

JCrel ;PC+2→PC,

若Cy=1,則PC+rel→PC,轉(zhuǎn)移若Cy=0,則程序順序執(zhí)行。③(bit)=1轉(zhuǎn)移并清0指令:

JBCbit,rel;PC+3→PC,

;若(bit)=1,則PC+rel→PC,轉(zhuǎn)移,且0→(bit) ;若(bit)=0,則程序順序執(zhí)行⑵判bit轉(zhuǎn)移指令(3條)①(bit)=1轉(zhuǎn)移指令:

JBbit,rel;PC+3→PC,

若(bit)=1,則PC+rel→PC,轉(zhuǎn)移若(bit)=0,則程序順序執(zhí)行②(bit)=0轉(zhuǎn)移指令:

JNBbit,rel;PC+3→PC,

若(bit)=0,則PC+rel→PC,轉(zhuǎn)移若(bit)=1,則程序順序執(zhí)行①A=0轉(zhuǎn)移指令:

JZrel;PC+2→PC,

若A=0,則PC+rel→PC,轉(zhuǎn)移若A0,則程序順序執(zhí)行⑶判A轉(zhuǎn)移指令(2條)②A0轉(zhuǎn)移指令:

JNZrel;PC+2→PC,

若A0,則PC+rel→PC,轉(zhuǎn)移若A=0,則程序順序執(zhí)行⑷減1非0轉(zhuǎn)移指令(2條)②DJNZdirect,rel;PC+3→PC,(direct)-1→direct

若(direct)=0,則程序順序執(zhí)行若(direct)0,則PC+rel→PC,轉(zhuǎn)移

①DJNZRn,rel;PC+2→PC,Rn-1→Rn, 若Rn=0,則程序順序執(zhí)行 若Rn0,則PC+rel→PC,轉(zhuǎn)移⑸比較轉(zhuǎn)移指令(4條)①CJNEA,direct,rel;PC+3→PC,;若A=(direct),則程序順序執(zhí)行

;若A≠(direct),則PC+rel→PC,轉(zhuǎn)移

;且若A≥(direct),Cy=0;若A<(direct),Cy=1

CJNEA,#data,rel;PC+3→PC,;若A=data,則程序順序執(zhí)行

;若A≠data,則PC+rel→PC,轉(zhuǎn)移

;且若A≥data,Cy=0;若A<data,Cy=1

CJNERn,#data,rel;PC+3→PC,;若Rn=data,則程序順序執(zhí)行

;若Rn≠data,則PC+rel→PC,轉(zhuǎn)移

;且若Rn≥data,Cy=0;若Rn<data,Cy=1④

CJNE@Ri,#data,rel;PC+3→PC,;若(Ri)=data,則程序順序執(zhí)行

;若(Ri)≠data,則PC+rel→PC,轉(zhuǎn)移

;且若(Ri)≥data,Cy=0;若(Ri)<data,Cy=1①產(chǎn)生當(dāng)前PC:PC+3→PC,(PC+3是因為該指令為三字節(jié)指令)②斷口地址低8位保存到堆棧中: SP+1→SP,(PC)0~7→(SP)③斷口地址高8位保存到堆棧中: SP+1→SP,(PC)8~15→(SP)

④形成轉(zhuǎn)移目標地址:addr16→PC⒊調(diào)用和返回指令LCALLaddr16

;PC+3→PC,SP+1→SP,(PC)0~7→(SP) ;SP+1→SP,(PC)8~15→(SP);addr16→PC⑴長調(diào)用指令LCALL指令執(zhí)行步驟:①產(chǎn)生當(dāng)前PC:PC+2→PC,

(PC+2是因為該指令為雙字節(jié)指令)②斷口地址低8位保存到堆棧中: SP+1→SP,(PC)0~7→(SP)③斷口地址高8位保存到堆棧中: SP+1→SP,(PC)8~15→(SP)④形成轉(zhuǎn)移目標地址:addr11→PC0~10,PC11~15不變⑵短調(diào)用指令A(yù)CALLaddr11;PC+2→PC,SP+1→SP,(PC)0~7→(SP);SP+1→SP,(PC)8~15→(SP);addr0~10→PC0~10,PC11~

溫馨提示

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

評論

0/150

提交評論