




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第3講
單片機匯編指令系統(tǒng)《51單片機原理及程序設計》王欣飛、謝龍漢、謝鋒然編著清華大學出版社51單片機原理及程序設計第3講
單片機匯編指令系統(tǒng)3.1實例模仿—數(shù)據(jù)運算與轉移3.2MCS-51單片機匯編指令概述3.3七種尋址方式3.451單片機指令系統(tǒng)3.5實例操作—BCD加減法實現(xiàn)3.6實例練習—條件轉移指令的使用51單片機原理及程序設計3.1實例模仿—數(shù)據(jù)運算與轉移【實例3-1】利用指令將20H以及30H分別送入單片機片內RAM中,存放地址分別為20H以及30H,同時利用加法指令將兩個數(shù)相加的結果送至40H地址中。【思路分析】數(shù)據(jù)運算以及轉移指令是MCS-51單片機匯編語言中最為常見的指令。根據(jù)數(shù)據(jù)在單片機內部存儲區(qū)域的不同,我們需要利用不同的尋址方式來讀取或者寫入數(shù)據(jù)。題目要求將數(shù)據(jù)存放到片內RAM的低128B中,因此我們可以利用直接尋址的方式來完成操作。51單片機原理及程序設計3.2MCS-51單片機匯編指令概述3.2.1指令與指令系統(tǒng)3.2.251單片機匯編指令3.2.351匯編指令格式及常用符號解釋51單片機原理及程序設計3.2.1指令與指令系統(tǒng)指令是使計算機內部執(zhí)行相應動作的一種操作,是提供給用戶編程使用的一種命令。指令系統(tǒng)指的是計算機能夠執(zhí)行的全部操作對應指令的集合,包含了該計算機能夠執(zhí)行的所有指令。用戶可以從兩個角度去看待計算機指令系統(tǒng)所代表的意義。從計算機的角度而言,計算機的指令系統(tǒng)反映了計算機能夠實現(xiàn)的操作功能,即其能夠實現(xiàn)的操作都需要通過指令系統(tǒng)所包含的指令體現(xiàn)出來。從使用者的角度而言,計算機的指令系統(tǒng)為計算機使用者提供了軟件基礎,即使用者可以通過指令系統(tǒng)命令計算機完成其所能完成的操作。在計算機中,指令具有功能,時間以及空間三種屬性:功能屬性指的是每條指令都對應一個特定的操作功能時間屬性指的每條指令的執(zhí)行都需要消耗一定的時間空間屬性指的是每條指令都需要在存儲器中占據(jù)一定的存儲空間。在指令的使用過程中,最為重要的指令的功能屬性,使用者只有熟悉了解指令的功能才能正確使用指令表達意愿。而指令的時間以及空間屬性在一些場合中也需要被使用。例如我們在編制一段延時程序時需要掌握指令的時間屬性,而在編制相對轉移程序時需要掌握指令的空間屬性。51單片機原理及程序設計3.2.251單片機匯編指令計算機編程語言是計算機指令的表達形式。在計算機中包含有三種形式的計算機語言:機器語言、匯編語言以及高級語言。下面分別對這三種語言進行簡單介紹。1.機器語言機器語言是用二進制代碼表示的計算機能直接識別和執(zhí)行的一種機器指令的集合。它是計算機的設計者通過計算機的硬件結構賦予計算機的操作功能。機器語言具有靈活、直接執(zhí)行和速度快等特點。但是機器語言具有不便于識別、記憶、理解以及使用的特性,因此現(xiàn)在在編程中一般很少直接使用機器語言進行編程。2.匯編語言為了克服機器語言難讀、難編、難記和易出錯的缺點,人們就用與代碼指令實際含義相近的英文縮寫詞、字母和數(shù)字等符號來取代指令代碼(如用ADD表示運算符號“+”的機器代碼),于是就產生了匯編語言。匯編語言是一種用助記符表示的仍然面向機器的計算機語言。匯編語言并不能被計算機直接識別以及執(zhí)行,必須執(zhí)行一個中間環(huán)節(jié)把它翻譯成機器語言程序,這個中間過程稱為匯編。利用匯編語言編制程序具有占用內存空間小,執(zhí)行速度快的特點,但是相較于高級語言,其使用方法仍然較為繁瑣,通用性也較差。3.高級語言與機器語言以及匯編語言不同,高級語言是面向用戶的編程語言,具有語意確定、規(guī)則明確、自然直觀和通用易學的特點。高級語言需要經(jīng)過編譯或者解釋之后才能轉為二進制代碼為計算機所識別。目前在微型計算機中編程中的多數(shù)程序是由高級語言編制而成的,常見的計算機高級語言包括BASIC,PASCAL,C,VC,VB等。51單片機原理及程序設計3.2.251單片機匯編指令在單片機的編程中匯編語言是最為常見的編程語言。通過匯編語言編制的單片機程序具有執(zhí)行速度快,效率高,占用資源少的優(yōu)點。對于不同單片機,其匯編指令系統(tǒng)包含的指令條數(shù)并不相同。51單片機匯編指令系統(tǒng)共有111條指令,其中按照不同的劃分方法可以分為不同的類別。1)按照功能不同可以將指令系統(tǒng)分為數(shù)據(jù)傳送指令、算數(shù)運算指令、邏輯運算指令、移位指令,程序轉移指令、位操作指令等6大類。2)根據(jù)占據(jù)的空間不同可以分為單字節(jié)指令(49條)、雙字節(jié)指令(46條)以及三字節(jié)指令(16條)三大類。3)按照指令執(zhí)行時間不同可以分為單機器周期指令(64條)、雙機器周期指令(45條)以及四機器周期指令(2條)三類。51單片機原理及程序設計3.2.351匯編指令格式及常用符號解釋常用符號如下所示:1)Rn:代表當前選定的寄存器區(qū)中的8個工作寄存器R0~R7,即n=0~7。2)Ri:代表當前選定的寄存器區(qū)中的2個寄存器R0、R1,以@Ri的形式出現(xiàn)用于寄存器間接尋址。3)Direct:代表8位直接尋址的地址,8位內部RAM單元的地址,可以是一個內部數(shù)據(jù)區(qū)RAM單元(00H~7FH)或特殊功能寄存器地址。4)#data:指令中的8位立即數(shù)。5)#data16:指令中的16位立即數(shù)。6)Addr16:16位的目的地址,用于LJMP,LCALL指令,可指向64KB程序存儲器地址空間。7)Addr11:11位的目的地址,用于AJMP,ACALL指令。目的地址必須與下一條指令的第一個字節(jié)在同一個2KB程序存儲器地址空間之內。8)rel:8位帶符號的偏移量字節(jié),用于SJMP和所有條件轉移指令中。偏移量相對于下一條指令的第一個字節(jié)計算,在-128~+127范圍內取值。9)bit:內部數(shù)據(jù)RAM或特殊功能寄存器中的可直接尋址位。10)(X):X單元中的內容。
11)((X)):代表以X單元的內容為地址的存儲器單元內容12)/:位操作數(shù)的前綴,表示對該位取反。13)←:箭頭左邊的內容被箭頭右邊的內容所代替。51單片機原理及程序設計3.2.351匯編指令格式及常用符號解釋一條指令通常由操作碼以及操作數(shù)兩個部分組成。其中操作碼部分比較簡單,代表了執(zhí)行該指令時需要進行何種操作。該指令是進行加法操作或者減法操作,轉移操作或者置位操作都由操作碼決定。操作數(shù)部分代表了本次指令需要操作的數(shù)據(jù)本身或者該數(shù)據(jù)存放的地址。在51匯編指令格式中,操作數(shù)可以分為目的操作數(shù)以及源操作數(shù)兩種,其中源操作數(shù)通常指代指令操作的對象,而目的操作數(shù)通常用于存放操作的結果。匯編指令常見編程格式如下:[標號:]操作碼助記符[目的操作書],[源操作數(shù)];[注釋]在指令的學習中,我們需要借助一些符號來對指令的操作對象以及操作范圍進行講解。下面將描述指令的一些符號以及約定意義加以說明。51單片機原理及程序設計3.3七種尋址方式3.3.1
寄存器尋址3.3.2
寄存器間接尋址3.3.3
立即尋址3.3.4
直接尋址3.3.5變址尋址3.3.6
相對尋址3.3.7
位尋址
51單片機原理及程序設計3.3.1寄存器尋址3.3.1寄存器尋址寄存器尋址指的是在特定的寄存器中存放或者讀取操作數(shù)的操作。這些寄存器包含有累加器A,寄存器B以及工作寄存器R0~R7。在寄存器尋址指令中直接用寄存器號來替代寄存器中內容,如下所示兩個指令均為寄存器尋址。INC A;MOV A,R0;其中第一條指令代表將寄存器A中的內容加去1,例如原來寄存器A中內容為30H,則執(zhí)行該指令后A中內容變?yōu)?1H。第二條指令代表將工作寄存器R0中的內容賦值給寄存器A。例如原來寄存器中A的內容為30H,R0中的內容為50H,則執(zhí)行該指令后A中的內容變?yōu)?0H。51單片機原理及程序設計3.3.2寄存器間接尋址3.3.2寄存器間接尋址寄存器間接尋址的特點在于寄存器中包含有將要被尋找的操作數(shù)地址。在執(zhí)行寄存器間接尋址指令時,CPU首先從寄存器中找到一個地址,繼而從這個地址中找到被操作數(shù)。可以作為寄存器間接尋址的寄存器包括@Ri(R0和R1)以及@DPTR。如下所示指令為寄存器間接尋址。MOV A,@R0; A←(R0)如果原來A中的數(shù)據(jù)為30H,R0中存的數(shù)為50H,片內RAM50H存的數(shù)據(jù)為60H,則該指令的作用在于將片內RAM地址50H中的數(shù)據(jù)60H取出賦值給A,即A中的內容變?yōu)?0H。在寄存器間接尋址中寄存器的@前綴不能丟失,否則指令變?yōu)榧拇嫫鲗ぶ罚鴪?zhí)行指令后A中的內容變?yōu)?0H。在使用Ri作為寄存器時,采用寄存器間接尋址額可以訪問片內RAM的256個單元地址以及片外RAM的低256位地址。采用DPTR作為寄存器時可以采用寄存器間接尋址訪問片外RAM的64KB地址。需要注意的是寄存器間接尋址不能用于尋址特殊功能寄存器SFR,例如采用下面的程序無法訪問特殊功能寄存器SP。 MOV R0,#80H; MOV A,@R0;51單片機原理及程序設計3.3.3立即尋址3.3.3立即尋址立即尋址的特點是操作碼后面緊接著需要尋址的操作數(shù)。該操作數(shù)與操作碼一起位于程序存儲器中,不需要經(jīng)過別的途徑去尋找。立即尋址中的操作數(shù)稱之為立即數(shù),這個數(shù)可以是8位2進制數(shù),用#data表示,也可以是16位立即數(shù),用#data16表示。如下所示兩個指令均為立即尋址方式:MOVA,#30H ;A←30HMOVDPTR,#1486H ;DPTR←1486H第一條指令代表將30H作為8位2進制數(shù)送入到累加器A中,第二條指令代表將1486H作為16位2進制數(shù)送入到DPTR中。在進行立即尋址中,操作數(shù)前面的#前綴不能丟失,這是立即尋址與直接尋址在格式上的唯一區(qū)別。51單片機原理及程序設計3.3.4直接尋址3.3.4直接尋址
直接尋址指的是在指令中直接給出操作數(shù)所在的存儲器地址的尋址方式。在直接尋址指令中,直接地址通常用direct表示。如下所示指令即為直接尋址。MOVA,30H;A←(30H)執(zhí)行上面的指令會將30H中的內容賦值給寄存器A中的內容。如果30H中存放的數(shù)據(jù)為50H,則執(zhí)行上述指令之后A中的內容會變?yōu)?0H。直接尋址與立即尋址在格式上的區(qū)別在于立即尋址立即數(shù)前面含有前綴#,使用過程中應注意不可將前綴丟失。采用直接尋址方式可以訪問片內RAM的低128單元地址,同時可以訪問高128單元中的特殊功能寄存器SFR地址。由于寄存器間接尋址不能訪問SFR,因此采用直接尋址是訪問特殊功能寄存器SFR的唯一方法。但是對于52系列單片機,其內部含有256B的數(shù)據(jù)存儲器,片內RAM的高128單元地址與SFR地址重疊。采用直接尋址方法不能訪問片內RAM的高128單元的地址,只能采用寄存器間接尋址的方式對此區(qū)域進行訪問。在使用直接尋址方式訪問特殊功能寄存器SP時有如下兩種方式,兩種方式都屬于直接尋址。但是在實際使用中推薦使用后一種方式,因為相較于特殊功能寄存器的地址,其代號更易于讀寫記憶。MOVA,81H; A←(81H)MOVA,SP; A←SP 51單片機原理及程序設計3.3.4直接尋址3.3.5變址尋址變址尋址是在一個基址寄存器加變址寄存器的基礎上進行間接尋址的操作。變址尋址具有以下幾個方面的特點:1)基址寄存器為數(shù)據(jù)指針DPTR或者程序計數(shù)器PC,在DPTR或者PC中應該預先存放有操作數(shù)的基地址2)變址寄存器為累加器A,在累加器A中應該預先存放有作為變址的偏移量,該偏移量應該為00H~FFH范圍內的無符號數(shù)3)在執(zhí)行變址尋址指令時首先將基地址與變址的數(shù)據(jù)相加后作為操作數(shù)的物理地址,繼而對此物理地址進行尋址。4)采用變址尋址時,訪問地址為程序存儲器ROM區(qū),而非數(shù)據(jù)存儲器RAM區(qū)。由于基址寄存器可能為DPTR或者PC,因此共有兩條變址尋址指令:MOVC A,@A+DPTR; A←(A+DPTR)MOVC A,@A+PC; A←(A+PC)51單片機原理及程序設計3.3.5變址尋址3.3.5變址尋址變址尋址是在一個基址寄存器加變址寄存器的基礎上進行間接尋址的操作。變址尋址具有以下幾個方面的特點:1)基址寄存器為數(shù)據(jù)指針DPTR或者程序計數(shù)器PC,在DPTR或者PC中應該預先存放有操作數(shù)的基地址2)變址寄存器為累加器A,在累加器A中應該預先存放有作為變址的偏移量,該偏移量應該為00H~FFH范圍內的無符號數(shù)3)在執(zhí)行變址尋址指令時首先將基地址與變址的數(shù)據(jù)相加后作為操作數(shù)的物理地址,繼而對此物理地址進行尋址。4)采用變址尋址時,訪問地址為程序存儲器ROM區(qū),而非數(shù)據(jù)存儲器RAM區(qū)。由于基址寄存器可能為DPTR或者PC,因此共有兩條變址尋址指令: MOVC A,@A+DPTR; A←(A+DPTR) MOVC A,@A+PC; A←(A+PC)如下所示的為一段變址尋址程序,采用下面的程序時最終會將地址3030H中的內容賦值給累加器A。。MOV DPTR,#3000H; A←3000HMOV A,#30H;
A←30HMOVC A,@A+DPTR; A←(3030H)
51單片機原理及程序設計3.3.6相對尋址3.3.6相對尋址相對尋址方式在相對轉移指令中使用,其指令碼中含有需要相對轉移的地址偏移量rel。計算相對轉移的基地址為當前PC地址。相對尋址指令的一般格式如下所示:[操作碼] rel;其中操作碼可以為JZ,SJMP等相對轉移指令。在使用相對尋址時有以下兩點需要注意:1)計算相對轉移地址時PC為執(zhí)行指令后的當前值。如果初始程序存放地址為3000H,執(zhí)行的轉移指令為雙字節(jié)指令,則執(zhí)行完指令后PC的當前值為PC+2,即3002H2)地址偏移量rel的取值范圍為補碼范圍中的-128~127。其中正數(shù)表示為從當前PC地址向后轉移,負數(shù)表示為從當前PC地址向前轉移。轉移指令的目標地址計算方法如下所示。目標地址=當前PC值+rel=指令存儲地址+指令字節(jié)數(shù)+rel例如指令JZ54H的存儲地址為3000H,則轉移的目標地址為3000+2+54=3056H。51單片機原理及程序設計3.3.7位尋址3.3.7位尋址
位尋址中的操作數(shù)為寄存器中的位地址。在位尋址指令中,位地址用bit表示,以區(qū)別直接尋址中的字節(jié)地址direct。在51單片機可以進行位尋址的存儲器范圍有兩部分,一個是片內RAM中的位尋址區(qū),字節(jié)范圍為20H~2FH共128位,另一個是特殊功能寄存器區(qū)中可按位尋址的特殊功能寄存器。為了增加程序的易讀性,51單片機對位尋址提供了多種表示方法。對于位尋址區(qū)中07位進行位尋址時可以采用如下兩種方法表示: MOV C,07H; C←(07H) MOV C,20.7H; C←(07H)而對于SFR中ACC的第一位可以采用下面的指令進行位尋址: MOV C,ACC.1; C←ACC.151單片機原理及程序設計3.451單片機指令系統(tǒng)3.4.1數(shù)據(jù)傳送指令3.4.2算術運算指令
3.4.3邏輯運算指令3.4.4移位指令3.4.5控制轉移指令3.4.6位操作指令51單片機原理及程序設計3.4.1數(shù)據(jù)傳送指令1.內部數(shù)據(jù)傳送指令(16條)字節(jié)數(shù)據(jù)在內部進行傳送時可以采用的尋址方式包括立即尋址,直接尋址,寄存器尋址以及寄存器間接尋址四種。將16位立即數(shù)傳送指令算在內的話,在51單片機中總共包含有16條內部數(shù)據(jù)傳送指令。這16條內部數(shù)據(jù)傳送指令是不同類型存儲單元之間的4種尋址方式的集合。他們共同滿足如下的指令通式:MOV <目的操作數(shù)>,<源操作數(shù)>下面我們按照源操作數(shù)的尋址方式不同對單片機內部數(shù)據(jù)傳送指令進行歸納講解。下面列出的不同尋址方式都是按照源操作數(shù)的尋址方式進行歸納總結的,例如指令MOV direct,A;由于被操作數(shù)是寄存器故將其放到寄存器尋址中進行分類。51單片機原理及程序設計3.4.1數(shù)據(jù)傳送指令1.內部數(shù)據(jù)傳送指令(16條)1)立即尋址型內部數(shù)據(jù)傳送指令采用立即尋址方式的內部數(shù)據(jù)傳送指令有如下5條: MOV A, #data ;A←data MOV Rn,#data ;Rn←data MOV @Ri,#data ;(Ri)←data MOV direct,#data ;direct←data MOV DPTR,#data ;DPTR←data五條指令的不同點在于目的操作數(shù)不同,其中第三條指令代表將立即數(shù)送給以Ri內容為地址的存儲器單元中。第五條指令為唯一的一條16位數(shù)傳送指令,一般用于為后面的變址尋址傳送基地址。以第三條指令為例,如果R1中內容為20H,20H中的內容為40H,執(zhí)行如下指令,則此時R1中內容為20H,20H中的內容變?yōu)?0H。MOV @R1,#30H;51單片機原理及程序設計3.4.1數(shù)據(jù)傳送指令1.內部數(shù)據(jù)傳送指令(16條)2)直接尋址型內部數(shù)據(jù)傳送指令源操作數(shù)采用直接尋址的內部傳送指令包括如下4條: MOV A, direct ;A←(direct) MOV Rn,direct ;Rn←(direct) MOV @Ri,direct ;(Ri)←(direct) MOV direct2,direct1 ;(direct2)←(direct1)這五條指令的源操作數(shù)均為direct,只是被操作數(shù)有所區(qū)別。與立即尋址相似,被操作數(shù)存在A,Rn,@Ri,以及direct四種不同類型。以第三條指令為例,如果R1中內容為20H,20H中的內容為40H,30H中的內容為50H,執(zhí)行如下指令,則此時R1中內容為20H,20H中的內容變?yōu)?0H。
MOV @R1,30H;51單片機原理及程序設計3.4.1數(shù)據(jù)傳送指令1.內部數(shù)據(jù)傳送指令(16條)3)寄存器尋址型內部數(shù)據(jù)傳送指令源操作數(shù)采用寄存器尋址的內部傳送指令包括如下5條: MOV direct,A ;(direct)←A MOV @Ri,A ;(Ri)←A MOV Rn,A ;Rn←A MOV direct,Rn ;(direct)←Rn MOV A,Rn ;A←Rn寄存器尋址的源操作數(shù)為A或者Rn,被操作數(shù)為direct,A,Rn或者@Ri。其中需要注意的是在寄存器尋址指令中不存在下面的這條指令,在使用指令時需要遵循指令系統(tǒng)的約定,不能夠自己臆造出指令使用。MOV @Ri,Rn ;不存在這條指令以第二條指令為例,如果R1中內容為20H,20H中的內容為40H,A中的內容為30H,執(zhí)行如下指令,則此時R1中內容為20H,20H中的內容變?yōu)?0H。MOV @R1,A;51單片機原理及程序設計3.4.1數(shù)據(jù)傳送指令1.內部數(shù)據(jù)傳送指令(16條)4)寄存器間接尋址內部數(shù)據(jù)傳送指令源操作數(shù)采用寄存器間接尋址的內部數(shù)據(jù)傳送指令包括如下2條: MOV direct,@Ri ;(direct)←(Ri) MOV A,@Ri ;A←(Ri)寄存器間接尋址的源操作數(shù)為@Ri,被操作數(shù)為direct或者A,注意下面的這條指令并不存在,即不存在以Rn為被操作數(shù)的寄存器間接尋址指令。MOVRn,@Ri ;不存在這條指令以第一條指令為例,如果R1中內容為20H,20H中的內容為40H,30H中的內容為50H,執(zhí)行如下指令,則此時R1中內容為20H,30H中的內容變?yōu)?0H。MOV30H,@R1 ;(30H)←(R1)51單片機原理及程序設計3.4.1數(shù)據(jù)傳送指令內部數(shù)據(jù)傳送指令(16條)【實例3-2】有如下的一段程序,求問執(zhí)行完如下程序之后,寄存器A,R1,40H中的內容分別為什么?MOV 40H,#30HMOV A,#40H MOV R1,#40HMOV @R1,#50H【思路分析】:以上程序都采用立即尋址的方式,執(zhí)行各個步驟后的數(shù)據(jù)變化如下所示:執(zhí)行完第一步后40H中的內容為30H;執(zhí)行完第二步后A中的內容變?yōu)?0H;執(zhí)行完第三部后R1中的內容變?yōu)?0H;執(zhí)行完第四部后@R1即40H中的內容變?yōu)?0H;故執(zhí)行完如上指令之后A=40H,R1=40H,(40H)=50H。51單片機原理及程序設計3.4.1數(shù)據(jù)傳送指令2.外部數(shù)據(jù)傳送指令(6條)根據(jù)是從外部ROM或者外部RAM傳送數(shù)據(jù),可以將外部數(shù)據(jù)傳送指令分為外部ROM字節(jié)傳送指令以及外部RAM字節(jié)傳送指令兩類。1)外部ROM字節(jié)傳送指令外部ROM字節(jié)傳送指令采用的變址尋址的尋址方式,總共包含如下所示的兩條指令,這也是變址尋址所包含的兩條指令。 MOVC A,@A+DPTR; A←(A+DPTR) MOVC A,@A+PC; A←(A+PC)在單片機指令系統(tǒng)中,外部ROM字節(jié)傳送指令常常用作查表之用,因此也被稱為查表指令。所謂表格指的是在存儲器存儲單元之中的一段連續(xù)存放的數(shù)據(jù)。累加器A,DPTR或者PC與表格地址之間存在一定的關聯(lián),我們將通過A與DPTR或者PC找到表格中的數(shù)據(jù)的過程稱之為查表。51單片機原理及程序設計3.4.1數(shù)據(jù)傳送指令2.外部數(shù)據(jù)傳送指令(6條)1)外部ROM字節(jié)傳送指令
MOVC A,@A+DPTR; A←(A+DPTR) MOVC A,@A+PC; A←(A+PC)第一條指令中以DPTR作為基址寄存器,查表時常常用于存放表格的初始地址。在使用時可以利用“MOVDPTR,#data”
指令進行賦值,該指令可以將外部ROM的64KB范圍內任意一個16位地址賦值給DPTR。第二條指令中以PC作為基址寄存器。在執(zhí)行完該指令操作碼之后PC會自動加1,因此在計算目標地址時,PC應使用指令存放地址加1作為當前PC值進行計算。累加器A用于存放變址地址,由于PC的數(shù)值是變動的,為了獲得表格的初始地址需要在A的基礎上添加一個偏移量。偏移量的大小符合下面的計算公式:偏移量=表首地址—當前PC值=表首地址—(指令存放地址+1)由于累加器A中的內容只能是8位二進制數(shù),因此地址偏移量的范圍不能超過FFH,也就是說當前指令存放地址與所查表格初始地址間隔不能超過FFH。51單片機原理及程序設計3.4.1數(shù)據(jù)傳送指令2.外部數(shù)據(jù)傳送指令(6條)1)外部ROM字節(jié)傳送指令在實際應用中,我們通過這兩條指令都可以獲得想要的效果。例如在片外ROM2000H單元開始存放0~9的平方值,累加器A中的數(shù)值為0~9,現(xiàn)在需要利用查表指令獲得累加器A中數(shù)值的平方值。利用DPTR作為基地址,則只需要執(zhí)行下面的指令,將表首地址賦值給DPTR即可。
MOV DPTR,#2000H; MOVC A,@A+DPTR;利用PC作為基地址,則假設查表指令所在地址為1FF1H,則累加器A需要的偏移量為: 2000H—(1FF1H+1)=0EH查表程序如下所示:
ADD A,#0EH;
MOVC A,@A+PC;51單片機原理及程序設計3.4.1數(shù)據(jù)傳送指令2.外部數(shù)據(jù)傳送指令(6條)2)外部RAM字節(jié)傳送指令外部RAM字節(jié)傳送指令采用寄存器間接尋址方式進行尋址,其操作碼為MOVX不同于內部數(shù)據(jù)傳送的MOV。共包括如下所示的4條指令: MOVX A,@Ri ;A←(Ri) MOVX A,@DPTR ;A←(DPTR) MOVX @DPTR,A ;(DPTR)←A MOVX @Ri,A ;(Ri)←A這四條指令中的目的操作數(shù)以及源操作數(shù)包括A,@Ri,@DPTR三個,其中若以A作為目的操作數(shù)則其他兩個可以作為源操作數(shù),若以A作為源操作數(shù)其余兩個可以作為目的操作數(shù)。操作數(shù)@Ri可以訪問的地址范圍為外部RAM中0000H~00FFH的低地址區(qū)。操作數(shù)@DPTR可以訪問外部RAM中0000H~FFFFH的64KB地址區(qū)。在這四條指令中前兩條指令為讀(輸入)操作,執(zhí)行指令時P3口的
引腳有效。后兩條指令為寫(輸出)操作,執(zhí)行指令時P3口的
引腳有效。51單片機原理及程序設計3.4.1數(shù)據(jù)傳送指令2.外部數(shù)據(jù)傳送指令(6條)【實例3-3】在片外RAM地址30H上存在一個數(shù)X,試編寫一段程序將次數(shù)傳遞到片外RAM地址1FFFH中?!舅悸贩治觥吭趩纹瑱C指令系統(tǒng)中無法直接利用兩個片外地址作為源操作數(shù)以及目的操作數(shù)進行數(shù)據(jù)轉移,因此需要借助中間寄存器進行轉換,程序如下所示: MOV R1,#30H; MOVX A,@Ri; MOV DPTR,#1FFFH; MOVX @DPTR,A;
51單片機原理及程序設計3.4.1數(shù)據(jù)傳送指令3.堆棧操作指令(2條)在前面我們已經(jīng)介紹過堆棧的含義,在單片機指令系統(tǒng)中存在如下兩條堆棧指令分別用于將數(shù)據(jù)送入堆棧以及送出堆棧。其中需要注意的是堆棧指令的尋址方式為立即尋址,direct可以是片內RAM低地址單元的直接地址或者特殊功能寄存器,但是不能是A,Rn等通用寄存器。PUSHdirect
;SP←SP+1;SP←(direct)POP direct
;(direct)←SP;SP←SP-1第一條指令用于將數(shù)據(jù)送入堆棧結構。在執(zhí)行指令時,堆棧棧頂?shù)刂肥紫茸詣蛹?,指向當前地址的上一個地址,繼而將數(shù)據(jù)送入棧頂?shù)刂分?。這樣先加1的操作避免了移入數(shù)據(jù)時覆蓋原來堆棧中的數(shù)據(jù)。第二條指令用于將堆棧中的數(shù)據(jù)送出。在執(zhí)行指令時,首先將堆棧中的數(shù)據(jù)傳送到direct中,繼而將棧頂?shù)刂窚p1。這樣后減1的操作既保證了移除的是當前數(shù)據(jù),同時也保證了棧頂指針SP指向當前的棧頂?shù)刂贰T趩纹瑱C使用過程中常常利用堆棧結構來保護復原寄存器中的原始數(shù)據(jù)。堆棧使用過程遵循“先進后出”“后進先出”的原則,下面的四條指令可以用來保護和恢復DPTR中的數(shù)據(jù)。PUSH DPH;PUSH DPL;POP DPL;POP DPH;
51單片機原理及程序設計3.4.1數(shù)據(jù)傳送指令4.數(shù)據(jù)交換指令(5條)前面所介紹的數(shù)據(jù)傳送指令都是將源操作數(shù)中的數(shù)據(jù)賦值給目的操作數(shù),執(zhí)行完指令后源操作數(shù)中的數(shù)據(jù)不發(fā)生改變。數(shù)據(jù)交換指令可以將源操作數(shù)與目的操作數(shù)中的數(shù)據(jù)互換,執(zhí)行完該指令后源操作數(shù)以及目的操作數(shù)中的數(shù)據(jù)都會發(fā)生改變。在51單片機指令系統(tǒng)中共包括如下5條數(shù)據(jù)交換指令: XCH
A,direct ;A?(direct) XCH
A,@Ri ;A?(Ri) XCH
A,Rn ;A?Rn XCHD A,@Ri ;A0~3?(Ri0~3) SWAP A ;A4~7?A0~3其中第一至三條指令分別累加器A與direct,@Ri,Rn中的數(shù)據(jù)互換。第四條指令代表累加器A與@Ri數(shù)據(jù)中的低四位進行互換,高四位不發(fā)生變化。第五條指令代表累加器A中數(shù)據(jù)的中第四位與高四位進行互換。
51單片機原理及程序設計3.4.1數(shù)據(jù)傳送指令4.數(shù)據(jù)交換指令(5條)【實例3-4】原來A中存有數(shù)據(jù)3FH,R1中存有數(shù)據(jù)40H,40H中存有數(shù)據(jù)5EH,在執(zhí)行下面程序后各個寄存中值為多少。XCHD A,@R1 CHD A,R1 SWAP A
【思路分析】各條指令執(zhí)行內容如下標注所示:XCHD A,@R1 ;A←3EH,(R1)←5FHCHD A,R1 ;A←40H,R1←3EHSWAP A ;A中數(shù)據(jù)變換為04H執(zhí)行后A中的數(shù)據(jù)變?yōu)?4H,R1中的數(shù)據(jù)變?yōu)?EH,40H中的數(shù)據(jù)變?yōu)?FH。
51單片機原理及程序設計3.4.2算術運算指令1.不帶進位加法指令(4條)帶進位加法與不帶進位加法的區(qū)別在于是否將PSW中的Cy算入被加數(shù)進行相加。不帶進位加法包含以下4條指令ADD A,#data ;A←A+dataADD A,direct ;A←A+(direct)ADD A,Rn ;A←A+RnADD A,@Ri ;A←A+(Ri)從以上4條指令可以看出不帶進位加法指令的源操作數(shù)可以是立即尋址、直接尋址、寄存器尋址、寄存器間接尋址這四種中的任意一種。在進行加法運算時,計算機總是將數(shù)字作為有符號數(shù)進行相加,PSW中Cy的值根據(jù)第8位是否進位來判斷,Ac根據(jù)低四位是否向高四位來判斷,OV的值根據(jù)前面章節(jié)1.2.3的介紹可以利用C8+C7來進行判斷。在判斷運算結果的合理性時可以利用OV的值來進行判斷,如果OV=1說明存在溢出,運算結果不合理,反之說明運算結果合理。
51單片機原理及程序設計3.4.2算術運算指令1.不帶進位加法指令(4條)【實例3-5】試分析執(zhí)行以下指令之后累加器A的值以及PSW中個標志位的變化情況。 MOV A,#43H; ADD A,#44H;【思路分析】如下所示,將上述數(shù)值用2進制表示后其運算過程如下所示:
其中第8沒有發(fā)生進位,故Cy=C8=0,第7位發(fā)生了進位故C7=1,OV=C8+C7=1。第四位沒有向高四位發(fā)生進位,故Ac=0,最后結果中1的個數(shù)為偶數(shù)個,故P=0。故執(zhí)行指令之后Cy=0,OV=1,Ac=0,P=0,A中的數(shù)值為87H。
51單片機原理及程序設計3.4.2算術運算指令2.帶進位的加法指令(4條)帶進位的加法指令包括如下四條,與不帶進位加法的區(qū)別在于其將運算前的Cy值作為被加數(shù)參與到了加法運算中。指令帶進位加法指令之后PSW中各位的判斷方法與不帶進位加法指令相同。 ADDC A,#data ;A←A+data+Cy ADDC A,direct ;A←A+(direct)+Cy ADDC A,Rn ;A←A+Rn+Cy ADDC A,@Ri ;A←A+(Ri)+Cy對于帶進位加法指令,如果保證運算是Cy的值為0,則其運算結果與不帶進位加法指令相同。對Cy的清零操作可以利用51單片機指令中的“CLR C”來完成。
【實例3-6】若Cy中的值為1,試分析執(zhí)行以下指令之后累加器A的值以及PSW中個標志位的變化情況。 MOV A,#43H; ADDC A,#44H;【思路分析】這段程序與“實例3-5”的不同點僅僅在于Cy參與了加法運算,執(zhí)行下面指令后Cy=0,OV=1,Ac=0,P=0,A中的數(shù)值為88H。
51單片機原理及程序設計3.4.2算術運算指令3.減法運算(4條)在51單片機中共有如下所示的4條減法指令,其中減法指令都是指帶進位的減法指令,Cy都會作為被減數(shù)參與到減法運算中。 SUBB A,#data ;A←A-data-Cy SUBB A,direct ;A←A-(direct)-Cy SUBB A,Rn ;A←A-Rn-Cy SUBB A,@Ri ;A←A-(Ri)-Cy如果在運算過程中不想讓Cy參與到運算中,可以在運算前將Cy清零以保證運算的準確性。對Cy的清零操作可以利用51單片機指令中的“CLR C”來完成。在進行減法指令時,計算機本身會利用補碼加法來進行運算。在判斷執(zhí)行指令后PSW中個狀態(tài)位狀態(tài)時,可以采用如下的方法進行判斷。PSW中Cy的值根據(jù)第8位是否借位來判斷,Ac根據(jù)低四位是否向高四位借位來判斷,OV的值可以利用第8位以及第7為是否借位來進行判斷。在判斷運算結果的合理性時仍然可以利用OV的值來進行判斷,如果OV=1說明存在溢出,運算結果不合理,反之說明運算結果合理。
51單片機原理及程序設計3.4.2算術運算指令3.減法運算(4條)【實例3-7】若Cy中的值為1,試分析執(zhí)行以下指令之后累加器A的值以及PSW中個標志位的變化情況。 CLR
C; MOV A,#43H; SUBB A,#0F4H;【思路分析】指令第一步將Cy清零,故只需運算43H-F4H的結果:其中第8發(fā)生進位,故Cy=C8=1,第7位發(fā)生了進位故C7=1,OV=C8+C7=0。第四位向高四位發(fā)生進位,故Ac=1,最后結果中1的個數(shù)為偶數(shù)個,故P=0。故執(zhí)行指令之后Cy=1,OV=0,Ac=1,P=0,A中的數(shù)值為6FH。
51單片機原理及程序設計3.4.2算術運算指令4.加1指令(5條)51單片機中加1指令又稱之為增量指令,共有如下所示5條指令: INC A ;A←A+1 INC direct
;(direct)←(direct)+1 INC Rn ;Rn←Rn+1 INC @Ri ;(Ri)←(Ri)+1 INC
DPTR
;DPTR←DPTR+1利用增量指令可以使得存儲單元中的內容進行加1操作,其中只有第一條指令改變累加器A中的數(shù)值,會對PSW中的狀態(tài)位產生影響,其余指令都不會影響PSW中的狀態(tài)位數(shù)值。第5條指令為51單片機中唯一的一條16位算數(shù)運算指令。加1指令在單片機編程中十分常用,除了可以用于對存儲單元中的數(shù)據(jù)進行加1,還常常用于將所尋找的存儲單元地址進行加1操作。例如對于地址為40的存儲單元,可以利用下面的指令訪問其下一個地址中的內容。 MOV R1,#40; INC
R1; MOV A,@R1;51單片機原理及程序設計3.4.2算術運算指令5.減1指令(4條)在51單片機中包含有4條減1指令,他們的使用方法與增量指令相同,只是需要注意的是不存在對DPTR減1操作的運算指令。 DEC A ;A←A-1 DEC direct
;(direct)←(direct)-1 DEC Rn ;Rn←Rn-1 DEC @Ri ;(Ri)←(Ri)-1與增量指令相同,只有第一條指令改變累加器A中的數(shù)值,會對PSW中的狀態(tài)位產生影響,其余指令都不會影響PSW中的狀態(tài)位數(shù)值。51單片機原理及程序設計3.4.2算術運算指令6.十進制調整指令(1條)十進制調整指令用于實現(xiàn)單片機內部的BCD運算。通常在單片機進行加法之后緊接一條十進制調整指令用于實現(xiàn)BCD碼的加法運算。其指令格式如下所示: DA
A;在指令這條指令時,單片機會按順序進行下面的兩個判斷并執(zhí)行相應操作:若Ac=1或者A0~3>9則執(zhí)行A←A+06H若Cy=1或者A4~7>9則執(zhí)行A←A+60H51單片機原理及程序設計3.4.2算術運算指令7.乘除指令(2條)乘除指令用于單片機中的乘除運算,是51單片機中唯一的兩條4周期指令,其執(zhí)行時間相當于四條加法指令所需時間。在計算機中乘除法在本質上是轉化為加法進行運算的。51單片機中乘除法指令格式如下所示: MUL AB; DIV
AB;其中在進行乘法運算時,會將累加器A以及寄存器B中的兩個無符號數(shù)相乘,并將結果的高8位放在寄存器B中,低8位放在累加器A中。乘法運算會對PSW中Cy,OV以及P這三個標志位產生影響。其中Cy=0,OV的值取決于計算機結果是否大于255,即高8位是否存在,若存在則OV=1,不存在則OV=0。奇偶校驗位P取決于結果中1的個數(shù)。在進行除法運算時,會將累加器A中的無符號數(shù)除以寄存器B中不符號數(shù),其中結果所得商的部分存入到累加器A中,余數(shù)部分存入到寄存器B中。PSW中狀態(tài)位Cy以及P的變化同做乘法運算時一致,對于OV而言,如果除數(shù)B中原本數(shù)據(jù)為0則OV=1,否則OV=0。51單片機原理及程序設計3.4.3邏輯運算指令1.邏輯與指令(6條)邏輯與指令用以完成兩個二進制數(shù)的邏輯與操作,總共包括以下6條指令: ANL A,#data ;A←A∧data ANL A,direct ;A←A∧(direct) ANL A,Rn ;A←A∧Rn ANL A,@Ri ;A←A∧(Ri) ANL direct,A ;(direct)←(direct)∧A ANL direct,#data ;(direct)←(direct)∧data這6條指令中前4條指令的目的操作為累加器A,可以利用立即尋址,直接尋址,寄存器尋址,寄存器間接尋址對原操作數(shù)尋址進行邏輯與操作。后兩條指令目的操作數(shù)為direct,原操作數(shù)可以是累加器A或者立即數(shù)。通過下面的例子可以看出單片機在執(zhí)行邏輯與指令時的運算過程。51單片機原理及程序設計3.4.3邏輯運算指令1.邏輯與指令(6條)【實例3-8】執(zhí)行下面指令后,寫出累加器A中的內容 MOV A,#92H ; MOV R1,#30H ; MOV 30H,#0F0H ; ANL A,@R1 ;【思路分析】執(zhí)行上述指令的結果在于將92H與30H中的F0H進行邏輯與操作,操作過程如下所示:
操作結果為90H,故執(zhí)行指令后累加器A中的內容為90H。51單片機原理及程序設計3.4.3邏輯運算指令2.邏輯或指令(6條)邏輯或指令用以完成兩個二進制數(shù)的邏輯或操作,總共包括以下6條指令: ORL A,#data ;A←A∨data ORL A,direct ;A←A∨(direct) ORL A,Rn ;A←A∨Rn ORL A,@Ri ;A←A∨(Ri) ORL direct,A ;(direct)←(direct)∨A ORL direct,#data ;(direct)←(direct)∨data邏輯或的6條指令格式與邏輯與的6條指令相同,只是進行的邏輯運算不同??梢岳眠壿嫽蛑噶顏硗瓿梢恍┲?操作,也可以通過邏輯與指令來完成一些置0操作。【實例3-9】試編寫一段指令將累加器A中的低4位置1,5~6位保持不變,同時將7~8位清零?!舅悸贩治觥慨斈骋晃慌c1進行邏輯或時可以將該位置1,與0進行邏輯或時該位保持不變。當某一位與0進行邏輯與時可以將該位置0,與1進行邏輯或時可以保持該位不變,故采用下面的程序可以滿足要求。 ORL
A,#0FH;與00001111B進行邏輯與 ANL A,#3FH;與00111111B進行邏輯或51單片機原理及程序設計3.4.3邏輯運算指令3.邏輯異或指令(6條)邏輯異或指令用以完成兩個二進制數(shù)的邏輯異或操作,總共包括以下6條指令: XRL A,#data ;A←A+data XRL A,direct ;A←A+(direct) XRL A,Rn ;A←A+Rn XRL A,@Ri ;A←A+(Ri) XRL direct,A ;(direct)←(direct)+A XRL direct,#data ;(direct)←(direct)+data邏輯異或的6條指令格式和邏輯與以及邏輯或的6條指令相同,只是進行的邏輯運算不同。根據(jù)異或的運算規(guī)則,任意一位數(shù)與1進行異或運算則將會取反,與0進行異或運算則保持不變,實際應用中常常運用這一特性來完成一些取反操作。51單片機原理及程序設計3.4.3邏輯運算指令3.邏輯異或指令(6條)【實例3-10】分別編寫一段程序來實現(xiàn)外部RAM單元30H中數(shù)據(jù)的清零以及取反操作【思路分析】首先由于是外部RAM單元中的數(shù)據(jù),因此需要利用寄存器間接尋址的方式來進行尋址。實現(xiàn)清零操作可能有很多種算法,下面分別介紹幾種方法來實現(xiàn)
利用邏輯與實現(xiàn)清零操作程序:
利用異或指令實現(xiàn)清零操作: MOV R0,#30H;
MOV R0,#30H; MOV A,#00H;
MOV A,@R0; ANL A,@R0;
XRL
A,@R0; MOV @R0,A;
MOV @R0,A;
取反操作可以利用異或指令實現(xiàn): MOV R0,#30H; MOV A,#FFH; XRL A,@R0; MOV @R0,A;51單片機原理及程序設計3.4.3邏輯運算指令4.零以及取反指令除了可以利用上面例子介紹的方法來對數(shù)據(jù)進行清零或者取反操作,在51單片機中還專門設置了兩條指令用于累加器A的清零以及取反操作。指令格式如下所示:在單片機中,取反以及清零的操作十分常見。這兩條指令的存在可以簡化操作,方便用戶編寫程序。51單片機原理及程序設計3.4.4移位指令移位指令用于累加器A中數(shù)據(jù)的移位操作,共包含下面四條指令,分別用于向左移位,向右移位,包含Cy的向左移位以及包含Cy的向右移位。其中RLC以及RRC的移位包含了進位標志位Cy,如果預先將Cy標志位清零則向左移位相當于將累加器A中的數(shù)據(jù)乘以2(乘2后大于255則溢出)。移位指令可以用于控制輸出口中數(shù)據(jù)的循環(huán)變化,例如后面常常涉及到的走馬燈實例是利用移位指令控制LED燈輪流閃爍。51單片機原理及程序設計3.4.4移位指令51單片機原理及程序設計3.4.5控制轉移指令1.無條件轉移指令(4條)無條件轉移指令是相對下面的條件轉移指令而言的,指的無需判斷是否滿足某種條件直接進行轉移的指令。無條件轉移指令包括以下4條,其中第一條稱為長轉移指令,第二條稱為絕對轉移指令,第三條指令稱為短轉移指令,第四條指令稱為變址尋址轉移指令。 LJMP addr16 ;PC←addr16 AJMP addr11 ;PC←PC+2,PC10~0←addr11 SJMP rel ;PC←PC+2,PC←PC+relJMP @A+DPTR ;PC←A+DPTR長轉移指令(LJMP)執(zhí)行長轉移指令的結果會直接將16位地址addr16賦值給PC值,使得下一步的程序從地址addr16處開始執(zhí)行。由于一個16位數(shù)的地址范圍為64KB,因此長轉移指令能夠使得程序從當前地址轉移到64KB范圍內的任意地址處開始執(zhí)行下一步指令。在實際操作中常常在程序段中某處做上LOOP1,LOOP2等標記,此后利用長轉移指令即可方便地轉移到標記處執(zhí)行程序。絕對轉移指令(AJMP)由于絕對轉移指令為雙字節(jié)指令,因此執(zhí)行絕對轉移指令時首先會將PC指針加2以獲得當前PC值。程序執(zhí)行后會將當前PC值高5位與11位地址addr11組成新的16位地址賦值給PC,程序轉移到新的地址處執(zhí)行下一條指令。由于11位數(shù)的地址范圍為2KB,而PC當前值前5位固定的,故程序轉移地址只能是在當前PC值的2KB范圍內進行轉移。51單片機原理及程序設計3.4.5控制轉移指令1.無條件轉移指令(4條)【實例3-11】分別分析下面指令執(zhí)行后PC中的值:指令地址為2000H,執(zhí)行指令AJMP03EH;指令地址為2FFFH,執(zhí)行指令AJMP03EH;【思路分析】指令地址為2000H,則執(zhí)行指令后的PC地址為0010000000000002B,去PC地址高5位與00000111110B組成新的地址為0010000000111110B,故執(zhí)行指令后PC值為203EH,程序轉移到203EH處。若指令地址為2FFFH,則執(zhí)行指令后的PC地址為0011000000000001B,去PC地址高5位與00000111110B組成新的地址為0011000000111110B,故執(zhí)行指令后PC值為303EH,程序轉移到303EH處。51單片機原理及程序設計3.4.5控制轉移指令1.無條件轉移指令(4條)短轉移指令(SJMP)與長轉移指令以及絕對轉移指令不同,短轉移指令是相對轉移指令。如相對尋址中介紹的一樣,采用短轉移指令時,目標地址與當前指令地址之間滿足如下的關系:目標地址=當前PC值+rel=指令存儲地址+指令字節(jié)數(shù)+rel其中SJMP指令為雙字節(jié)指令,故對于SJMP而言指令字節(jié)數(shù)為2。由于rel為補碼,取值范圍為-128~127,因此短轉移指令相對當前指令轉移范圍為-126~129。變址尋址轉移指令(JMP)變址尋址轉移指令采用變址尋址的方法進行尋址,其中DPTR中的內容為基地址,A中內容為偏移量。執(zhí)行變址尋址轉移指令之后會將DPTR與A中的內容相加賦值給PC值。使用變址尋址指令時,一般DPTR中的內容為定值,用于存放表頭地址,程序可以按照累加器A中數(shù)值的不同轉移到不同地址。51單片機原理及程序設計3.4.5控制轉移指令無條件轉移指令(4條)【實例3-12】編寫一段程序,使得當A為0~3時能夠程序能夠分別轉移到2000H,3000H,4000H以及5000H入口處執(zhí)行?!舅悸贩治觥款}目需要根據(jù)A中值得不同轉移到不同地址處執(zhí)行,可以采用變址尋址轉移指令。由于長轉移指令LJMP為3字節(jié)指令,故應當將A中數(shù)據(jù)乘3后轉移,程序如下所示: MOV B,#03H ; MUL AB ;將A中的數(shù)據(jù)乘3 MOV DPTR,#TABLE ; JMP
@A+DPTR ; TABLE:LJMP 2000H ;
LJMP 3000H ;
LJMP 4000H ;
LJMP 5000H ;51單片機原理及程序設計3.4.5控制轉移指令2.條件轉移指令(8條)條件轉移指令是指在滿足某種條件的情況下進行轉移,不滿足條件繼續(xù)按照原來順序執(zhí)行程序的轉移指令。條件轉移指令采用的是相對尋址的尋址方式,其轉移地址計算方法和短轉移指令相同。51單片機原理及程序設計3.4.5控制轉移指令2.條件轉移指令(8條)在51單片機中總共包含8條條件轉移指令,其中前條為判零條件轉移指令,中間4條為比較條件轉移指令,最后兩條為減1條件轉移指令。判零條件轉移指令判零條件轉移指令是以累加器A中的內容是否為0作為轉移的條件。其中JZ代表累加器A中的內容為0時進行轉移,不為0是不轉移;JNZ代表A中的內容不為0時進行轉移,為0時不轉移。比較條件轉移指令比較條件轉移指令用于比較兩個數(shù)是否相同,若不相同則程序發(fā)生轉移,若相同則程序不發(fā)生轉移。比較條件轉移指令中4條指令的區(qū)別在于操作數(shù)的不同。在進行比較條件轉移時,計算機通過對兩個數(shù)進行減法運算來判斷是否相同,因此在進行運算后會對Cy狀態(tài)位產生影響。減1條件轉移指令與判零條件轉移指令不同,減1條件轉移指令首先會將direct或者Rn中的數(shù)據(jù)減1再判斷是否轉移,若不為0則程序發(fā)生轉移,否則程序不轉移。通過減1條件轉移指令可以方便地設定循環(huán)次數(shù),因此常常和循環(huán)配合使用。51單片機原理及程序設計3.4.5控制轉移指令3.子程序調用與返回指令(4條)1)調用指令調用指令分為長調用指令和短調用指令,下面兩條指令第一條為長調用指令,第二條為短調用指令。 LCALL addr16 ;PC←PC+3
;SP←SP+1,(SP)←PC7~0
;SP←SP+1,(SP)←PC15~8
;PC←addr16 ACALL addr11 ;PC←PC+2
;SP←SP+1,(SP)←PC7~0
;SP←SP+1,(SP)←PC15~8
;PC10~0←addr11長調用指令為三字節(jié)指令,在執(zhí)行該指令時首先將PC值加3獲得當前PC值,繼而將PC中的16位地址分兩次存入堆棧,最后將addr16賦值給PC轉移到目標地址執(zhí)行程序。長調用指令調用的子程序可以存放在程序任意64KB存儲空間內。短調用指令為雙字節(jié)指令,在執(zhí)行該指令時首先將PC值加2獲得當前PC值,繼而將PC中的16為地址分兩次存入堆棧,最后程序轉移到目標地址執(zhí)行程序。執(zhí)行短調用指令時,PC賦值方法與絕對轉移指令相同,即將當前PC值得高5位與addr11組成新的地址賦值給PC。短調用指令調用子程序地址與當前地址需在2KB范圍內。51單片機原理及程序設計3.4.5控制轉移指令3.子程序調用與返回指令(4條)2)返回指令如下所示,在51單片機中存在兩條返回指令,其中第一條為子程序返回指令,第二條為中斷程序返回指令。這兩條指令的執(zhí)行過程完全相同,都是將PC地址從堆棧中釋放出來,但是中斷程序返回指令只能用于中斷程序的返回,子程序返回指令只能用于普通子程序返回,兩者之間不可混用。 RET
;PC15~8←(SP),SP←SP-1
;PC7~0←(SP),SP←SP-1 RETI
;PC15~8←(SP),SP←SP-1
;PC7~0←(SP),SP←SP-14.空操作指令(1條) NOP
;PC←PC+1在51單片機中存在一條單字節(jié)單周期的空操作指令,執(zhí)行這條指令時,單片機僅僅對PC進行加1,不做其他任何操作??詹僮髦噶畛3谘訒r程序中出現(xiàn),用來將等待時間增加12個時鐘周期。51單片機原理及程序設計3.4.6位操作指令位操作指令用于對單片機進行按位操作,在51單片機可以進行位尋址的存儲器范圍有兩部分,一個是片內RAM中的位尋址區(qū),字節(jié)范圍為20H~2FH共128位,另一個是特殊功能寄存器區(qū)中可按位尋址的特殊功能寄存器。在單片機中對于一個位地址bit有多種表示方法,如果位地址是在20H~2F中,那么對于其中的bit進行位尋址時可以采用如下兩種方法表示(以下都是對07H繼續(xù)尋址): MOV C,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 前臺工作的職業(yè)發(fā)展路徑計劃
- 財務資金分配計劃
- 通信行業(yè)月度個人工作計劃
- 《六盤水市東風煤業(yè)有限公司水城區(qū)東風煤礦(優(yōu)化重組)礦產資源綠色開發(fā)利用方案(三合一)》評審意見
- 攀枝花駿恒礦業(yè)有限責任公司爐房箐鐵礦礦山地質環(huán)境保護與土地復墾方案情況
- 保健植物知識培訓課件
- 蛋白還原酸護理教程
- 小學信息技術四年級上冊第5課《 精彩游戲-軟件的下載》教學設計001
- 2025年銅川貨運從業(yè)資格證考試模擬考試題庫下載
- 2025年新鄉(xiāng)貨運從業(yè)資格證怎么考試
- RRU設計原理與實現(xiàn)
- 工程質量責任制和考核辦法
- 《室內展示設計》課件
- 中級消防設施操作員考試題庫
- 服裝店售后培訓課件
- 新舊系統(tǒng)數(shù)據(jù)遷移方案
- 3D打印與傳統(tǒng)工藝美術的融合創(chuàng)新
- 運動損傷預防與處理的案例分析
- 第四次工業(yè)革命課件
- nfc果汁加工工藝
- 《中國十大元帥》課件
評論
0/150
提交評論