東華大學(xué)單片機(jī)第3章MCS51系列單片機(jī)的指令系統(tǒng)及匯編語言程序設(shè)計_第1頁
東華大學(xué)單片機(jī)第3章MCS51系列單片機(jī)的指令系統(tǒng)及匯編語言程序設(shè)計_第2頁
東華大學(xué)單片機(jī)第3章MCS51系列單片機(jī)的指令系統(tǒng)及匯編語言程序設(shè)計_第3頁
東華大學(xué)單片機(jī)第3章MCS51系列單片機(jī)的指令系統(tǒng)及匯編語言程序設(shè)計_第4頁
東華大學(xué)單片機(jī)第3章MCS51系列單片機(jī)的指令系統(tǒng)及匯編語言程序設(shè)計_第5頁
已閱讀5頁,還剩73頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第3章MCS-51系列單片機(jī)的指令系統(tǒng)及匯編語言程序設(shè)計本章要點 MCS-51單片機(jī)的7種尋址方式 MCS-51單片機(jī)的指令系統(tǒng) 匯編語言的基本格式程序結(jié)構(gòu)及其設(shè)計方法典型應(yīng)用程序的設(shè)計 3.1 指令系統(tǒng)概述3.1.1 匯編指令格式3.1.2 指令描述符號介紹MCS-51單片機(jī)匯編語言指令格式為:2.1.1 匯編指令格式標(biāo)號:操作碼操作數(shù)或操作數(shù)地址;注釋MCS-51單片機(jī)匯編語言指令由以下幾個部分組成:標(biāo)號操作碼操作數(shù)或操作數(shù)地址注釋 標(biāo)號標(biāo)號是程序員根據(jù)編程需要, 給指令設(shè)定的符號地址,可有可無;標(biāo)號由18個字符組成,第一個字符必須是英文字母,不能是數(shù)字或其它符號;標(biāo)號后必須用冒號;在程序

2、中,不可以重復(fù)使用。 操作碼 操作碼表示指令的操作種類,規(guī)定了指令的具體操作。 比如:ADD(加操作),MOV (數(shù)據(jù)的傳送操作)。操作數(shù)或操作數(shù)地址 操作數(shù)或操作數(shù)地址表示參加運算的數(shù)據(jù)或數(shù)據(jù)的地址。操作數(shù)和操作碼之間必須用空格分開,有兩個以上操作數(shù)的操作數(shù)之間用逗號分隔。操作數(shù)一般有以下幾種形式:沒有操作數(shù)項,操作數(shù)隱含在操作碼中,如RET指令;只有一個操作數(shù),如CPL A指令;有兩個操作數(shù),如MOV A, #00H指令,操作數(shù)之間以逗號相隔;有三個操作數(shù),如CJNE A, #00H, NEXT指令,操作數(shù)之間也以逗號相隔。 注釋 注釋是對指令的解釋說明,用以提高程序的可讀性;注釋前必須

3、以“;”和指令分開,注釋在每條指令后都可以設(shè)有。 Rn 當(dāng)前工作寄存器中的某一個,即R0R7; Ri R0或者R1Direct 單片機(jī)內(nèi)部RAM低128字節(jié)(00h7fh)中的某 個字節(jié)地址, 或者是某個專用寄存器的名字;#data 8位(1字節(jié))立即數(shù)#data16 16位(2字節(jié))的立即數(shù)Addr16 16位目的地址,在LJMP和LCALL的指令中采用Addr11 11位目的地址,只在AJMP和ACALL指令中采用Rel 相對轉(zhuǎn)移指令中的偏移量。DPTR 數(shù)據(jù)指針(由DPH和DPL構(gòu)成)Bit 內(nèi)部RAM(包括專用寄存器)中可尋址位的地址或 名字2.1.2 指令中符號的意義說明A 累加器A

4、CCB B寄存器 間接尋址標(biāo)志 / 加在位地址前,表示對該位狀態(tài)取反(X) 某寄存器或某單元的內(nèi)容(X) 由X間接尋址的單元中的內(nèi)容箭頭右邊的內(nèi)容傳遞給箭頭左邊操作數(shù)是指令的重要組成部分,指出了參與操作的數(shù)據(jù)或數(shù)據(jù)的地址。尋找操作數(shù)地址的方式稱為尋址方式。一條指令采用什么樣的尋址方式,是由指令的功能決定的。尋址方式越多,指令功能就越強(qiáng)。 MCS-51指令系統(tǒng)共使用了7種尋址方式:立即尋址直接尋址寄存器尋址寄存器間接尋址位尋址變址尋址相對尋址3.2 MCS-51單片機(jī)的尋址方式MOV A,#40H;將40H這個立即數(shù)傳送給累加器ACC,“#”符號稱為立即數(shù)符號,40H在這里稱為立即數(shù)。立即數(shù)尋址

5、是指將操作數(shù)直接寫在指令中。比如:MOV DPTR,#6789HMOV R0,#23H A XXMOV A , #40H40H3.2.1 立即尋址 寄存器尋址是指將操作數(shù)存放于寄存器中,寄存器包括工作寄存器R0R7、累加器A、通用寄存器B、地址寄存器DPTR等。MOV A,R0數(shù)據(jù)存放在R0R7中的某個通用寄存器內(nèi),或者放在某個專用寄存器中。e.g.: MOV A,R7 ADD A,R03.2.2 寄存器尋址操作過程:MOV A,R0;設(shè)R0的值為40H R0MOV A , R0 A XX 40H40H直接尋址是指把存放操作數(shù)的內(nèi)存單元的地址直接寫在指令中。在MCS-51單片機(jī)中,可以直接尋址

6、的存儲器主要有內(nèi)部RAM區(qū)和特殊功能寄存器SFR區(qū)。 MOV A,30H;將內(nèi)部RAM30H單元內(nèi)的數(shù)傳送給累加器ACC。 MOV TMOD,#20h ;TMOD定時器方式控制寄存器,屬于SFRADD A,30H ;片內(nèi)RAM30H單元的數(shù)據(jù)加到累加器ACCINC 70H ;片內(nèi)RAM70H單元的數(shù)據(jù)加1MOV 30H,70H ;片內(nèi)RAM70H單元的數(shù)據(jù)傳送到30H單元。DEC 50H ;片內(nèi)RAM50H單元的數(shù)據(jù)減1例如:MOV A,30H ;假如(30H)=55H 30HMOV A , 30H 55H XX A55H3.2.3 直接尋址3.2.4 寄存器間接尋址在51單片機(jī)中有兩個寄存器

7、可以用于間接尋址,它們是R0和R1。當(dāng)指向片外的64KB的RAM地址空間時,可用DPTR作間接寄存器。MOV A,R0假如R0寄存器中的數(shù)據(jù)是50H,則以上指令的意思是:將內(nèi)部RAM中50H單元內(nèi)的數(shù)傳送給累加器ACC。e.g.假如R1內(nèi)的數(shù)是70H,在內(nèi)部RAM的70H單元中存放的數(shù)據(jù)是00H,在執(zhí)行以下指令后,外部RAM中3FFFH單元的內(nèi)容是00H。MOV A,R1MOV DPTR,#3FFFHMOVX DPTR,A以R0作為間址寄存器方式:MOV A , R0以DPTR作為間址寄存器方式:55H AR055H取出地址78H78H3FFFH ADPTR3FFFH取出地址78H78HMOV

8、 DPTR,#3FFFHMOVX A, DPTR3.2.5 變址尋址EG. :MOVC A,A+DPTR指令含義:假設(shè)在執(zhí)行指令前,數(shù)據(jù)指針DPTR中的數(shù)據(jù)是1000H,累加器ACC中的數(shù)據(jù)是50H,則上述指令執(zhí)行的操作是將:程序存儲器1050H單元中的數(shù)據(jù)傳送給累加器ACC。同樣尋址方式的指令還有兩條:MOVC A,A+PCJMP A+DPTR該類指令常用于編寫查表程序。指令:MOVC A,A+DPTR 工作過程:3055H相加=3055HADPTR3000H取出地址 A55H66H66H3.2.6 相對尋址在跳轉(zhuǎn)程序中有一種相對尋址方式,程序的書寫方式是:SJMP rel程序含義:當(dāng)程序執(zhí)

9、行到上述語句時,在當(dāng)前語句位置的基礎(chǔ)上向前或向后跳轉(zhuǎn)rel中指明的位置。范例JZ relCJNE A, #DATA , relDJNZ R0,rel3.2.7 位尋址當(dāng)單片機(jī)要進(jìn)行某一位二進(jìn)制數(shù)操作時,可采用位尋址。Eg. :SETB C指令含義:將專用寄存器PSW中的CY位置為1。CLR P1.0;將單片機(jī)的P1.0清“0”。SETB P1.0;將單片機(jī)的P1.0置“1”。P1.0X“0”0P1.0P1.0X“1”1P1.0MCS-51單片機(jī)指令系統(tǒng)包括111條指令按功能可以劃分為以下5類:數(shù)據(jù)傳送和交換指令(29條)算術(shù)運算指令(24條)邏輯運算指令(24條)控制轉(zhuǎn)移指令(17條)位操作指

10、令(17條)3.3 MCS-51系列單片機(jī)的指令系統(tǒng)2.2.1 數(shù)據(jù)傳送和交換類指令 常用助記符: MOV 單片機(jī)內(nèi)部RAM中的數(shù)據(jù)傳遞 MOVX 累加器和單片機(jī)外部數(shù)據(jù)存儲器間數(shù)據(jù)傳遞 MOVC 累加器和程序存儲器之間的數(shù)據(jù)傳遞 XCH 累加器和某個內(nèi)部RAM單元進(jìn)行數(shù)據(jù)交換 XCHD 累加器和某個內(nèi)部RAM單元進(jìn)行低半字節(jié)數(shù)據(jù)交換 PUSH 將某個內(nèi)部RAM單元的數(shù)據(jù)壓入堆棧 POP 將堆棧內(nèi)的數(shù)據(jù)彈出數(shù)據(jù)傳送和交換類指令主要有以下幾種:內(nèi)部數(shù)據(jù)傳遞指令數(shù)據(jù)指針賦值指令片外數(shù)據(jù)傳送指令ROM數(shù)據(jù)訪問指令棧操作指令數(shù)據(jù)交換指令一、內(nèi)部數(shù)據(jù)傳送指令1、以累加器A為目的操作數(shù)的傳送指令 ( 4條

11、)MOV A,#data ; A data MOV A,direct ; A (direct)MOV A,Rn ; A(Rn)MOV A,Ri ; A(Ri) AXX A33H30H33H結(jié)果Eg:MOV A,30HEg:MOV A,#10H AXX30H10H結(jié)果10HAXXA33HR233H55H78H A78HR055H取出地址Eg. : MOV A,R0Eg.: MOV A,R2注意:在使用Ri進(jìn)行間址尋址時,只能夠使用R0和R1。2.以通用寄存器Rn為目的的傳送指令:( 3條)MOV Rn,A ; Rn (A)MOV Rn,direct ; Rn(direct)MOV Rn,#dat

12、a ; Rn dataR2R2XX33HA33HEg:MOV R2,AEg:MOV R2,30HEg:MOV R2,#30HR2R2XX55H30H55HR2XXR230H30H以直接地址為目的的傳送指令:( 5條)MOV direct ,#data ; direct data MOV direct1,direct2 ; direct1 (direct2)MOV direct,A ; direct (A)MOV direct ,Ri ; direct (Ri) MOV direct,Rn ; direct (Rn) Eg:MOV 30H,#33H 30H30HXX33H33H30H30HXX5

13、5H31H55HEg:MOV 30H,31HEg:MOV 30H,R0Eg:MOV 30H,AEg:MOV 30H,R3地址55H78H30H78HR0取出55H30H30H A33HXX33H30H30HR333HXX33H以通用寄存器間接地址為目的的傳送指令:( 3條) MOV Ri,A ; (Ri) (A) MOV Ri,direct ; (Ri) (direct) MOV Ri,#data ; (Ri) data Eg. : MOV R1,AEg:MOV R1,30HEg:MOV R1,#30H55HAR1(地址)55H78H78H55H30HR1(地址)55H78H78H55H30H

14、R1(地址)55H30H二、數(shù)據(jù)指針賦值指令(16位數(shù)據(jù)指針)當(dāng)要對片外的RAM和I/O接口進(jìn)行訪問時,或進(jìn)行查表操作 時,通常要對DPTR賦值。指令為:MOV DPTR, #data16 Eg:將數(shù)據(jù)指針DPTR指向存于ROM中的表格首地址。 MOV DPTR,#TABLEDPTRDPTRXXXX2000H2000HEg:將數(shù)據(jù)指針DPTR指向外部RAM的2000H單元。 MOV DPTR, #2000H三、片外數(shù)據(jù)傳遞指令 使用DPTR和Ri進(jìn)行間接尋址 MOVX A, DPTR ;A (DPTR)片外 MOVX A,Ri ;A (Ri)片外 MOVX DPTR,A ;(DPTR)片外(A

15、) MOVX Ri,A ;(Ri)片外(A)注意:該指令用于在單片機(jī)和外部RAM、擴(kuò)展I/O的數(shù)據(jù)傳送;使用Ri時,只能訪問低8位地址為00HFFH地址段;使用DPTR時,能訪問0000H FFFFH地址段。應(yīng)用舉例:例: MOV DPTR,#2003H MOV A, #00H MOVX DPTR,A指令執(zhí)行過程: ADPTR(地址)2003H2003H00H00H注意:只有累加器A才能把數(shù)據(jù)傳到外部RAM,或接收從外 部數(shù)據(jù)存儲器傳回的數(shù)據(jù)。 比如:MOVX 20H, DPTR MOVX DPTR,SBUF MOVX DPTR,R2 MOVX DPTR,R1 都是錯誤的思考:如果要將內(nèi)部RA

16、M中40H單元中的數(shù)據(jù)傳遞到外部RAM的2000H單元中,應(yīng)如何解決?試寫出相應(yīng)程序。 MOV DPTR,#2000HMOV A,40HMOVX DPTR,A四、查表指令指令格式: MOVC A, A+DPTR ;A (A)+(DPTR) MOVC A, A+PC ;A (A)+(PC)3055H相加=3055HA66HDPTR3000H取出地址 A55H66H Eg:MOV DPTR, #3000H MOV A, #55H MOVC A, A+DPTR(ROM數(shù)據(jù)傳送指令)2條例:在累加器A中存放有09間的某個數(shù),現(xiàn)要求查出該數(shù)的7段共陰顯示代碼,并將代碼傳回累加器。解決方案:在程序存儲器中

17、劃出一個區(qū)域用于存放09的7段共陰顯示代碼,比如將代碼存放在0400H開始的地方。程序如下: MOV DPTR, #0400H MOVC A , A+DPTR ORG 0400H DB 3FH ;0的7段共陰顯示代碼 DB 06H ;1的7段共陰顯示代碼 DB 5BH ; 2的7段共陰顯示代碼 DB 4FH ; 3的7段共陰顯示代碼 DB 66H ; 4的7段共陰顯示代碼 注意:我們只能將程序存儲器中的數(shù)據(jù)傳出(讀出),而不能將數(shù)據(jù)傳入(寫入)程序存儲器。因此,語句: MOVC A+DPTR , A MOVC A+PC , A 都是錯誤的。思考題:MCS-51單片機(jī)的運算能力比較差,想想能不能

18、夠利用查表方式進(jìn)行函數(shù)y=sin(x)的運算?五、堆棧操作指令堆棧操作指令包含入棧(PUSH)和出棧(POP)。在使用堆棧之前要首先給堆棧指針SP賦值。指令格式:PUSH direct POP direct注意:先入后出原則程序舉例: MOV SP , #30H PUSH SBUF; SP (SP)+1, 31H(SBUF) PUSH 60H ; SP (SP)+1, 32H(60H) POP 60H ; 60H ( 32H), SP (SP)-1 POP SBUF;SBUF (31H), SP (SP)-1六、字節(jié)交換指令字節(jié)交換指令指內(nèi)部RAM中的某個單元和累加器A之間進(jìn)行數(shù)據(jù)交換,可以是

19、整個字節(jié),也可以是半個字節(jié)。包含3種交換方式:1、整字節(jié)交換指令: XCH A, Rn ; (A) (Rn) XCH A, direct ; (A) (direct) XCH A, Ri ; (A) (Ri)A內(nèi)部RAM單元2、半字節(jié)交換指令 XCHD A, Ri ; (A) 30 (Ri)30指令執(zhí)行后A0A1A2A3D4D5D6D7(Ri)D0D1D2D3A4A5A6A7AD0D1D2D3D4D5D6D7(Ri)A0A1A2A3A4A5A6A7A 執(zhí)行指令前3、累加器A高低半字節(jié)的交換指令 SWAP A執(zhí)行前A7A6A5A4A3A2A1A0執(zhí)行后A3A2A1A0A7A6A5A4例: 假設(shè)在

20、執(zhí)行指令之前(A)= 70H,則在指令執(zhí)行完后,(A)= 07H。執(zhí)行前01110000執(zhí)行后000001113.3.2 算術(shù)運算指令 算術(shù)運算指令有加法、減法、乘法和除法四類,除加1和減1指令,其他所有的指令都將影響PSW的標(biāo)志位。程序狀態(tài)字PSWD7D6D5D4D3D2D1D0CYACF0RS1RS0OVP進(jìn)位借位輔助進(jìn)位自定標(biāo)志通用寄存器選擇位溢出標(biāo)志奇偶校驗一、加法指令A(yù)DD A,Rn ;A (A)+(Rn)ADD A, direct ;A (A)+(direct)ADD A, Ri ;A (A)+(Ri)ADD A, #data ;A (A)+data例:將內(nèi)部RAM中40H和41H

21、單元的數(shù)相加,再把和送到42H單元。 MOV A, 40H ADD A, 41H MOV 42H, A1、不帶進(jìn)位的加法指令加法運算對PSW標(biāo)志位的影響1、在上例中,如果運算結(jié)果超出FFH(255),將產(chǎn)生進(jìn)位PSW的CY位將被置1。2、若預(yù)先說明40H和41H中放置的是有符號數(shù),則在運算指令“ADD A,41H”執(zhí)行后,還要檢查PSW中溢出位OV的狀態(tài),如果OV位為1,則運算結(jié)果錯誤。溢出產(chǎn)生的條件:在運算時,如果D6位和D7位中一個有進(jìn)位而另一個無進(jìn)位,則OV=1,溢出。即:OverFlow=C6C7 OverFlow=1,溢出OverFlow=0:無溢出。溢出發(fā)生在有符號數(shù)的運算中,同符

22、號數(shù)相加或異符號數(shù)相減,則可能發(fā)生溢出。異號數(shù)相加一定不會產(chǎn)生溢出!2、帶進(jìn)位的加法運算該類指令主要用于多字節(jié)的加法運算ADDC A,Rn ; A(A)+(Rn)+(CY)ADDC A, direct ; A (A)+(direct)+(CY)ADDC A, Ri ; A (A)+(Ri)+(CY)ADDC A, #data ;A (A)+data+(CY)如果加數(shù)和被加數(shù)是無符號數(shù),則在計算后要注意是否產(chǎn)生進(jìn)位。如果加數(shù)和被加數(shù)是有符號數(shù),則在計算后要注意是否溢出,只要溢出,則運算結(jié)果錯誤;如果無溢出,則注意是否有進(jìn)位。例:加數(shù)存放在內(nèi)部RAM的41H(高位)和40H(低位),被加數(shù)存放在4

23、3H(高位)和42H(低位),將它們相加,和存放在46H44H中。程序: CLR C MOV A, 40H ADD A, 42H MOV 44H,A MOV A, 41H ADDC A, 43H MOV 45H,A CLR A ADDC A, #00H MOV 46H,A3、加1指令I(lǐng)NC A ;A (A)+1INC Rn ;Rn (Rn)+1INC direct ; direct (direct)+1INC Ri ;(Ri) (Ri)+1INC DPTR ;DPTR (DPTR)+1注意:以上所有指令不會影響PSW中的各個標(biāo)志位。例:設(shè)(A)=FFH,(R0)=25H,(26H)=3AH,(

24、DPTR)=2000H執(zhí)行程序: INC A INC R0 INC R0 INC DPTR結(jié)果為:(A)=00H,(R0)=26H,(26H)=3BH,(DPTR)=2001H二、減法指令 SUBB A, Rn ;A (A)-(Rn)-(CY) SUBB A, direct ;A (A)-(direct)-(CY) SUBB A, Ri ;A (A)-(Ri)-(CY) SUBB A, #data ;A (A)-data-(CY)如果減數(shù)和被減數(shù)是無符號數(shù),則在計算后要注意是否產(chǎn)生借位。如果減數(shù)和被減數(shù)是有符號數(shù),則在計算后要注意是否溢出,只要溢出,則運算結(jié)果錯誤;如果無溢出,則注意是否有借位

25、。1、帶借位的減法指令2、減1指令DEC A ;A(A)-1 DEC Rn ;Rn (Rn)-1 DEC direct ;direct (direct)-1 DEC Ri ;(Ri) (Ri)-1注意:減1指令也不會影響PSW的各個標(biāo)志位。思考:設(shè)(A)=FFH,(R0)=27H,(26H)=3AH 執(zhí)行程序: DEC A DEC R0 DEC R0 結(jié)果(A)=_ ,(R0)=_ ,(26H)=_ 。例:設(shè)(A)=C9H,(R2)=54H,(CY)=1,執(zhí)行指令SUBB A, R2 11001001 01010100 - 1 01110100結(jié)果:(A)=74H,借位位(CY)=0。三、BC

26、D碼調(diào)整指令DA A這條指令用于對BCD編碼的十進(jìn)制數(shù)相加結(jié)果進(jìn)行調(diào)整。例: 10010011 (93)BCD + 00111000 (38)BCD 11001011(CBH) 131相應(yīng)程序: MOV R2,#93H MOV A,#38H ADD A, R2 DA A四、乘法和除法指令 MUL AB 指令含義:將(A) (B),乘積的低位字節(jié)放在A中,高位字節(jié)放在寄存器B中。對PSW狀態(tài)位的影響:Cy位被清0乘積大于FFH時,OV位為1。Eg: MOV A, #87H MOV B, #0ABH MUL AB則:A= ?(2DH) B=? (5AH) OV=?1 1、乘法指令2、除法運算DIV

27、 AB指令含義:將(A) (B),將商放入A,余數(shù)放入寄存器B中。對PSW標(biāo)志位的影響:Cy位被清0如果除數(shù)(B)=0,則OV位被置1,表示除法無意義,不能進(jìn)行。EG:MOV A,#100 MOV B,#26 DIV AB 則:A= ? 03 B=?22(16H) CY=?03.3.3 邏輯運算指令該類指令包含與、或、非、清0、異或和移位指令等共24條。這些指令都不會影響PSW的各標(biāo)志位。一、邏輯“與”運算指令 ANL A,Rn ;A (A)(Rn) ANL A,direct; A (A)(direct) ANL A,Ri; A (A)(Ri) ANL A, #data; A (A)data

28、ANL direct,A ; direct (A)(direct) ANL direct,#data ; direct (direct)data例:(A)=78H,(R1)=37H,則執(zhí)行指令 ANL A,R1后,(A)=30H (A) 01111000 (R1) 00110111 (A) 00110000程序設(shè)計:讀入P1口的數(shù)據(jù),將其低4位清0,高4位保留,再把結(jié)果放到內(nèi)部RAM的40H單元。MOV P1,#0FFH ;使P1口置位輸入方式,先要寫1MOV A,P1 ;讀P1口數(shù)據(jù)到AANL A,#0F0H ;A的高4位和0f與,不變,低4位和0與,清0MOV 40H,A ;把Acc的值寫

29、到片內(nèi)RAM40H單元二、邏輯“或”運算指令 ORL A,Rn ;A (A)V(Rn) ORL A,direct; A (A)V(direct) ORL A,Ri; A (A)V(Ri) ORL A, #data; A (A)Vdata ORL direct,A ; direct (A)V(direct) ORL direct,#data ; direct (direct) Vdata 邏輯或指令也稱邏輯加指令,可以用于對累加器A或者RAM單元的內(nèi)容,特別是對特殊功能寄存器的內(nèi)容進(jìn)行變換,使其中的某位置1而其余位不變。或運算舉例:假設(shè)(A)=60H,(30H)=79H,則執(zhí)行指令 ORL A,

30、 30H后,(A)=79H (A) 01100000 (30H) V 01111001 01111001程序設(shè)計舉例:將串口緩沖區(qū)SBUF中的數(shù)據(jù)送到內(nèi) 部RAM40H單元,再將其低7位(D6D0)全部變成1. MOV 40H,SBUFORL 40H,#7FH三、邏輯“異或”運算 XRL A,Rn ;A (A) (Rn) XRL A,direct; A (A) (direct) XRL A,Ri; A (A) (Ri) XRL A, #data; A (A) data XRL direct,A ; direct (A) (direct) XRL direct,#data ; direct (d

31、irect) data可以用于對累加器A或者RAM單元的內(nèi)容,特別是對特殊功能寄存器的內(nèi)容進(jìn)行變換,使其中的某位取反而其余位不變。 異或運算舉例:假設(shè)(A)=45H,(60H)=78H,則在執(zhí)行指令。 XRL A,60H后(A) =3DH (A) 01000101 (60H) 01111000 00111101 異或指令可用于判斷兩個字節(jié)中的數(shù)據(jù)是否相等.程序設(shè)計:如果(40H)=(60H),將PSW中的F0位置1. CLR F0 MOV A,40H XRL A,60H JNZ OUT SETB F0 ; (40h)=(60h) f0=1 . out: . ;(40h)(60h)四、累加器清0

32、和取反指令累加器清0指令 CLR A ;A 0累加器按位取反指令 CPL A ;A /A例:假設(shè)(A)=89H,在執(zhí)行指令 CPL A后,(A)=76H 89H=10001001取反: 01110110=76H 五、移位指令RL A 左環(huán)移累加器 A累加器 ACy累加器 ACy累加器 ARRC A 帶進(jìn)位位右環(huán)移RR A 右環(huán)移RLC A 帶進(jìn)位位左環(huán)移MCS-51系列單片機(jī)中移位指令比較少,移位只能對累加器A進(jìn)行,共有循環(huán)左移、循環(huán)右移、帶進(jìn)位的循環(huán)左移和右移四種。六、累加器A高4位和低4位互換(1條) SWAP A;A30A74該指令的功能是將累加器A高4位和低4位相互交換。 例3-19設(shè)

33、片內(nèi)RAM的30H、31H單元中連續(xù)存放有4個壓縮型BCD碼數(shù)據(jù),試編一程序?qū)⑦@4個BCD碼倒序排列。解:一個壓縮型BCD碼占有4位二進(jìn)制數(shù),2個字節(jié)單元中共有4個BCD碼數(shù)據(jù)。要倒序就必須將兩個字節(jié)單元中的高四位與低四位互相交換。再將兩個字節(jié)單元的內(nèi)容互相交換即可。相應(yīng)程序如下:MOVA,30H;A=(30H)=a0a1SWAPA;A74A30,A=a1a0XCHA,31H;A(31H),A=a2a3,(31H)=a1a0SWAPA;A=a3a2MOV30H,A;(30H)=a3a23.3.4 位操作指令(17條)1位數(shù)據(jù)傳送指令MOVC,bit;CbitMOV bit,C;bitC2位置位

34、和清零指令SETBC;C1SETBbit;bit1CLRC;C0CLRbit;bit03位運算指令A(yù)NL C,bit;CCbitANL C,/bit;CCbitORL C,bit;CCbitORL C,/bit;CCbit CPLC;C CCPLbit;bitbit 3.3.5 控制轉(zhuǎn)移指令 在編寫一個略復(fù)雜的控制程序時,不免要涉及到程序的跳轉(zhuǎn)和子程序調(diào)用,這時就要用到轉(zhuǎn)移類指令。轉(zhuǎn)移類指令包含有條件轉(zhuǎn)移和無條件轉(zhuǎn)移兩種一、無條件轉(zhuǎn)移指令組1、長轉(zhuǎn)移指令 LJMP 目標(biāo)語句說明:目標(biāo)語句可以是程序存儲器64KB空間的任何地方。2、絕對轉(zhuǎn)移指令 AJMP 目標(biāo)語句 例: 4002H AJMP M

35、M 4600H MM: MOV A,#00H 注意:目標(biāo)語句必須和當(dāng)前語句同頁。在51單片機(jī)中,64KB程序存儲器分成32頁,每頁2KB(7FFH)。比如:0000H07FFH 0800H0FFFH 1000H17FFH 1800H1FFFH3、短轉(zhuǎn)移指令 SJMP 目標(biāo)語句(rel)轉(zhuǎn)移目的地址 = (PC)+ 2 + rel,所以 rel = 轉(zhuǎn)移目的地址(PC)2但,實際使用中常寫成 SJMP addr16,匯編時會自動轉(zhuǎn)換成rel。例: 4060H SJMP LOOP 4090H LOOP:MOV A,#0FFH 注意:短跳轉(zhuǎn)的目標(biāo)語句地址必須在當(dāng)前語句向前128(80H)字節(jié),向后1

36、27(7FH)字節(jié),否則在進(jìn)行程序編譯時肯定出錯。4、間接轉(zhuǎn)移指令 JMP A+DPTR該指令主要用于多分支的跳轉(zhuǎn)程序設(shè)計。跳轉(zhuǎn)的目標(biāo)地址是累加器A和數(shù)據(jù)指針DPTR之和,它可以是64KB存儲空間的任何地方。程序設(shè)計舉例:如果(A)=00H,執(zhí)行SS子程序;如果(A)=01H,執(zhí)行MM子程序;如果(A)=02H,執(zhí)行XX子程序。 ORG 4000H MOV DPTR, #5000H MOV R2,A CLR C RLC A ADD A, R2 JMP A+DPTR ORG 5000H5000H LCALL SS5003H LCALL MM5006H LCALL XX 二、條件轉(zhuǎn)移指令所謂條件轉(zhuǎn)

37、移,指指令中規(guī)定的條件滿足時,程序跳轉(zhuǎn)到目標(biāo)地址。1、累加器A判零轉(zhuǎn)移指令JZ 目標(biāo)地址(rel) ;如(A)=0,跳到目標(biāo)語句 ;如(A)0,順序執(zhí)行下 ;一條指令JNZ 目標(biāo)地址(rel) ;如(A)0,跳到目標(biāo)語句 ;如(A)=0,順序執(zhí)行下一條 ;指令目標(biāo)地址rel(偏移量), 實際使用中常寫成 addr16(16位的符號地址),匯編時會自動轉(zhuǎn)換成rel。注意:目標(biāo)語句的地址是相對地址,應(yīng)該在當(dāng)前語句向前不超過128字節(jié),向后不超過127字節(jié). 程序舉例: MOV A, #10H JZ OUT MOV R2,#30H OUT: RLC A 2、判位轉(zhuǎn)移指令該類指令的功能是檢測指定位是1

38、還是0,若條件符合,則CPU轉(zhuǎn)向指定的目標(biāo)地址去執(zhí)行程序;否則,順序執(zhí)行下條指令。JC rel;若Cy=1,則PCPC+2+rel ;若Cy=0,PCPC+2 JNC rel;若Cy=0,則PCPC+2+rel ;若Cy=1,PCPC+2JB bit,rel;若(bit)=1,則PCPC+3+rel ;若(bit)=0,PCPC+3 JNB bit,rel;若(bit)=0,則 PCPC+3+rel ;若(bit)=1,PCPC+3 JBC bit,rel ;若(bit)=1, PCPC+3+rel ,且(bit)0;若(bit)=0,PCPC+3【例】 編寫一程序,實現(xiàn)下圖中的邏輯運算電路。其中P3.1、P1.1、P1.0分別是單片機(jī)端口線上的信息,RS0、RS1是PSW寄存器中的兩個標(biāo)

溫馨提示

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

評論

0/150

提交評論