單片機及應(yīng)用-第三章-80C51單片機指令系統(tǒng)_第1頁
單片機及應(yīng)用-第三章-80C51單片機指令系統(tǒng)_第2頁
單片機及應(yīng)用-第三章-80C51單片機指令系統(tǒng)_第3頁
單片機及應(yīng)用-第三章-80C51單片機指令系統(tǒng)_第4頁
單片機及應(yīng)用-第三章-80C51單片機指令系統(tǒng)_第5頁
已閱讀5頁,還剩75頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章80C51單片機指令系統(tǒng)主要內(nèi)容:3.1單片機指令系統(tǒng)概述3.280C51單片機指令尋址方式3.380C51單片機指令分類介紹重點:80C51單片機的尋址方式;指令的功能、字節(jié)數(shù)、執(zhí)行周期數(shù)。3.1單片機指令系統(tǒng)概述指令:規(guī)定計算機基本操作的語句或命令,通常由操作碼和操作數(shù)兩部分組成。2.機器指令:用二進制代碼表示的指令稱為機器指令。3.助記符指令:用助記符表示的指令稱為助記符指令。一個計算機的助記符指令和其機器指令是一一對應(yīng)的。4.指令系統(tǒng):一個單片機所能執(zhí)行的指令的集合稱為它的指令系統(tǒng)。5.80C51有111條指令。其指令不定長,有1字節(jié)、2字節(jié)和3字節(jié)指令。6.80C51指令中使用的符號

Rn(n=0~7):表示當前工作寄存器R0~R7中的任一個寄存器。Ri:可用作間接尋址的寄存器,只能是R0,R1兩個寄存器,i=0,1。direct:8位直接地址,在指令中表示直接尋址方式,尋址范圍256個單元。#data:8位立即數(shù)。#data16:16位立即數(shù)。addr16:16位目的地址,主要用于LCALL和LJMP指令中。addr11:11位目的地址,主要用于ACALL和AJMP指令中。rel:8位帶符號補碼數(shù),用作相對轉(zhuǎn)移指令中的偏移量。3.1單片機指令系統(tǒng)概述DPTR:16位數(shù)據(jù)指針。bit:內(nèi)部RAM(包括專用寄存器)中的直接尋址位。A:累加器ACC:直接尋址方式的累加器。B:B寄存器C:進位標志位。也是布爾機的累加位。/:加在位地址的前面,表示對該位狀態(tài)取反。@:間接尋址寄存器的前綴標志。(X):某寄存器或某單元中的內(nèi)容。((X)):由“X”間接尋址的單元中的內(nèi)容。←:箭頭左邊的內(nèi)容被箭頭右邊的內(nèi)容所取代。3.1單片機指令系統(tǒng)概述6.80C51指令中使用的符號3.280C51單片機指令尋址方式尋址方式:尋取操作數(shù)的方法(源操作數(shù)和/或目的操作數(shù))存放結(jié)果的方法(目的操作數(shù))80C51有8種尋址方式: 寄存器尋址、直接尋址、寄存器間接尋址、 立即尋址、變址尋址、位尋址、相對尋址、 隱含尋址下面以尋取源操作數(shù)的方法為例來分析定義具體的尋址方式3.280C51單片機指令尋址方式1.寄存器尋址方式

例:MOVA,R0

操作碼 寄存器地址

11101 000定義:操作數(shù)在指定的寄存器中,指令給出對應(yīng)的寄存器地址。特點:指令指出的某一個寄存器的內(nèi)容即為操作數(shù)。尋址范圍:8個當前通用寄存器Rn(R0~R7)。2.直接尋址方式例:MOVA,3AH

操作碼 存儲單元地址

E5 3A定義:操作數(shù)在數(shù)據(jù)存儲器或?qū)S眉拇嫫髦校噶罱o出該存儲單元或?qū)S眉拇嫫鞯牡刂?。特點:指令中含有操作數(shù)的地址。該地址指出了參與操作的數(shù)據(jù)所在的存儲單元地址或?qū)S眉拇嫫鞯刂?。計算機執(zhí)行時根據(jù)直接地址找到所需要的操作數(shù)。尋址范圍:片內(nèi)RAM(低128字節(jié))、專用寄存器。3.280C51單片機指令尋址方式3.寄存器間接尋址方式例:MOVA,@R0

操作碼 間址寄存器識別地址

1110011 03.280C51單片機指令尋址方式定義:操作數(shù)在數(shù)據(jù)存儲器中,指令中給出的是存放操作數(shù)存儲單元地址的間址寄存器的識別地址。3.寄存器間接尋址方式特點:指令給出的寄存器中存放的是操作數(shù)的地址。寄存器間接尋址是一種二次尋找操作數(shù)地址的尋址方式,寄存器前邊必須加前綴符號“@”。不能用于尋址特殊功能寄存器SFR。尋址范圍:內(nèi)部RAM低128B,外部RAM64KB(需結(jié)合P2口使用)。3.280C51單片機指令尋址方式4.立即尋址方式例:MOVA,#3AH ;74 3A MOVDPTR,#3AH ;90 003A

操作碼 立即數(shù)定義:指令直接給出操作數(shù),所以又叫立即數(shù)。特點:指令中直接含有所需的操作數(shù)。該操作數(shù)可以是8位的,也可以是16位的,常常處在指令的第二字節(jié)和第三字節(jié)的位置上。8位和16位的立即數(shù)分別使用#data或#data16表示,在立即數(shù)前面加“#”標志,用以和直接尋址中的直接地址(direc或bit)相區(qū)別。3.280C51單片機指令尋址方式5.變址尋址方式例:MOVCA,@A+DPTR;A←((A)+(DPTR));機器碼:93H MOVCA,@A+PC;A←((A)+(PC));機器碼:83H3.280C51單片機指令尋址方式定義:操作數(shù)存放在程序存儲器中,其單元地址為變址寄存器(累加器A)和基址寄存器(DPTR或PC)相加形成的16位地址。5.變址尋址方式特點:指令操作碼中隱含作為基址寄存器用的DPTR(或PC)和作為變址用的累加器A。在執(zhí)行變址尋址指令時,80C51單片機先把基地址(DPTR或PC的內(nèi)容)和地址偏移量(A的內(nèi)容)相加,形成操作數(shù)地址,再由操作數(shù)地址找到操作數(shù),并完成相應(yīng)的操作。變址尋址方式的指令是單字節(jié)指令。3.280C51單片機指令尋址方式6.位尋址方式

例:MOVC,3AH

操作碼 位地址

A2 3A定義:操作數(shù)是可單獨操作的一個位,指令中給出的是這個位的位地址。特點:位尋址方式類似于直接尋址方式,只不過這里的地址是某一位的位地址,并僅對這個位進行操作。尋址范圍:片內(nèi)RAM低128B中位尋址區(qū)、可位尋址的部分SFR的某些位(共83位)。3.280C51單片機指令尋址方式7.相對尋址方式例:SJMP3AH;(PC)←(PC)+2+3AH

操作碼 偏移量

80 3A定義:將程序計數(shù)器PC的當前值(取出本條指令后的PC值)與指令給出的偏移量(rel)相加,形成新的目標地址。特點:該尋址方式主要用于相對轉(zhuǎn)移指令,相對轉(zhuǎn)移的目的地址=當前指令地址+指令字節(jié)數(shù)+偏移量。它是為實現(xiàn)程序的相對轉(zhuǎn)移而設(shè)計的,指令碼中含有相對地址偏移量,能生成浮動代碼。尋址范圍:只能對程序存儲器進行尋址。相對地址偏移量是一個帶符號的8位二進制補碼,其取值范圍為

128~+127。3.280C51單片機指令尋址方式8.隱含尋址方式

例:POP3AH ;源操作數(shù)隱含在棧頂單元

MOVA,R0 ;11101 000

MOVA,#3AH ;74 3A

;操作碼 操作數(shù) ;操作數(shù)中沒有目標操作數(shù)的信息定義:操作數(shù)未在指令的操作數(shù)字段明確給出,隱含在操作碼字段,由操作碼規(guī)定。特點:操作數(shù)不由操作數(shù)字段顯式給出,隱含在操作碼字段。尋址范圍:堆棧、最常用的寄存器A、DPTR、位寄存器C和某些指令專用的寄存器B等。3.280C51單片機指令尋址方式3.380C51單片機指令分類介紹80C51指令系統(tǒng)共有111條指令,按功能分為5大類: ——數(shù)據(jù)傳送類(29條) ——算術(shù)運算類(24條) ——邏輯運算及移位類(24條) ——控制轉(zhuǎn)移類(17條) ——位操作類(17條)3.380C51單片機指令分類介紹3.3.1數(shù)據(jù)傳送類指令基本格式:MOV<目的操作數(shù)>,<源操作數(shù)>與平常所說的搬東西是不一樣的。取之不盡,一沖就掉。80C51的數(shù)據(jù)傳送類指令可分為五組內(nèi)部RAM數(shù)據(jù)傳送指令外部RAM讀寫指令程序存儲器讀指令數(shù)據(jù)交換指令堆棧操作指令

3.3.1數(shù)據(jù)傳送類指令1.內(nèi)部RAM數(shù)據(jù)傳送指令(1)8位立即數(shù)傳送指令(2)16位立即數(shù)傳送指令(3)內(nèi)部RAM之間的數(shù)傳送指令(4)通過累加器的數(shù)傳送指令3.3.1數(shù)據(jù)傳送類指令1.內(nèi)部RAM數(shù)據(jù)傳送指令(1)8位立即數(shù)傳送指令 MOVA,#data(8位立即數(shù)送累加器) MOVdirect,#data(8位立即數(shù)送直接尋址單元) MOV@Ri,#data(8位立即數(shù)送Ri間接尋址單元) MOVRn,#data(8位立即數(shù)送寄存器)3.3.1數(shù)據(jù)傳送類指令操作碼目的操作數(shù)源操作數(shù)字節(jié)數(shù)執(zhí)行周期數(shù)對標志位的影響POVACCY74H-data21√---75Hdirectdata32----0111011idata21----01111ndata21----內(nèi)部RAM數(shù)據(jù)傳送指令3.3.1數(shù)據(jù)傳送類指令(2)16位立即數(shù)傳送指令MOVDPTR,#data16(16位立即數(shù)送DPTR)(3)內(nèi)部RAM單元之間的數(shù)據(jù)傳送指令 MOVdirect2,direct1(直接尋址數(shù)據(jù)送直接尋址單元) MOVdirect,@Ri(Ri間接尋址數(shù)據(jù)送直接尋址單元) MOVdirect,Rn(寄存器內(nèi)容送直接尋址單元) MOV@Ri,direct(直接尋址數(shù)據(jù)送Ri間接尋址單元) MOVRn,direct(直接尋址數(shù)據(jù)送寄存器)內(nèi)部RAM數(shù)據(jù)傳送指令3.3.1數(shù)據(jù)傳送類指令(4)通過累加器的數(shù)據(jù)傳送指令(內(nèi)部RAM讀寫指令) MOVA,direct(直接尋址數(shù)據(jù)送累加器) MOVA,@Ri(Ri間接尋址數(shù)據(jù)送累加器) MOVA,Rn(寄存器內(nèi)容送累加器) MOVdirect,A(累加器內(nèi)容送直接尋址單元) MOV@Ri,A(累加器內(nèi)容送Ri間接尋址單元) MOVRn,A(累加器內(nèi)容送寄存器)內(nèi)部RAM數(shù)據(jù)傳送指令3.3.1數(shù)據(jù)傳送類指令例1設(shè)內(nèi)部RAM(30H)=40H,(40H)=10H,(10H)=00H,(P1)=0CAH,分析以下程序執(zhí)行后各單元及寄存器、P2口的內(nèi)容。MOVR0,#30H ;R0←30HMOVA,@R0 ;A←((R0))MOVR1,A ;R1←(A)MOVB,@R1 ;B←((R1))MOV@R1,P1 ;(R1)←(P1)MOVP2,P1 ;P2←(P1)MOV10H,#20H ;10H←20H

執(zhí)行上述指令后的結(jié)果為:(R0)=30H,(R1)=(A)=40H,(B)=10H,(40H)=(P2)=(P1)=CAH,(10H)=20H。內(nèi)部RAM數(shù)據(jù)傳送指令80C51單片機片內(nèi)RAM數(shù)據(jù)傳送圖3.3.1數(shù)據(jù)傳送類指令內(nèi)部RAM數(shù)據(jù)傳送指令80C51單片機片內(nèi)RAM一般傳送指令表3.3.1數(shù)據(jù)傳送類指令內(nèi)部RAM數(shù)據(jù)傳送指令80C51單片機片內(nèi)RAM一般傳送指令表3.3.1數(shù)據(jù)傳送類指令2.外部數(shù)據(jù)存儲器讀/寫指令3.3.1數(shù)據(jù)傳送類指令(1)Ri作間址寄存器的外部RAM單元讀/寫指令

MOVXA,@Ri(Ri間接尋址的外部RAM單元讀)MOVX@Ri,A(Ri間接尋址的外部RAM單元寫)(2)DPTR作間址寄存器的外部RAM單元讀/寫指令

MOVXA,@DPTR(DPTR間接尋址的外部RAM單元讀)MOVX@DPTR,A(DPTR間接尋址的外部RAM單元寫)2.外部數(shù)據(jù)存儲器讀/寫指令3.3.1數(shù)據(jù)傳送類指令例2設(shè)外部RAM(0203H)=FFH,分析以下指令執(zhí)行后的結(jié)果。MOVDPTR,#0203H;DPTR←0203HMOVXA,@DPTR;A←((DPTR))MOV30H,A ;30H←(A)MOVA,#0FH;A←0FHMOVX@DPTR,A;(DPTR)←(A)執(zhí)行結(jié)果為:(DPTR)=0203H,(30H)=FFH,(0203H)=(A)=0FH。3.程序存儲器讀指令MOVCA,@A+DPTR(程序存儲器讀)MOVCA,@A+PC(程序存儲器讀)3.3.1數(shù)據(jù)傳送類指令例3用查表法把累加器中的十六進指數(shù)轉(zhuǎn)換為ASCII碼的程序 HBA: INCA MOVCA,@A+PC RET ;十六進制數(shù)ASCII碼表 DB30H,31H,…,39H,41H,42H,…,46H4.數(shù)據(jù)交換指令3.3.1數(shù)據(jù)傳送類指令(1)整字節(jié)交換指令XCHA,Rn(寄存器尋址字節(jié)交換)XCHA,direct(直接尋址字節(jié)交換)XCHA,@Ri(Ri間接尋址字節(jié)交換)(2)半字節(jié)交換指令XCHDA,@Ri(Ri間接尋址半字節(jié)交換)(3)累加器高低半字節(jié)交換指令SWAPA(累加器內(nèi)容高低半字節(jié)交換)例4

設(shè)(R0)=30H,(30H)=4AH,(A)=28H,則執(zhí)行XCHA,@R0后,結(jié)果為(A)=4AH,(30H)=28H。執(zhí)行XCHDA,@R0后,結(jié)果為(A)=2AH,(30H)=48H。執(zhí)行SWAPA后,結(jié)果為(A)=82H。3.3.1數(shù)據(jù)傳送類指令5.堆棧操作指令

PUSHdirect(進棧);SP

(SP)+1, ;(SP)

(direct)POPdirect(出棧);(direct)((SP)), ;SP(SP)-13.3.1數(shù)據(jù)傳送類指令例5若在外部程序存儲器中,從2000H單元開始依次存放0~9的平方值。試用查表指令求3的平方值。要求保持DPTR中的內(nèi)容不變。完成上述功能的程序如下:MOVA,#03H ;(A)←03HPUSHDPH ;保護DPTR高8位入棧PUSHDPL ;保護DPTR低8位入棧MOVDPTR,#2000H ;(DPTR)←2000HMOVCA,@A+DPTR ;(A)←(2000H+03H)POPDPL ;彈出DPTR低8位POPDPH ;彈出DPTR高8位3.3.1數(shù)據(jù)傳送類指令執(zhí)行結(jié)果:(A)=09H,DPTR內(nèi)容未變。操作類型助記符說明MOV、MOVX、MOVC傳送操作XCH、XCHD、SWAP交換操作PUSH、POP堆棧操作6.數(shù)據(jù)傳送類指令小結(jié):3.3.1數(shù)據(jù)傳送類指令源操作數(shù)尋址方式寄存器尋址、直接尋址、寄存器間接尋址、立即尋址、變址尋址、隱含尋址。目的操作數(shù)尋址方式寄存器尋址、直接尋址、寄存器間接尋址、隱含尋址。對標志位的影響除了目的操作數(shù)為ACC的指令影響奇偶標志P外,一般不影響標志位。3.3.2算術(shù)運算類指令主要用于8位無符號數(shù)的算術(shù)運算,包括:二目運算:加、減、乘、除,這類指令影響PSW中的有關(guān)狀態(tài)位。和單目運算:加1、減1,這類指令除了目的操作數(shù)為ACC的指令影響奇偶標志P外,一般不影響標志位。3.380C51單片機指令分類介紹80C51的數(shù)據(jù)傳送類指令有七組1.不帶進位的加法指令2.帶進位的加法指令3.帶借位的減法指令4.加1指令5.減1指令6.乘除指令7.十進制調(diào)整指令3.3.2算術(shù)運算類指令1.不帶進位的加法指令A(yù)DDA,#data(立即數(shù)加法)ADDA,direct(直接尋址加法)ADDA,@Ri(間接尋址加法)ADDA,Rn(寄存器尋址加法)3.3.2算術(shù)運算類指令操作碼目的操作數(shù)源操作數(shù)字節(jié)數(shù)執(zhí)行周期數(shù)對標志位的影響POVACCY24H-data21√√√√25H-direct32√√√√0010011-i21√√√√00101-n21√√√√2.帶進位加法指令A(yù)DDCA,#data(立即數(shù)帶進位加法)ADDCA,direct(直接尋址帶進位加法)ADDCA,@Ri(間接尋址帶進位加法)ADDCA,Rn(寄存器尋址帶進位加法)3.3.2算術(shù)運算類指令3.帶借位減法指令SUBBA,#data(立即數(shù)帶借位減法)SUBBA,direct(直接尋址帶借位減法)SUBBA,@Ri(間接尋址帶借位減法)SUBBA,Rn(寄存器尋址帶借位減法)例6計算6789H+12ABH,結(jié)果放到寄存器R7,R6。3.3.2算術(shù)運算類指令 MOVA,#89H ADDA,#ABH MOVR6,A MOVA,#67H ADDCA,#12H MOVR7,A結(jié)果:(R6)=34H,(R7)=(A)=7AH, Cy:0,AC:0,OV:0,P:14.加1指令I(lǐng)NCA(累加器加1)INCdirect(直接尋址單元加1)INC@Ri(間接尋址單元加1)INCRn(寄存器加1)INCDPTR(16位數(shù)據(jù)指針加1)3.3.2算術(shù)運算類指令操作碼目的操作數(shù)源操作數(shù)字節(jié)數(shù)執(zhí)行周期數(shù)對標志位的影響POVACCY04H--11√---05Hdirect-21----0000011i-11----00001n-11----A3H--12----5.減1指令DECA(累加器減1)DECdirect(直接尋址單元減1)DEC@Ri(間接尋址單元減1)DECRn(寄存器減1) 例7設(shè)(R0)=7EH,(7EH)=FFH,(7FH)=38H,(DPTR)=10FEH,逐條分析下列指令執(zhí)行后各單元的內(nèi)容。INC@R0;使7EH單元內(nèi)容由FFH變?yōu)?0HINCR0;使R0的內(nèi)容由7EH變?yōu)?FHINC@R0;使7FH單元內(nèi)容由38H變?yōu)?9HINCDPTR;使DPL為FFH,DPH不變INCDPTR;使DPL為00H,DPH為11HINCDPTR;使DPL為01H,DPH不變3.3.2算術(shù)運算類指令3.3.2算術(shù)運算類指令加減法指令表6.乘除指令MULAB(乘法:B,A(A)*(B))DIVAB(除法:A(A)/(B)的商,B(A)/(B)的余數(shù))3.3.2算術(shù)運算類指令操作碼目的操作數(shù)源操作數(shù)字節(jié)數(shù)執(zhí)行周期數(shù)對標志位的影響POVACCYA4H--14√√-√84H--14√√√√注:CY被清0例8設(shè)(A)=4EH,(B)=5DH,則執(zhí)行MULAB指令后,乘積是1C56H,(B)=1CH,(A)=56H。再執(zhí)行DIVAB指令后,(A)=3,(B)=2。3.3.2算術(shù)運算類指令7.十進制調(diào)整指令DAA(十進制調(diào)整)若(AC)=1或(A[3:0])>9,則A[3:0]←(A[3:0])+06H若(CY)=1、(A[7:4])>9或(A[7:4])=9 且低4位修正后有進位,則A[7:4]←(A[7:4])+06H注:只能用于BCD碼加法調(diào)整。操作碼目的操作數(shù)源操作數(shù)字節(jié)數(shù)執(zhí)行周期數(shù)對標志位的影響POVACCYD4H--11√--√例9下列程序運行結(jié)果。 A CY AC MOVA,#58H ;58H - - ADDA,#65H ;BDH 0 0 DAA ;23H 1 0 DAA ;83H 1 0 MOVA,#99H ;99H 1 0 ADDA,#99H ;32H 1 1 DAA ;98H 1 1 DAA ;FEH 1 1 MOVA,#12H ;12H 1 1 ADDA,#23H ;35H 0 0 DAA ;35H 0 03.3.2算術(shù)運算類指令7.十進制調(diào)整指令主要用于邏輯運算和移位操作,包括二元邏輯運算(按位操作):與、或、異或和一元運算和操作:取反、清零、循環(huán)移位。這些指令除了目的操作數(shù)為ACC的指令影響奇偶標志P外,一般不影響標志位。邏輯運算按位操作。3.3.3邏輯運算及移位類指令3.3.3邏輯運算及移位類指令80C51的邏輯運算及移位類指令可分為5組1.邏輯“與”運算指令2.邏輯“或”運算指令3.邏輯“異或”運算指令4.累加器清0和取反指令5.移位指令3.3.3邏輯運算及移位類指令1.邏輯“與”運算指令A(yù)NLdirect,A(累加器與直接尋址單元邏輯“與”)ANLdirect,#data(立即數(shù)與直接尋址單元邏輯“與”)ANLA,#data(立即數(shù)與累加器邏輯“與”)ANLA,direct(直接尋址單元與累加器邏輯“與”)ANLA,@Ri(間接尋址單元與累加器邏輯“與”)ANLA,Rn(寄存器與累加器邏輯“與”)例10(P1)=C5H=11000101B,清零P1口高4位而保留低4位。執(zhí)行指令:ANLP1,#0FH結(jié)果為:(P1)=05H=00000101B。2.邏輯“或”運算指令ORLdirect,A(累加器與直接尋址單元邏輯“或”)ORLdirect,#data(立即數(shù)與直接尋址單元邏輯“或”)ORLA,#data(立即數(shù)與累加器邏輯“或”)ORLA,direct(直接尋址單元與累加器邏輯“或”)ORLA,@Ri(間接尋址單元與累加器邏輯“或”)ORLA,Rn(寄存器與累加器邏輯“或”)3.3.3邏輯運算及移位類指令

例11若(A)=C0H,(R0)=3FH,(3FH)=0FH,則執(zhí)行指令:ORLA,@R0結(jié)果為:(A)=CFH=11001111B。3.邏輯“異或”運算指令XRLdirect,A(累加器與直接尋址單元邏輯“異或”)XRLdirect,#data(立即數(shù)與直接尋址單元邏輯“異或”)XRLA,#data(立即數(shù)與累加器邏輯“異或”)XRLA,direct(直接尋址單元與累加器邏輯“異或”)XRLA,@Ri(間接尋址單元與累加器邏輯“異或”)XRLA,Rn(寄存器與累加器邏輯“異或”)3.3.3邏輯運算及移位類指令4.累加器清0和取反指令組 CLRA(累加器清0) CPLA(累加器按位取反)3.3.3邏輯運算及移位類指令例12設(shè)(A)=5AH,且(CY)=1,則 執(zhí)行指令RLA后,(A)=B4H,(CY)=1。 執(zhí)行指令RRA后,(A)=2DH,(CY)=1。 執(zhí)行指令RLCA后,(A)=B5H,(CY)=0。 執(zhí)行指令RRCA后,(A)=ADH,(CY)=0。5.移位指令RLA(累加器內(nèi)容循環(huán)左移)RRA(累加器內(nèi)容循環(huán)右移)RLCA(通過CY循環(huán)左移)RRCA(通過CY循環(huán)右移)邏輯操作指令表3.3.3邏輯運算及移位類指令3.3.3邏輯運算及移位類指令邏輯操作指令表續(xù)ANLA,#0FH ;屏蔽A的高4位SWAPA ;把A的低4位交換到A的高4位ANLP1,#0FH ;清P1口高4位ORLP1,A;輸出A的高4位到P1口高4位例13把累加器A中的低4位狀態(tài),通過P1口的高4位輸 出,P1口的低4位狀態(tài)不變。3.3.3邏輯運算及移位類指令3.3.4控制轉(zhuǎn)移類指令控制轉(zhuǎn)移類指令有以下三種:無條件轉(zhuǎn)移條件轉(zhuǎn)移子程序調(diào)用與返回此類指令修改PC值,改變程序流程,但一般不影響PSW的標志位。1.無條件轉(zhuǎn)移指令(1)長轉(zhuǎn)移指令 LJMPaddr16 ;64K(2)絕對轉(zhuǎn)移指令 AJMPaddr11 ;2K(3)相對轉(zhuǎn)移指令 SJMPrel;-126-+129(4)變址尋址轉(zhuǎn)移指令 JMP@A+DPTR (該指令又稱散轉(zhuǎn)指令)3.3.4控制轉(zhuǎn)移類指令例14若AJMP指令的地址(PC)=27F0H,則執(zhí)行指令A(yù)JMP0FFH后,(PC)=20FFH,程序向后轉(zhuǎn)到20FFH單元開始執(zhí)行。若AJMP指令的地址(PC)=27FFH,則執(zhí)行指令A(yù)JMP0FFH后,(PC)=28FFH,程序向前轉(zhuǎn)到28FFH單元開始執(zhí)行。例15

根據(jù)累加器A的值,轉(zhuǎn)不同處理程序的入口。3.3.4控制轉(zhuǎn)移類指令1.無條件轉(zhuǎn)移指令 MOVDPTR,#TABLE;表首地址送DPTRRLAJMP@A+DPTR ;根據(jù)A值轉(zhuǎn)移TABLE: AJMPTAB0 ;當(A)=0時轉(zhuǎn)TAB0執(zhí)行AJMPTAB1;當(A)=1時轉(zhuǎn)TAB1執(zhí)行AJMPTAB2;當(A)=2時轉(zhuǎn)TAB2執(zhí)行條件轉(zhuǎn)移指令全部為相對轉(zhuǎn)移指令。條件轉(zhuǎn)移指令在滿足所要求的條件時才進行轉(zhuǎn)移;否則,程序繼續(xù)按順序執(zhí)行下一條指令。有三種:(1)累加器判零轉(zhuǎn)移指令(2)數(shù)值比較轉(zhuǎn)移指令(3)減1條件轉(zhuǎn)移指令3.3.4控制轉(zhuǎn)移類指令2.條件轉(zhuǎn)移指令3.3.4控制轉(zhuǎn)移類指令(1)累加器判零轉(zhuǎn)移指令JZrel(累加器為零轉(zhuǎn)移)

JNZrel(累加器非零轉(zhuǎn)移)例16將片外RAM首地址為DATA1的一個數(shù)據(jù)塊(結(jié)束標志為0)傳送到片內(nèi)RAM首地址為DATA2的存儲區(qū)中。

分析:外部RAM向內(nèi)部RAM的數(shù)據(jù)傳送一定要經(jīng)過累加器A。利用判零條件轉(zhuǎn)移正好可以判別是否要繼續(xù)傳送或者終止。完成數(shù)據(jù)傳送的參考程序如下頁:3.3.4控制轉(zhuǎn)移類指令2.條件轉(zhuǎn)移指令 MOVDPTR,#DATA1;DTPR作為外部數(shù)據(jù)塊的地址指針 MOVR1,#DATA2;R1作為內(nèi)部數(shù)據(jù)塊的地址指針LOOP:MOVXA,@DPTR;取外部RAM數(shù)據(jù)送入A MOV@R1,A;數(shù)據(jù)傳送至內(nèi)部RAM單元

JZFINISH ;數(shù)據(jù)為零則終止傳送 INCDPTR ;修改指針,指向下一數(shù)據(jù)地址 INCR1 SJMPLOOP;循環(huán)取數(shù)FINISH:END(1)累加器判零轉(zhuǎn)移指令2.條件轉(zhuǎn)移指令3.3.4控制轉(zhuǎn)移類指令(2)數(shù)值比較轉(zhuǎn)移指令

CJNEA,#data,rel(累加器內(nèi)容與立即數(shù)比較,不等則轉(zhuǎn)移)CJNEA,direct,rel(累加器內(nèi)容與直接尋址單元比較,不等則轉(zhuǎn)移)

CJNERn,#data,rel(寄存器內(nèi)容與立即數(shù)比較,不等則轉(zhuǎn)移)CJNE@Ri,#data,rel(間接尋址單元與立即數(shù)比較,不等則轉(zhuǎn)移)影響標志位CY,≥0時,清0;反之,置1。例17

當從P1口輸入數(shù)據(jù)為01H時,程序繼續(xù)執(zhí)行,否則等待,直到P1口出現(xiàn)01H。3.3.4控制轉(zhuǎn)移類指令2.條件轉(zhuǎn)移指令分析:訪問P1口,要用直接地址。判斷P1口數(shù)據(jù)并轉(zhuǎn)不同地方進行相應(yīng)操作要用累加器內(nèi)容與直接尋址單元內(nèi)容比較型條件轉(zhuǎn)移指令。等待就是原地不動。參考程序: MOVA,#01H ;立即數(shù)01H送AWAIT:CJNEA,P1,WAIT ;(P1)≠01H,則等待

.

. .(2)數(shù)值比較轉(zhuǎn)移指令2.條件轉(zhuǎn)移指令3.3.4控制轉(zhuǎn)移類指令(3)減1條件轉(zhuǎn)移指令 DJNZRn,rel (寄存器減1條件轉(zhuǎn)移) DJNZdirect,rel(直接尋址單元減1條件轉(zhuǎn)移)例18

將內(nèi)部RAM從DATA單元開始的10個無符號數(shù)相加,相加結(jié)果送SUM單元保存。分析:將10個無符號數(shù)相加,可以先把累加器清0,再依次加上10個數(shù),就可得到所要的結(jié)果。加10次,可以用循環(huán)程序?qū)崿F(xiàn),給某一寄存器送10,通過減1條件轉(zhuǎn)移指令控制循環(huán)次數(shù)。設(shè)相加結(jié)果不超過8位二進制數(shù),則參考程序如下頁:3.3.4控制轉(zhuǎn)移類指令2.條件轉(zhuǎn)移指令 MOVR0,#0AH ;設(shè)置循環(huán)次數(shù)MOVR1,#DATA;R1作地址指針,指向數(shù)據(jù)塊首地址CLRA ;A清零LOOP:ADDA,@R1;加一個數(shù)INCR1 ;修改指針,指向下一個數(shù)DJNZR0,LOOP;R0減1,不為0循環(huán)MOVSUM,A ;存10個數(shù)相加的和(3)減1條件轉(zhuǎn)移指令

例19MOV23H,#0AHCLRALOOP:ADDA,23HDJNZ23H,LOOP

END該程序段的執(zhí)行過程是:將23H單元中的數(shù)連續(xù)相加,存至A中,每加一次,23H單元中的數(shù)值減1,直至減到0。其結(jié)果為?3.3.4控制轉(zhuǎn)移類指令2.條件轉(zhuǎn)移指令3.子程序調(diào)用與返回指令(1)絕對調(diào)用指令 ACALLaddr11(2)長調(diào)用指令 LCALLaddr16(3)返回指令 RET(子程序返回) RETI(中斷服務(wù)子程序返回)RETI指令除恢復(fù)斷點地址外,還恢復(fù)CPU響應(yīng)中斷時硬件自動保護的現(xiàn)場信息,清除中斷響應(yīng)時所置位的狀態(tài)觸發(fā)器,使得已申請或以后申請的同級或低級中斷申請可以得到

溫馨提示

  • 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

提交評論