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

下載本文檔

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

文檔簡(jiǎn)介

1、第第3 3章章 51 51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng) 單片機(jī)原理及應(yīng)用2第第3章章 目錄目錄內(nèi)容簡(jiǎn)介內(nèi)容簡(jiǎn)介3.1 51單片機(jī)的匯編指令單片機(jī)的匯編指令 3.1.13.1.1一個(gè)簡(jiǎn)單的程序示例一個(gè)簡(jiǎn)單的程序示例 3.1.2 3.1.2 指令格式指令格式 3.1.3 3.1.3 指令類(lèi)型指令類(lèi)型 3.1.4 3.1.4 常用符號(hào)說(shuō)明常用符號(hào)說(shuō)明3.2 51單片機(jī)指令的尋址方式單片機(jī)指令的尋址方式3.3 51單片機(jī)的指令集單片機(jī)的指令集 3.3.1 3.3.1 數(shù)據(jù)傳送類(lèi)指令數(shù)據(jù)傳送類(lèi)指令 3.3.2 3.3.2 算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令 3.3.3 3.3.3 邏輯運(yùn)算及移位類(lèi)指令邏輯運(yùn)算

2、及移位類(lèi)指令 3.3.4 3.3.4 控制轉(zhuǎn)移類(lèi)指令控制轉(zhuǎn)移類(lèi)指令 3.3.5 3.3.5 位操作類(lèi)指令位操作類(lèi)指令習(xí)題習(xí)題內(nèi)容簡(jiǎn)介內(nèi)容簡(jiǎn)介 本節(jié)介紹本節(jié)介紹51單片機(jī)的指令系統(tǒng)。單片機(jī)的指令系統(tǒng)。 重點(diǎn)介紹指令格式,重點(diǎn)介紹指令格式,常用符號(hào)常用符號(hào),尋址方式,指令的,尋址方式,指令的分類(lèi),每條指令的功能。分類(lèi),每條指令的功能。 要求掌握指令的要求掌握指令的功能分類(lèi),每條指令屬于何種指令功每條指令屬于何種指令功能的類(lèi)別,每條指令操作數(shù)的尋址方式。能夠區(qū)分字節(jié)指能的類(lèi)別,每條指令操作數(shù)的尋址方式。能夠區(qū)分字節(jié)指令和位指令。令和位指令。 43.1 51單片機(jī)的匯編指令單片機(jī)的匯編指令例例31 將

3、內(nèi)部RAM中的20H和30H單元的無(wú)符號(hào)數(shù)相加,結(jié)果存入R0(高位)和R1(低位)中。圖31 程序流程圖3.1.1 3.1.1 一個(gè)簡(jiǎn)單的程序示例一個(gè)簡(jiǎn)單的程序示例5 按照?qǐng)D31編寫(xiě)匯編程序源代碼如下: ORG0000H ;ORG為偽指令,程序從0000H開(kāi)始執(zhí)行LJMP MAIN ;長(zhǎng)跳轉(zhuǎn)指令,跳到標(biāo)號(hào)MAIN處執(zhí)行 ORG 0030H ;主程序起始地址0030H MAIN: MOVA, 20H ;20H單元中的內(nèi)容送至累加器A中CLRC ;清進(jìn)位位Cy ADDA, 30H ;30H中的內(nèi)容與累加器A的內(nèi)容相加, ;結(jié)果存放在累加器A中MOVR1, A ;將累加器A中的內(nèi)容傳送給寄存器R1C

4、LRA ;清累加器AADDC A, #00 ;帶進(jìn)位加法指令MOVR0, A ;將累加器A的內(nèi)容傳送給R0SJMP $ ;相對(duì)轉(zhuǎn)移指令,$是當(dāng)前行指令的地址END ;結(jié)束,偽指令6 指令的表示方法就是指令格式指令格式。51單片機(jī)指令主要由操作碼操作碼(指令助記符)字段和操作數(shù)操作數(shù)字段組成。 指令格式:指令格式:操作碼 操作數(shù)1 ,操作數(shù)2 ,操作數(shù)3 程序程序是指令的有序結(jié)合有序結(jié)合,指令在匯編程序中可以增加標(biāo)號(hào)字段和注釋字段標(biāo)號(hào)字段和注釋字段,其格式如下: 標(biāo)號(hào): 操作碼 操作數(shù)1 ,操作數(shù)2 ,操作數(shù)3 ;注釋3.1.2 3.1.2 指令格式指令格式73.1.3 指令類(lèi)型指令類(lèi)型 51單

5、片機(jī)匯編語(yǔ)言有42種操作碼(參見(jiàn)附錄A),用來(lái)描述33種操作功能。操作碼與尋址方式組合可得到111條指令。(1) 按指令所占字節(jié)數(shù)分類(lèi),共有單字節(jié)指令(49條)、雙字 節(jié)指令(45條)和三字節(jié)指令(17條)。(2) 按指令執(zhí)行時(shí)間分類(lèi),共有單周期指令(64條)、雙周期指令(45條)和四周期指令(2條:乘法指令和除法指令)。(3) 按功能分類(lèi),51單片機(jī)指令系統(tǒng)可分為:數(shù)據(jù)傳送類(lèi)指令(29條)、算術(shù)運(yùn)算類(lèi)指令(24條)、邏輯運(yùn)算類(lèi)指令(24條)、控制轉(zhuǎn)移類(lèi)指令(17條)、位操作類(lèi)指令(17條)。83.1.4 3.1.4 常用符號(hào)說(shuō)明常用符號(hào)說(shuō)明符符 號(hào)號(hào)含含 義義Rn當(dāng)前選定寄存器組的寄存器Rn

6、,n=07Ri作為間接尋址的地址指針Ri,i=0或1#data8位立即數(shù),8位立即數(shù)的數(shù)據(jù)范圍:00HFFH#data1616位立即數(shù),16位立即數(shù)的數(shù)據(jù)范圍:0000HFFFFHaddr1616位地址,可表示64KB范圍內(nèi)的地址單元的尋址,用于LCALL和LJMP指令中addr1111位地址,2KB范圍尋址,用于ACALL和AJMP指令,16位地址指針寄存器DPTR的數(shù)據(jù)傳輸指令中direct8位直接地址,可以是片內(nèi)RAM區(qū)的某一單元或某一特殊功能寄存器的地址rel帶符號(hào)的8位地址偏移量,rel地址偏移量的范圍:128 +127,用于SJMP和條件轉(zhuǎn)移指令中bit位單元的位單元的8 8位地址

7、,位尋址區(qū)的直接尋址位,表示片內(nèi)位地址,位尋址區(qū)的直接尋址位,表示片內(nèi)RAMRAM中可尋址位和中可尋址位和SFRSFR中可尋址位的中可尋址位的位單元的內(nèi)容只有位單元的內(nèi)容只有“0 0”和和“1 1”兩種狀態(tài),作為源操作數(shù)在注釋和說(shuō)明時(shí)不加括號(hào)兩種狀態(tài),作為源操作數(shù)在注釋和說(shuō)明時(shí)不加括號(hào)(X)X是一個(gè)地址,(X)是X地址單元中的內(nèi)容。(X)只用于對(duì)指令的注釋和說(shuō)明(X)X X是一個(gè)地址,是一個(gè)地址,X X地址單元中的內(nèi)容作為地址指針,即地址單元中的內(nèi)容作為地址指針,即(X)(X)仍然是一個(gè)地址,仍然是一個(gè)地址,(X)(X)是是(X)(X)地址指針?biāo)刂分羔標(biāo)赶虻牡刂穯卧械膬?nèi)容。指向的地址單元

8、中的內(nèi)容。(X)(X)只用于對(duì)指令的注釋和說(shuō)明只用于對(duì)指令的注釋和說(shuō)明按箭頭指示方向傳送內(nèi)容,主要用于對(duì)指令的注釋和說(shuō)明$當(dāng)前指令所在地址,用于無(wú)條件轉(zhuǎn)移指令中/在位單元之前,表示該位狀態(tài)取反參與操作,但位單元本身狀態(tài)不變,用于位操作指令中在位單元之前,表示該位狀態(tài)取反參與操作,但位單元本身狀態(tài)不變,用于位操作指令中 間接尋址寄存器或基址寄存器的前綴,用于寄存器間接尋址和基址+變址尋址方式的指令中9 51單片機(jī)指令的操作數(shù)尋址方式操作數(shù)尋址方式主要有7 7種種,分別為直接尋址、立即尋址、寄存器尋址、寄存器間接尋址、基址+變址尋址、位尋址、相對(duì)尋址。3.2 51單片機(jī)指令的尋址方式單片機(jī)指令的尋

9、址方式 1. 1. 直接尋址直接尋址 直接尋址方式直接尋址方式:指令中的源操作數(shù)是操作數(shù)的單元地址,該單元地址指出了參與運(yùn)算或傳送的數(shù)據(jù)所在的字字節(jié)單元地址節(jié)單元地址或位單元地址位單元地址。 例如,已知(30H)=FFH,執(zhí)行指令: MOV A, 30H;A(30H),執(zhí)行結(jié)果:(A)=FFH10 2. 2. 立即尋址立即尋址 立即尋址方式:指令中含有立即數(shù)立即數(shù),立即數(shù)作為源操作數(shù)源操作數(shù),即指令中的立即數(shù)以指令操作數(shù)的形式存放于程序存儲(chǔ)器中,為了與直接尋址指令中的直接地址相區(qū)別,需要在操作數(shù)前面加前綴標(biāo)志“# #”;當(dāng)立即數(shù)是以字母字母開(kāi)頭的數(shù)開(kāi)頭的數(shù)時(shí),前面必須加0,如#0FEH#0FE

10、H。 例如例如,執(zhí)行指令: MOVA, #0FEH ;AFEH,A為目的操作數(shù),A中的內(nèi)容為FEH MOVDPTR, #8000H ; DPTR8000H,DPTR中的內(nèi)容為8000H11 3. 3. 寄存器尋址寄存器尋址 寄存器尋址方式寄存器尋址方式:指令中的源操作數(shù)是寄存器源操作數(shù)是寄存器,源操作數(shù)的內(nèi)容存放在寄存器內(nèi)。寄存器尋址一般用于訪問(wèn)選定的通用寄存器通用寄存器R0R7R0R7,以及A A、B B和和DPTRDPTR。源操作數(shù)和目的操作數(shù)均為寄存器尋址方式的指令都是單字節(jié)指令。 例如例如,執(zhí)行指令: MOV A, R0 ;A A(R0)(R0),指令中的R0為源操作數(shù),A為目的操作數(shù)

11、 INC R0 ;(R0)+1(R0)+1R0R0,指令中的R0是源操作數(shù),也是目的操作數(shù) MOV A, 30H ;A(30H)A(30H),指令中的30H為源操作數(shù),A為目的操作數(shù)12 4. 4. 寄存器間接尋址寄存器間接尋址 寄存器間接尋址:指令中的某一個(gè)寄存器某一個(gè)寄存器的內(nèi)容內(nèi)容作為操作數(shù)地址操作數(shù)地址的尋址方式,即寄存器的內(nèi)容寄存器的內(nèi)容作為地址指針地址指針,操作數(shù)的單元地址單元地址是通過(guò)寄存器間間接得到接得到。 寄存器間接尋址方式中,必須在寄存器的名稱前面加前綴標(biāo)志前綴標(biāo)志“ ”。訪問(wèn)內(nèi)部RAM或外部數(shù)據(jù)存儲(chǔ)器和其它擴(kuò)展部件的低256個(gè)字節(jié)時(shí),只能采用R0R0或R1R1作為間接尋址

12、寄存器;訪問(wèn)外部擴(kuò)展的64K單元地址空間和程序存儲(chǔ)器采用DPTRDPTR作為間接尋址寄存器。 例例3232 已知R0中存放片內(nèi)RAM地址65H,數(shù)據(jù)指針DPTR中存放片外RAM地址8000H,地址65H單元中的數(shù)據(jù)為30H,8000H單元中的數(shù)據(jù)為59H,執(zhí)行指令: MOV A,R0 ;A(R0),執(zhí)行指令:(A)=30H,R0為源操作數(shù) MOVX A,DPTR ;A(DPTR) ,執(zhí)行指令:(A)=59H13寄存器間接尋址的尋址范圍如下:寄存器間接尋址的尋址范圍如下:51單片機(jī)片內(nèi)RAM的低低128B單元單元,52單片機(jī)片內(nèi)RAM的256B單元單元,應(yīng) 用R0和R1作為間接尋址寄存器間接尋址

13、寄存器。(2) 片外擴(kuò)展片外擴(kuò)展的 64KB單元地址空間:使用DPTR作為間接尋址寄存器間接尋址寄存器。如果P2口口輸出的高高8位地址值位地址值是一個(gè)確定地址值,也可以使用R0和R1作為間接尋址寄存器。例例33 已知片外RAM的0118H中的內(nèi)容為58H,執(zhí)行指令: MOV P2, #01H ;設(shè)置51單片機(jī)地址總線的高高8位地址位地址為01H MOV R0, #18H ;設(shè)置51單片機(jī)地址總線的低低8位地址位地址為18H MOVX A, R0 ;A(R0)+0100H)=(0118H),(A)=58H(3) 程序存儲(chǔ)器程序存儲(chǔ)器:使用DPTR作為間接尋址寄存器。(4) 片外擴(kuò)展片外擴(kuò)展的低低

14、256B單元地址空間單元地址空間:可以使用DPTR、R0和R1作為間接尋址寄存器;或只擴(kuò)展256B單元,使用R0和R1作為間接尋址寄存器。(5) 堆棧區(qū)堆棧區(qū):以堆棧指針SP作為間接尋址寄存器間接尋址寄存器。14 5. 5. 基址基址+ +變址尋址方式變址尋址方式 基址基址+ +變址尋址方式變址尋址方式:指令中有操作數(shù)A+PC或A+DPTR,程序計(jì)數(shù)器PCPC或數(shù)據(jù)指針DPTRDPTR作為基址寄存器基址寄存器,累加器A A作為變址寄存器變址寄存器,基址寄存器和變址寄存器的內(nèi)容相加相加形成讀取程序存儲(chǔ)器數(shù)據(jù)數(shù)據(jù)的1616位地址位地址,用于訪問(wèn)程序存儲(chǔ)器中的數(shù)據(jù)表格數(shù)據(jù)表格。 例例3434 執(zhí)行指

15、令: MOVC A,A+PC;(A)+(PC)A,A+PCA+PC為源操作數(shù) MOVC A,A+DPTR;(A)+(DPTR)A,A+DPTRA+DPTR為源操作數(shù)15 6. 6. 位尋址位尋址 51單片機(jī)有一個(gè)布爾處理機(jī)布爾處理機(jī),可以對(duì)8位字節(jié)中的位單元位單元進(jìn)行操作。位尋址方式位尋址方式:對(duì)位單元的尋址。 除了位判斷轉(zhuǎn)移指令外,位操作指令位操作指令的源操作數(shù)和目的操作數(shù)都是位單元。 例例3535 執(zhí)行指令: MOV C, 40H ;該指令的功能是把40H40H位單元位單元中的狀態(tài)狀態(tài)送進(jìn)位位位CyCy SETB TR0 ;該指令的功能是把TR0TR0位單元位單元中的狀態(tài)狀態(tài)置為“1”狀態(tài)

16、 位尋址的尋址范圍如下。 (1)(1) 片內(nèi)RAM中的位尋址區(qū)。位單元地址范圍位單元地址范圍:00H7FH (2) (2) 可位尋址的特殊功能寄存器可位尋址的特殊功能寄存器??梢灾苯邮褂梦粏卧姆?hào),比如第2條 指令中的TR0,參見(jiàn)第2章表表2727的特殊功能寄存器中的位單元地的特殊功能寄存器中的位單元地址分址分 布布。16 7. 7. 相對(duì)尋址相對(duì)尋址 相對(duì)尋址相對(duì)尋址用于訪問(wèn)程序存儲(chǔ)器訪問(wèn)程序存儲(chǔ)器,只出現(xiàn)在轉(zhuǎn)移指令轉(zhuǎn)移指令中。以PC的當(dāng)前值加上指令中給出的相對(duì)偏移量(rel)形成轉(zhuǎn)移地址。其中,rel是一個(gè)帶符號(hào)的8位二進(jìn)制數(shù),以補(bǔ)碼形式置于操作碼之后存放。程序的轉(zhuǎn)移范圍以PC當(dāng)前值為中

17、心,介于128+127之間。 例如例如,執(zhí)行指令: JC rel 設(shè)rel=85H,Cy=1,這是一條以Cy狀態(tài)為條件的轉(zhuǎn)移指令,指令為兩字節(jié)指令兩字節(jié)指令,CPU取出第二個(gè)字節(jié)時(shí),PC當(dāng)前值為原原PCPC值加值加2 2。由于Cy=1,程序轉(zhuǎn)向(PC)+2+rel程序存儲(chǔ)器的目的地址單元去執(zhí)行。注意,此時(shí)rel=85H為負(fù)值。17 按照指令的功能分類(lèi),51單片機(jī)指令系統(tǒng)的111條指令分為數(shù)據(jù)傳送數(shù)據(jù)傳送類(lèi)指令、算術(shù)運(yùn)算算術(shù)運(yùn)算類(lèi)指令、邏輯運(yùn)算邏輯運(yùn)算類(lèi)指令、控制轉(zhuǎn)移控制轉(zhuǎn)移類(lèi)指令、位操作位操作類(lèi)指令。3.3 51單片機(jī)的指令集單片機(jī)的指令集3.3.1 數(shù)據(jù)傳送類(lèi)指令數(shù)據(jù)傳送類(lèi)指令 數(shù)據(jù)傳輸類(lèi)指

18、令又可分為: 單片機(jī)內(nèi)部數(shù)據(jù)內(nèi)部數(shù)據(jù)的傳送傳送指令; 累加器累加器A A與片外片外RAMRAM或外部擴(kuò)展接口部件外部擴(kuò)展接口部件的數(shù)據(jù)傳送指數(shù)據(jù)傳送指令令; 18 1 1內(nèi)部數(shù)據(jù)的傳送指令內(nèi)部數(shù)據(jù)的傳送指令 (1)(1) 以累加器以累加器A A為目的操作數(shù)的指令,即累加器為目的操作數(shù)的指令,即累加器A A為目的地址單元為目的地址單元3.3.1 數(shù)據(jù)傳送類(lèi)指令數(shù)據(jù)傳送類(lèi)指令例例36 將立即數(shù)立即數(shù)35H送入片內(nèi)30H單元單元,可執(zhí)行以下指令: MOV A, #35H ;累加器A為目的地址單元,35HA MOV R0, #30H ;R0為目的地址單元,30HR0 MOV R0, A ;R0為目的地

19、址單元,(R0)=30H,(30H)A 也可執(zhí)行以下這一條指令達(dá)到目的: MOV 30H, #35H ;35H30H (2) 以寄存器以寄存器Rn為目的操作數(shù)的指令為目的操作數(shù)的指令 例例37 若(A)=20H,(20H)=F0H,執(zhí)行以下指令: MOV R0, A;(R0)=20H MOV R0, 20H ;(R0)=F0H MOV R6, #0A5H;(R6)=A5H19 (3) (3) 以直接地址為目的操作數(shù)的指令以直接地址為目的操作數(shù)的指令 例例38 設(shè)66H單元中的內(nèi)容為EAH,執(zhí)行下面指令: MOV 36H, #66H ;66H36H,(36H)=66H MOV R1, 36H ;

20、(36H)R1,(R1)=66H MOV 7EH, R1 ;(R1)7EH,(7EH)=(66H)=EAH MOV 38H, 7EH ;(7EH)38H,(38H)=(7EH)=EAH (4) (4) 以寄存器間接地址為目的操作數(shù)的指令以寄存器間接地址為目的操作數(shù)的指令 例例39 若(A)=20H,(R0)=42H,(32H)=46H,(42H)=52H,執(zhí)行以下指令: MOV R0, A ;(R0)=(42H)=(A)=20H,42H單元的內(nèi)容被刷新 MOV R0, 32H ;(R0)=(42H)=(32H)=46H,42H單元的內(nèi)容被刷新 MOV R0, #0D5H ;(R0)=(42H)

21、=D5H,42H單元的內(nèi)容被刷新3.3.1 數(shù)據(jù)傳送類(lèi)指令數(shù)據(jù)傳送類(lèi)指令20 (5) 16位數(shù)據(jù)傳送指令位數(shù)據(jù)傳送指令 MOV DPTR, #data16 ;立即尋址,16位地址值data16DPTR ;16位地址值高8位送DPH,低8位送DPL 這是51單片機(jī)中唯一的一條16位數(shù)據(jù)傳送指令。 例例310 執(zhí)行指令: MOV DPTR, #1234H ;DPH12H,DPL34H,(DPTR)=1234H (6) 堆棧操作指令堆棧操作指令PUSH、POP 堆棧操作堆棧操作:通過(guò)堆棧指針堆棧指針SP來(lái)實(shí)現(xiàn),分為入棧操作入棧操作和出棧操作出棧操作,先先進(jìn)后出進(jìn)后出。51單片機(jī)開(kāi)機(jī)或復(fù)位開(kāi)機(jī)或復(fù)位后

22、(SP)=07,一般需要重新設(shè)定SP的初始值初始值, SP的內(nèi)容的內(nèi)容:棧頂?shù)奈恢?地址)。 兩條堆棧指令兩條堆棧指令:進(jìn)棧進(jìn)棧指令;出棧出棧指令。21 例例311 已知(A)=10H,(B)=40H,執(zhí)行指令: MOV SP, #30H ;設(shè)置堆棧指針初值堆棧指針初值:(SP)=30H, PUSH ACC ; SP(SP)+1,(SP)=31H; (SP)=(31H)=(A)=10H PUSH B ; SP(SP)+1,(SP)=32H; (SP)=(32H)=(B)=40H POP ACC ; (SP)=(32H)=40HA; (SP)=(SP)1,(SP)=31H POP B ; (SP

23、)=(31H)=10HB; (SP)=(SP)1,(SP)=30H 22(7)(7) 字節(jié)交換指令和半字節(jié)交換指令字節(jié)交換指令和半字節(jié)交換指令例例312 已知(A)=80H,(R0)=28H,(28H)=36H,執(zhí)行指令: XCH A, R0 ;(R0)(A),(R0)=28H,28H單元和A互相交換數(shù)據(jù) ;使得(A)=36H,(Ri)=(28H)=80H SWAP A ;(AD3D0)(AD7D4),使得(A)=63H例例313 已知(A)=80H,(R0)=08H,(08H)=36H,執(zhí)行指令: XCHD A, R0 ;(R0)=(08H)=36H的低低4位位與(A)=80H的低低4位位交

24、換交換, ;使得(08H)=30H,(A)=86H SWAP A ;(A)=86H的高半字節(jié)高半字節(jié)8和低半字節(jié)低半字節(jié)6交換交換,使得(A)=68H 23 51單片機(jī)應(yīng)用系統(tǒng)擴(kuò)展的片外片外RAM和外部接口部件外部接口部件只能夠通過(guò)累累加器加器A進(jìn)行數(shù)據(jù)傳輸數(shù)據(jù)傳輸,而不能夠與51單片機(jī)內(nèi)部RAM、其它特殊功能寄存器直接進(jìn)行數(shù)據(jù)傳輸。例例314 已知(DPTR)=2000H,(2000H)=10H,執(zhí)行指令: MOVX A, DPTR ;A(DPTR)=(2000H),(A)=10H例例315 已知(P2)=20H,(R1)=48H,(A)=60H,執(zhí)行指令: MOVX R1, A ;(R1)

25、+2000H(A),則片外(2048H)=60H2累加器A與片外RAM或外部擴(kuò)展接口部件的數(shù)據(jù)傳送指令24 只有兩條查表指令,均采用基址基址+變址尋址方式變址尋址方式,單字節(jié)指令,用于讀取讀取程序存儲(chǔ)器中的數(shù)據(jù)程序存儲(chǔ)器中的數(shù)據(jù)。 例例316 設(shè)(A)=30H,執(zhí)行指令: MOVC A, A+PC 若該指令的單元地址為1000H,則下一條指令單元的地址為1001H,執(zhí)行該條指令將(A)+(PC)=1031H作為地址指向程序存儲(chǔ)器,將程序存儲(chǔ)器1031H單元的內(nèi)容累加器A。 例例317 設(shè)(DPTR)=8200H,(A)=30H,執(zhí)行指令: MOVC A, A+DPTR ;(A)+(DPTR)=

26、8230H,將程序存儲(chǔ)器的(8230H)A 建議同學(xué)們首選查表指令:MOVC A, A+DPTR; DPTR:表格的首地址表格的首地址; 累加器A:變址變址25 算術(shù)運(yùn)算指令:加、減、乘、除加、減、乘、除法指令,以及加加1 1和減減1 1指令,共有24條指令。大多數(shù)指令都以累加器累加器A A作為一個(gè)源操作數(shù)源操作數(shù)和目的操作數(shù)目的操作數(shù),另一個(gè)源操作數(shù)另一個(gè)源操作數(shù)可以存放于任何一個(gè)工作寄存器RnRn或片內(nèi)片內(nèi)RAMRAM單元中,也可以是一個(gè)立即數(shù)立即數(shù),運(yùn)算結(jié)果運(yùn)算結(jié)果存放在目的操作數(shù)累加器累加器A A中。3.3.2 3.3.2 算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令 261 1加法指令加法指令(1) 不

27、帶進(jìn)位的加法指令不帶進(jìn)位的加法指令例例318 設(shè)(A)=45H,(R0)=20H,(20H)=ADH,執(zhí)行指令: ADD A, R0 ; , 結(jié)果:(A)=F2H,Cy=0,AC=1,OV=0,P=1(2) 帶進(jìn)位的加法指令帶進(jìn)位的加法指令例例319 設(shè)(A)=85H,(20H)=FFH,Cy=1,執(zhí)行指令: ADDC A, 20H ;10000101+11111111+1=110000101,產(chǎn)生進(jìn)位1 結(jié)果:(A)=85H,Cy=1,AC=1,OV=0,P=1 01000101 10101101 1111001027 (3) 加加1指令指令例例320 設(shè)(A)=FFH,(R3)=0FH,(

28、30H)=E2H,(R0)=40H,(40H)=AAH, 執(zhí)行指令: INC A ;FFH+1A,(A)=00H,PSW的P狀態(tài)設(shè)置為0 INC R3 ;0FH+1R3,(R3)=10H,PSW狀態(tài)不變 INC R0 ;(R0)=(40H),AAH+140H,(40H)=ABH,PSW狀態(tài)不變 (4) 十進(jìn)制調(diào)整指令十進(jìn)制調(diào)整指令 計(jì)算機(jī)的運(yùn)算運(yùn)算以二進(jìn)制二進(jìn)制為基礎(chǔ),對(duì)于十進(jìn)制十進(jìn)制BCD碼相加碼相加應(yīng)用ADD和ADDC指令的運(yùn)算結(jié)果都是二進(jìn)制數(shù),要得到正確的十進(jìn)制數(shù)運(yùn)算結(jié)果,就必須應(yīng)用十進(jìn)制調(diào)整指令十進(jìn)制調(diào)整指令。 DA A ;十進(jìn)制調(diào)整指令,必須應(yīng)用在在ADD或或ADDC指令的后面指令的

29、后面 十進(jìn)制調(diào)整指令執(zhí)行后,程序狀態(tài)字(PSW)中的進(jìn)位標(biāo)志位(Cy)表示結(jié)果的百位值百位值。28 例例321 (A)=56H,(30H)=77H, 編程實(shí)現(xiàn)BCD碼56+77的運(yùn)算。 執(zhí)行指令: ADD A, 30H ;(A)+(30H)=56H+77H=CDH DA A ;個(gè)位數(shù)為DH,DH+6=3,進(jìn)位1 ;十位數(shù)為CH,CH+6+1=3,進(jìn)位1Cy MOV R0, A ;把和的低字節(jié)的十位數(shù)和個(gè)位數(shù)存入R0 CLR A ;0A ADDC A, #00 ;百位數(shù):0+CyA MOV R1, A ;和的高字節(jié)的百位數(shù)存入R1 運(yùn)算結(jié)果為133,并將其十進(jìn)制BCD碼存放在R1R0中,R1為0

30、1H,R0為33H29 (1) 減法指令減法指令 減法指令:只有帶借位帶借位的減法指令。在進(jìn)行減法操作時(shí),如果運(yùn)算結(jié)果產(chǎn)生借位借位,Cy置置1,無(wú)借位清無(wú)借位清0;如果D3位需借位,則將輔助進(jìn)位標(biāo)志位AC置1,否則將AC清0;如果D7需借位而D6位不借位或D6位借位而D7位不借位,則將溢出標(biāo)志位OV置1,否則清0;奇偶標(biāo)志位P隨著累加器A中1的個(gè)數(shù)而變化。 例例322 設(shè)(A)=76H,立即數(shù)為C5H,Cy=0,執(zhí)行指令: SUBBA, #0C5H ; 結(jié)果:(A)=B1H,Cy=1,AC=0,OV=1,P=02減法指令減法指令 01110110 11000101 01 10110001借位3

31、0(2) 減減1指令指令例例323 設(shè)(A)=0EH,(30H)=00H,(R1)=70H,(70H)=FFH。 執(zhí)行指令: DEC A ;A(A)1,(A)=0DH,P=1,不影響其它標(biāo)志 DEC 30H ;30H(30H)1,(30H)=FFH,PSW狀態(tài)不變 DEC R1 ;(R1)(R1)1,(70H)=FEH,PSW狀態(tài)不變31 乘法和除法指令乘法和除法指令:只能夠?qū)蓚€(gè)兩個(gè)8位無(wú)符號(hào)數(shù)位無(wú)符號(hào)數(shù)進(jìn)行乘法乘法和除法除法運(yùn)算。 MUL AB這條指令對(duì)Cy、OV和P三個(gè)標(biāo)志位產(chǎn)生影響。如果乘積大于255(FFH),溢出標(biāo)志OV置1,否則OV清0。進(jìn)位標(biāo)志Cy總是清0,P隨著A中1的個(gè)數(shù)而

32、變化。 例例324 設(shè)(A)=4EH,(B)=5DH,執(zhí)行指令: MUL AB ;運(yùn)算結(jié)果:(B)=1CH,(A)=56H,即乘積結(jié)果(BA)=1C56H 執(zhí)行DIV AB這條指令之前,如果原來(lái)B中的內(nèi)容為0,即除數(shù)為0,執(zhí)行結(jié)果A和B中的內(nèi)容不定,并將溢出標(biāo)志OV置1,在其它情況下,OV被復(fù)位為0,表示除法操作是合理的。進(jìn)位標(biāo)志Cy總是清0。 例例325 設(shè)(A)=BFH,(B)=32H,執(zhí)行指令: DIV AB ;運(yùn)算結(jié)果:(A)=03H,(B)=29H,Cy=0,OV=03乘法和除法指令乘法和除法指令32 邏輯運(yùn)算指令邏輯運(yùn)算指令:兩個(gè)兩個(gè)8 8位二進(jìn)制數(shù)位二進(jìn)制數(shù)按位按位進(jìn)行與與、或或

33、、異或異或的邏輯運(yùn)算,以及對(duì)累加器累加器A A的內(nèi)容清清0 0和按位取反按位取反操作。 移位類(lèi)指令移位類(lèi)指令:累加器:累加器A A的循環(huán)移位循環(huán)移位操作,包括左移左移一位一位、右移一位右移一位,以及帶進(jìn)位標(biāo)志位帶進(jìn)位標(biāo)志位與不帶進(jìn)位標(biāo)志位不帶進(jìn)位標(biāo)志位移位的方式。兩類(lèi)指令共有24條。3.3.3 邏輯運(yùn)算及移位類(lèi)指令邏輯運(yùn)算及移位類(lèi)指令331邏輯與指令邏輯與指令A(yù)NL指令助記符指令助記符操作說(shuō)明操作說(shuō)明指令助記符指令助記符操作說(shuō)明操作說(shuō)明指令助記符指令助記符操作說(shuō)明操作說(shuō)明ANL A, RnA(A)(Rn) ANL A, directA(A)(direct)ANL A, RiA(A)(Ri)AN

34、L A, #dataA(A)data ANL direct, A direct(direct)(A) ANL direct, #data direct(direct)data2邏輯或指令邏輯或指令ORL指令助記符指令助記符操作說(shuō)明操作說(shuō)明指令助記符指令助記符操作說(shuō)明操作說(shuō)明指令助記符指令助記符操作說(shuō)明操作說(shuō)明ORL A, RnA(A)(Rn) ORL A, directA(A)(direct)ORL A, RiA(A)(Ri)ORL A, #data A(A)data ORL direct, A direct(direct)(A) ORL direct, #data direct(direct

35、)data3邏輯異或指令邏輯異或指令XRL指令助記符指令助記符操作說(shuō)明操作說(shuō)明指令助記符指令助記符操作說(shuō)明操作說(shuō)明指令助記符指令助記符操作說(shuō)明操作說(shuō)明XRL A, RnA(A) (Rn) XRL A, directA(A) (direct)XRL A, RiA(A) (Ri)XRL A, #data A(A) data XRL direct, A direct(direct) (A) XRL direct, #data direct(direct) data34 在使用中,邏輯與邏輯與:實(shí)現(xiàn)對(duì)指定位清0,其余位不變; 邏輯或邏輯或:實(shí)現(xiàn)對(duì)指定位置1,其余位不變; 邏輯異或邏輯異或:實(shí)現(xiàn)指定位取

36、反,其余位不變。 例例329329 根據(jù)要求寫(xiě)指令 (1) (1) 對(duì)累加器A的D1D1、D3D3、D5D5位清位清0 0,其余位不變: ANL A, #0D5H ;D5H=1101 0101, D1D1、D3D3、D5D5位位為為0 0 (2) (2) 對(duì)累加器A中的D2D2、D4D4、D6D6位置位置1 1,其余位不變: OR A, #54H ;54H=0101 0100, D2D2、D4D4、D6D6位位為為1 1 (3) (3) 對(duì)累加器A中的D0D0、D1D1位取反位取反,其余位不變: XRL A, #03H ;03H=0000 0011, D0D0、D1D1位位為為1 1354清零

37、和求反指令清零和求反指令 51單片機(jī)只有只有清零指令CLR A和求反指令CPL A是字節(jié)指令字節(jié)指令,其它清其它清零零和求反指令求反指令都是位操作指令位操作指令。 例例330 對(duì)R0中的內(nèi)容取反: MOV A, R0 CPL A MOV R0, A5循環(huán)移位指令循環(huán)移位指令(a) RL A (b) RR A (c) RLC A (d) RRC A36 控制轉(zhuǎn)移控制轉(zhuǎn)移類(lèi)指令:主要用于循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)和分支結(jié)構(gòu)分支結(jié)構(gòu)程序,共有17條指令,包括無(wú)條件轉(zhuǎn)移無(wú)條件轉(zhuǎn)移指令、條件轉(zhuǎn)移條件轉(zhuǎn)移指令、子程序調(diào)用子程序調(diào)用和返回指令,以及空操作指令。 執(zhí)行控制轉(zhuǎn)移控制轉(zhuǎn)移類(lèi)指令將修改修改程序計(jì)數(shù)器PCPC的

38、值的值,使程序從PCPC新新指向指向的程序存儲(chǔ)器地址存儲(chǔ)單元地址存儲(chǔ)單元開(kāi)始執(zhí)行程序開(kāi)始執(zhí)行程序,即實(shí)現(xiàn)了程序的轉(zhuǎn)移。3.3.4 控制轉(zhuǎn)移類(lèi)指令控制轉(zhuǎn)移類(lèi)指令1無(wú)條件轉(zhuǎn)移指令無(wú)條件轉(zhuǎn)移指令指令助記符指令助記符操作說(shuō)明操作說(shuō)明指令助記符指令助記符操作說(shuō)明操作說(shuō)明LJMP addr16PCaddr16AJMP addr11PCD10D0addr11SJMP relPCPC+2+relJMP A+DPTRPC(A)+(DPTR)2條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令 條件轉(zhuǎn)移指令是指當(dāng)條件滿足時(shí),程序轉(zhuǎn)移到指定的目的地址;條件不滿足時(shí),程序?qū)㈨樞驁?zhí)行。在51單片機(jī)中,條件轉(zhuǎn)移指令有3種:對(duì)累加器A判0或判非0條

39、件轉(zhuǎn)移指令、比較轉(zhuǎn)移指令,以及減1不為0轉(zhuǎn)移指令。37(1) 對(duì)累加器對(duì)累加器A判判0和判非和判非0條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令指令助記符指令助記符操作說(shuō)明操作說(shuō)明指令助記符指令助記符操作說(shuō)明操作說(shuō)明JZ rel若A=0,則轉(zhuǎn)移,否則,順序執(zhí)行JNZ rel若A0,則轉(zhuǎn)移,否則,順序執(zhí)行(2) 比較不相等轉(zhuǎn)移指令比較不相等轉(zhuǎn)移指令指令助記符指令助記符操作說(shuō)明操作說(shuō)明CJNE A, direct, rel若(A)=(direct),順序執(zhí)行,否則轉(zhuǎn)移;如果(A)(direct),Cy0;否則,Cy1CJNE A, #data, rel若(A)=data,順序執(zhí)行,否則轉(zhuǎn)移;如果(A)data,Cy0

40、;如果(A)data,Cy0;如果(Rn)data,Cy0;否則,Cy1(3) 減減1不為不為0轉(zhuǎn)移指令轉(zhuǎn)移指令指令助記符指令助記符操作說(shuō)明操作說(shuō)明DJNZ Rn, rel若(Rn)1=0,則順序執(zhí)行;如果(Rn)10,則轉(zhuǎn)移DJNZ direct, rel若(direct)1=0,則順序執(zhí)行;如果(direct)10,則轉(zhuǎn)移383子程序調(diào)用與返回指令子程序調(diào)用與返回指令指令助記符指令助記符操作說(shuō)明操作說(shuō)明LCALL addr16 將該指令的下一條指令地址壓入堆棧,然后PCaddr16,addr16為子程序人口地址ACALL addr11將該指令的下一條指令地址壓入堆棧,然后PCaddr11,PC的高5位(D15D11)不變RET執(zhí)行LCALL addr16或ACALL addr11指令壓入堆棧的16位指令地址出棧PCRETI將響應(yīng)中斷時(shí)壓入堆棧的16位指令地址出棧PC,清內(nèi)部中斷優(yōu)先級(jí)標(biāo)志4空操作指

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論