單片機(jī)原理及應(yīng)用03第三章MCS-51指令系統(tǒng)資料_第1頁
單片機(jī)原理及應(yīng)用03第三章MCS-51指令系統(tǒng)資料_第2頁
單片機(jī)原理及應(yīng)用03第三章MCS-51指令系統(tǒng)資料_第3頁
單片機(jī)原理及應(yīng)用03第三章MCS-51指令系統(tǒng)資料_第4頁
單片機(jī)原理及應(yīng)用03第三章MCS-51指令系統(tǒng)資料_第5頁
已閱讀5頁,還剩33頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 03第三章MCS-51指令系統(tǒng)(zh ln x tn)3.1 指令系統(tǒng)概述(i sh)3.2 尋址方式3.3 指令系統(tǒng)1共三十八頁MCS-51系列單片機(jī)指令基本(jbn)情況 51系列單片機(jī)指令集含有111條指令 每條指令在程序存儲(chǔ)器ROM中占據(jù)一定空間(kngjin),以字節(jié)為單位按指令所占字節(jié)數(shù)分類: 單字節(jié)(49條);雙字節(jié)(46條);3字節(jié)(16條) 每條指令在執(zhí)行時(shí)要花去一定的時(shí)間,以機(jī)器周期為單位按指令執(zhí)行時(shí)間分類: 單周期(64條);雙周期(45條);4周期(2條)按指令的功能分類,可分為5大類: 數(shù)據(jù)傳送類(29條);算術(shù)運(yùn)算類(24條) 邏輯運(yùn)算及移位類(24);控制轉(zhuǎn)移類

2、(17條) 位操作類(17條) 第三章節(jié)MCS-51指令系統(tǒng)2共三十八頁ASM-51指令(zhlng)格式51系列單片機(jī)采用ASM-51指令格式(g shi),格式如下: 標(biāo)號(hào):操作碼 目的操作數(shù),源操作數(shù);注釋其中包含:方括符 表示可選項(xiàng)標(biāo)號(hào)代表指令所在地址,1-8個(gè)字母/數(shù)字,“:”結(jié)尾操作碼就是指令功能助記符,指令實(shí)體目的操作數(shù)源操作數(shù)注釋,以“;”開頭3共三十八頁第一節(jié) MCS-51系列(xli)單片機(jī)尋址方式尋址方式:計(jì)算機(jī)指令中操作數(shù)(按地址(dzh)獲取的方式 MCS-51系列單片機(jī)提供了7種尋址方式,如果一條指令中包含多個(gè)操作數(shù),就可能用到一種以上的尋址方式1、立即尋址2、直接

3、尋址3、寄存器尋址4、寄存器間接尋址5、變址尋址6、相對尋址7、位尋址4共三十八頁1、立即(lj)尋址(一)在指令中直接(zhji)給出操作數(shù)的尋址方式稱為立即尋址。這個(gè)操作數(shù)叫立即數(shù),如指令: MOV A, #3AH該指令是將立即數(shù)3AH送累加器,由于MCS-51單片機(jī)的片內(nèi)存儲(chǔ)器是8位存儲(chǔ)器,因此立即數(shù)一般為8位二進(jìn)制數(shù)。在MCS-51的指令系統(tǒng)中,用#來識(shí)別立即數(shù)。74HA 操作碼立即數(shù)程序存儲(chǔ)器PCPC+13AH3AH5共三十八頁1、立即(lj)尋址(二)在有的指令中,也會(huì)用到16位立即數(shù),如:MOV DPTR, #0123H該指令是將16位立即數(shù)0123H送數(shù)據(jù)指針DPTR(用于對1

4、6位地址的存儲(chǔ)器尋址),DPTR由兩個(gè)特殊功能寄存器DPH和DPL組成,在后面的尋址方式(fngsh)中會(huì)使用到DPTR。90H01H23H01H23HPCPC+1PC+2操作碼高位立即數(shù)低位立即數(shù)程序存儲(chǔ)器SFRDPHDPL6共三十八頁2、直接(zhji)尋址在指令(zhlng)中直接給出操作數(shù)地址的尋址方式稱為直接尋址,直接尋址何以尋址特殊功能寄存器、內(nèi)部RAM(128字節(jié))和位地址,如:MOV A, 70H; A(70H)該指令是將RAM單元70H(地址)的內(nèi)容送累加器。74H70HPCPC+1操作碼直接地址程序存儲(chǔ)器內(nèi)部RAM70HAXXXX7共三十八頁3、寄存器尋址在指令的操作碼中包

5、含了某一工作寄存器的地址(Rn:R0R7),而操作數(shù)則存放(cnfng)在該寄存器中,如:MOV A, R5; A(R5)該指令是將R5的內(nèi)容送累加器。101PC操作碼程序(chngx)存儲(chǔ)器內(nèi)部RAMR5AXXXXR6R711018共三十八頁4、寄存器間接(jin ji)尋址在指令的操作碼中包含了某一工作寄存器的地址(可用作地址指針的工作寄存器是Ri:R0、R1),而操作數(shù)地址則存放(cnfng)在該寄存器中,如:MOV A, R1; A(R1)該指令是將R1的內(nèi)容送作為地址,將該地址所對應(yīng)的RAM單元的內(nèi)容送累加器。1PC操作碼程序存儲(chǔ)器內(nèi)部RAMR1AXX68H111001XX68H9共

6、三十八頁5、變址尋址將PC或DPTR的值作為基地址,將Acc的值作為變址地址,二者向加得到(d do)的值作為操作數(shù)的地址,如:MOV A, A+DPTR; A(A)+(DPTR)這種尋址方式一般用于常數(shù)表,DPTR的內(nèi)容為表頭地址,Acc的內(nèi)容就是數(shù)據(jù)在表中的位置。PC操作碼程序(chngx)存儲(chǔ)器SFRA100100111EH02HALU030FHXXDPHDPLF1H02F1H02F1H+1EH=030FHXX10共三十八頁6、相對(xingdu)尋址(一)相對尋址以PC當(dāng)前值(PC當(dāng)前值是執(zhí)行完指令后的值,也就是當(dāng)前指令的PC值+指令所占的字節(jié)數(shù))作為基地址,與指令中給定的偏移量rel

7、相加,所得的結(jié)果作為程序的轉(zhuǎn)移地址,指令中的偏移量rel是一個(gè)用補(bǔ)碼表示的8位帶符號(hào)數(shù)。相對尋址用于相對轉(zhuǎn)移指令中,如: JZ 30H; 當(dāng)A=0時(shí),PCPC+2+rel 當(dāng)A0時(shí),PCPC+2 /程序順序執(zhí)行該指令以累加器Acc的值是否為0為轉(zhuǎn)移條件(tiojin),如果為Acc的值0則轉(zhuǎn)移,如果Acc的值不為0則程序順序執(zhí)行。程序的執(zhí)行過程見相對尋址(二)。在MCS-51的指令系統(tǒng)中,相對轉(zhuǎn)移指令多為2字節(jié)指令,因此目的地址一般是PC+2+rel;如果是3字節(jié)指令,目的地址是PC+3+rel。偏移量rel是一個(gè)8位帶符號(hào)數(shù),因此程序轉(zhuǎn)移的范圍在PC當(dāng)前值的+127-128之間。11共三十八

8、頁6、相對(xingdu)尋址(二)60HPC操作碼程序(chngx)存儲(chǔ)器PC0102HALU30HXX0100HPC+10101HPC+20102HPC0123H偏移量0102H+30H=0132Hrel=30H0132H12共三十八頁7、位尋址MCS-51系列單片機(jī)中有專用的位運(yùn)算指令,可以對位尋址區(qū)的每一個(gè)位進(jìn)行數(shù)據(jù)傳送、邏輯運(yùn)算等操作,如:MOV C, 07H; C(07H)該指令屬于位操作指令,作用是將位地址(dzh)為70H的位單元(字節(jié)地址20H單元的D7位)傳送到位累加器C中。PC操作碼程序(chngx)存儲(chǔ)器C20HA2H00PC+107HPSWX07SFRX13共三十八頁

9、MCS-51指令集(包含(bohn)5大類功能)1、數(shù)據(jù)(shj)傳送類指令: (29條)2、算術(shù)運(yùn)算類指令: (24條)3、邏輯運(yùn)算及移位類指令: (24條)4、控制轉(zhuǎn)移類指令: (17條)5、位操作指令: (17條)14共三十八頁1、數(shù)據(jù)傳送(chun sn)類指令(一)片內(nèi)數(shù)據(jù)(shj)存儲(chǔ)器間傳送: (MOV16條)片外數(shù)據(jù)存儲(chǔ)器送累加器: (MOVX4條)程序存儲(chǔ)器送累加器: (MOVC2條)數(shù)據(jù)交換: (XCH,XCHD,SWAP5條)數(shù)據(jù)交換: (PUSH,POP2條)15共三十八頁1、數(shù)據(jù)傳送(chun sn)類指令(二)片內(nèi)數(shù)據(jù)(shj)存儲(chǔ)器間傳送: (MOV16條)MOV

10、類指令帶有兩個(gè)操作數(shù),前一個(gè)是目的地址,后一個(gè)是源操作數(shù)。作用是將源操作數(shù)送目的地址,如:MOV A, 30H; A(70H) AccDirect直接尋址Ri間接尋址Rn寄存器尋址#data立即數(shù)16共三十八頁1、數(shù)據(jù)傳送(chun sn)類指令(三)片外數(shù)據(jù)(shj)存儲(chǔ)器數(shù)據(jù)(shj)送累加器:(MOVX4條)MOVX類指令可以在累加器和Ri或DPTR(Ri為8位地址;DPTR為16位地址)所指向的外部數(shù)據(jù)存儲(chǔ)器間相互傳送數(shù)據(jù),具體指令有:MOVX A, Ri; A(Ri)MOVX A, DPTR; A(DPTR)MOVX Ri, A; (Ri) AMOVX DPTR, A; (DPTR)

11、 A 17共三十八頁1、數(shù)據(jù)傳送(chun sn)類指令(四)程序(chngx)存儲(chǔ)器數(shù)據(jù)送累加器:(MOVC2條)MOVX類指令采用變址尋址方式進(jìn)行尋址。該類指令通常稱為查表指令,送入累加器Acc的數(shù)據(jù)是事先寫入的表格數(shù)據(jù),通常使用偽指令DB或DW預(yù)先定義在程序存儲(chǔ)器中,具體指令有:MOVC A, A+DPTR; MOVX A, A+PC; 18共三十八頁1、數(shù)據(jù)(shj)傳送類指令(五)數(shù)據(jù)交換指令(zhlng):(5條)XCH A,direct (字節(jié)互換)XCH A,Ri (字節(jié)互換)XCH A,Rn (字節(jié)互換)XCHD A,Ri 累加器Acc的低4位與(Ri)的低4位互換,各自的高

12、4位不變SWAP A 累加器Acc的高低4位互換19共三十八頁1、數(shù)據(jù)傳送(chun sn)類指令(六)堆棧(duzhn)操作指令:(2條)PUSH 壓棧指令POP 彈棧指令 堆棧由特殊功能寄存器SP(堆棧指針)進(jìn)行管理 理論上堆棧在存儲(chǔ)器中可以放在任意位置,但為了不和工作寄存器沖突,一般將堆棧放在存儲(chǔ)器靠后的位置 堆棧指針SP總是指向棧頂(自動(dòng)變化,見第二章相關(guān)內(nèi)容) PUSH和POP一般是成對使用的20共三十八頁2、算術(shù)(sunsh)運(yùn)算類指令(一)加法(jif)運(yùn)算: (ADD4條)帶進(jìn)位加法運(yùn)算: (ADDC4條)帶借位減法運(yùn)算: (SUBB4條)加1/減1操作: (INC,DEC9條

13、)單字節(jié)乘/除法運(yùn)算: (MUL,DIV2條)算術(shù)運(yùn)算類指令共有6種24條十進(jìn)制調(diào)整: (DA A1條)21共三十八頁2、算術(shù)運(yùn)算(yn sun)類指令(二)加法運(yùn)算: (ADD4條)帶進(jìn)位加法運(yùn)算: (ADDC4條)帶借位(ji wi)減法運(yùn)算: (SUBB4條)所有的加法(ADD)、帶進(jìn)位加法(ADDC)、帶借位減法(SUBB)運(yùn)算都是以 Acc為一個(gè)加數(shù)或被減數(shù),最終結(jié)果也存進(jìn) Acc 加法(ADD)、帶進(jìn)位加法(ADDC) 以及帶借位減法(SUBB)運(yùn)算中,如果產(chǎn)生了進(jìn)位或借位,將自動(dòng)對PSW中的Cy標(biāo)志位置“1” 帶進(jìn)位加法(ADDC):(A) (A)+(Cy)+(第二操作數(shù))帶借位

14、減法(SUBB):(A) (A)- (Cy)- (第二操作數(shù))22共三十八頁2、算術(shù)(sunsh)運(yùn)算類指令(三)加1/減1操作: (INC,DEC9條)INC, DEC與用加/減法指令(zhlng)做加1/減1 操作不同之處在于INC、DEC不影響標(biāo)志位。單字節(jié)乘/除運(yùn)算: (MUL,DIV2條)兩個(gè)單字節(jié)數(shù)的乘/除法運(yùn)算只在A與B之間進(jìn)行。MUL AB: (A)與(B)相乘, 積為16位數(shù), (A) 積的高8位; (B) 積的低8位DIV AB: (A)除以(B),結(jié)果用2字節(jié)表示, (A) 商的整數(shù)部分;(B) 余數(shù)23共三十八頁2、算術(shù)運(yùn)算(yn sun)類指令(四)十進(jìn)制調(diào)整: (D

15、A A1條)用于兩個(gè)(lin )BCD碼之間的相加,這條指令只能跟在 ADD 或 ADDC 之后BCD碼是指“用二進(jìn)制表達(dá)的十進(jìn)制數(shù)”。如:十進(jìn)制數(shù)20可以用二進(jìn)制數(shù)00010100B表示; 也可以用十六進(jìn)制數(shù)14H表示;還可以用BCD碼 00100000B 或 20H 表示。4個(gè)二進(jìn)制位就可以表示一位BCD碼:00001001 可表示十進(jìn)制數(shù)(BCD數(shù)) 09; 8個(gè)二進(jìn)制位就可以表示兩位壓縮的BCD碼:0000000010011001 表示 0099。24共三十八頁2、算術(shù)(sunsh)運(yùn)算類指令(五)DA A指令的執(zhí)行(zhxng)過程若(A)309或(AC)=1則(A)30 (A)30

16、6;若(A)749或(CY)=1則(A)74 (A)746;如:兩個(gè)十進(jìn)制數(shù)“65”與“58”相加,根據(jù)常識(shí),顯然其和應(yīng)當(dāng)為“123”。MOV A, #65HADD A, #58HDA A結(jié)果:(A) = 23H (Cy) = 1 6 5 0110 0101 5 8 0101 1000 +)6601100110+)19180011320010125共三十八頁3、邏輯運(yùn)算及移位(y wi)類指令(一)該類指令(zhlng)共有5種24條邏輯與運(yùn)算: (ANL6條)邏輯或運(yùn)算: (ORL6條)邏輯異或運(yùn)算: (XRL6條)累加器清零/取反: (CLR,CPL2條)累加器移位操作: (RL,RLC,

17、RR,RRC4條)26共三十八頁3、邏輯運(yùn)算及移位(y wi)類指令(二)邏輯(lu j)與(ANL),邏輯或(ORL),邏輯異或(XRL):指 令 形 式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累加器清零/取反操作 (CLR,CPL2條)CLR A 對累加器清零 1 Byte 1 TmCPL A 對累加器按位取非 1 Byte 1 Tm27共三十八

18、頁3、邏輯運(yùn)算及移位(y wi)類指令(三)邏輯運(yùn)算指令在程序中的應(yīng)用(下面的例子(l zi)認(rèn)為Acc的內(nèi)容為9AH)邏輯與ANL運(yùn)算用于對某些位進(jìn)行清0或者保留:例: ANL A, #0FH; 則(A) = 0AH邏輯或ORL運(yùn)算用于對某些位進(jìn)行置1或者保留:例: ORL A, #0FH; 則(A) = 9FH邏輯異或XRL運(yùn)算用于對某些位進(jìn)行取反或者保留:例: XRL A, #0FH; 則(A) = 95H (A) 1001 1010 #0FH 0000 1111 95H 1001 010128共三十八頁RRC A 帶進(jìn)位(jnwi)循環(huán)左移3、邏輯運(yùn)算及移位(y wi)類指令(四)累加

19、器移位操作: (RL,RLC,RR,RRC4條)RL A 循環(huán)右移CyRR A 循環(huán)左移RLC A 帶進(jìn)位循環(huán)右移累加器Acc累加器Acc累加器Acc累加器AccCy29共三十八頁4、控制(kngzh)轉(zhuǎn)移類指令(一)控制轉(zhuǎn)移(zhuny)類指令用于對程序的執(zhí)行順序進(jìn)行控制(即改變PC指針的當(dāng)前值),該類指令共有4種17條無條件轉(zhuǎn)移:(LJMP,AJMP,SJMP,JMP4條)條件轉(zhuǎn)移(判斷跳轉(zhuǎn)):(JZ,JNZ,CJNE,DJNZ8條)子程序調(diào)用及返回:(LCALL,ACALL,RET,RETI4條)空操作:(NOP1條) “消耗”一個(gè)機(jī)器周期30共三十八頁4、控制(kngzh)轉(zhuǎn)移類指令(

20、二)無條件轉(zhuǎn)移(zhuny):(LJMP,AJMP,SJMP,JMP4條)LJMP addr16 長跳轉(zhuǎn)指令 可在64K范圍內(nèi)跳轉(zhuǎn)AJMP addr11 絕對跳轉(zhuǎn)指令 可在指令所在的2K范圍內(nèi)跳轉(zhuǎn) SJMP rel 相對跳轉(zhuǎn)指令 可在當(dāng)前PC-128與+127范圍內(nèi)跳轉(zhuǎn) JMP A+DPTR 間接長跳轉(zhuǎn)指令 可在以DPTR為基址 + A為偏移量 之和所指向的64K程序范圍內(nèi)跳轉(zhuǎn)31共三十八頁4、控制轉(zhuǎn)移(zhuny)類指令(三)條件(tiojin)轉(zhuǎn)移:(JZ,JNZ,CJNE,DJNZ8條)JZ relJNZ rel 根據(jù)Acc的內(nèi)容是否為0決定是否跳轉(zhuǎn) DJNZ direct, relDJ

21、NZ Rn, rel 將direct(或Rn)里的內(nèi)容減 1,結(jié)果不 等于0就跳轉(zhuǎn);等于0則不跳轉(zhuǎn)繼續(xù)執(zhí)行 程序32共三十八頁4、控制轉(zhuǎn)移(zhuny)類指令(四)條件(tiojin)轉(zhuǎn)移:CJNE A, #data, relCJNE A, direct, rel CJNE Ri, #data, relCJNE Rn, #data, rel 將A(或Ri,或Rn)與#data(或direct)相比 較,其值不相等就跳轉(zhuǎn);相等則不跳轉(zhuǎn),繼 續(xù)執(zhí)行程序33共三十八頁4、控制(kngzh)轉(zhuǎn)移類指令(五)子程序調(diào)用(dioyng)及返回:(LCALL,ACALL,RET,RETI4條)LCALL addr16 子程序長調(diào)用指令可在64K范圍內(nèi)調(diào)用子程序ACALL addr11 子程序絕對調(diào)用指令可在指令所在的2K范圍內(nèi)調(diào)用子程序RET 子程序返回指令子程序結(jié)束并返回調(diào)用的下一條指令RETI 中斷服務(wù)子程序返回指令中斷結(jié)束/返回被打斷處的下一條指令34共三十八頁5、位操作指令(zhlng)(一)該類指令(zhlng)共有17條位傳送: (MOV2條)位清零/置位: (CLR,SETB4條)位邏輯與/或/非運(yùn)算:(ANL,ORL,CPL6條)位條件轉(zhuǎn)移: (JC,JNC,JB,JNB,JBC5條)35共三十八頁5、位操作指令(zhlng)(二)位傳送指令(

溫馨提示

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

評論

0/150

提交評論