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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

6、的存儲(chǔ)器主要有內(nèi)部RAM區(qū)和特殊功能寄存器SFR區(qū)。 MOV A,30H;將內(nèi)部RAM30H單元內(nèi)的數(shù)傳送給累加器ACC。 MOV TMOD,#20h ;TMOD定時(shí)器方式控制寄存器,屬于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ī)中有兩個(gè)寄存器

7、可以用于間接尋址,它們是R0和R1。當(dāng)指向片外的64KB的RAM地址空間時(shí),可用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í)行的操作是將:程序存儲(chǔ)器1050H單元中的數(shù)據(jù)傳送給累加器ACC。同樣尋址方式的指令還有兩條:MOVC A,A+PCJMP A+DPTR該類(lèi)指令常用于編寫(xiě)查表程序。指令:MOVC A,A+DPTR 工作過(guò)程:3055H相加=3055HADPTR3000H取出地址 A55H66H66H3.2.6 相對(duì)尋址在跳轉(zhuǎn)程序中有一種相對(duì)尋址方式,程序的書(shū)寫(xiě)方式是:SJMP rel程序含義:當(dāng)程序執(zhí)

9、行到上述語(yǔ)句時(shí),在當(dāng)前語(yǔ)句位置的基礎(chǔ)上向前或向后跳轉(zhuǎn)rel中指明的位置。范例JZ relCJNE A, #DATA , relDJNZ R0,rel3.2.7 位尋址當(dāng)單片機(jī)要進(jìn)行某一位二進(jìn)制數(shù)操作時(shí),可采用位尋址。Eg. :SETB C指令含義:將專(zhuān)用寄存器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類(lèi):數(shù)據(jù)傳送和交換指令(29條)算術(shù)運(yùn)算指令(24條)邏輯運(yùn)算指令(24條)控制轉(zhuǎn)移指令(17條)位操作指

10、令(17條)3.3 MCS-51系列單片機(jī)的指令系統(tǒng)2.2.1 數(shù)據(jù)傳送和交換類(lèi)指令 常用助記符: MOV 單片機(jī)內(nèi)部RAM中的數(shù)據(jù)傳遞 MOVX 累加器和單片機(jī)外部數(shù)據(jù)存儲(chǔ)器間數(shù)據(jù)傳遞 MOVC 累加器和程序存儲(chǔ)器之間的數(shù)據(jù)傳遞 XCH 累加器和某個(gè)內(nèi)部RAM單元進(jìn)行數(shù)據(jù)交換 XCHD 累加器和某個(gè)內(nèi)部RAM單元進(jìn)行低半字節(jié)數(shù)據(jù)交換 PUSH 將某個(gè)內(nèi)部RAM單元的數(shù)據(jù)壓入堆棧 POP 將堆棧內(nèi)的數(shù)據(jù)彈出數(shù)據(jù)傳送和交換類(lèi)指令主要有以下幾種:內(nèi)部數(shù)據(jù)傳遞指令數(shù)據(jù)指針賦值指令片外數(shù)據(jù)傳送指令ROM數(shù)據(jù)訪問(wèn)指令棧操作指令數(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)行間址尋址時(shí),只能夠使用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)要對(duì)片外的RAM和I/O接口進(jìn)行訪問(wèn)時(shí),或進(jìn)行查表操作 時(shí),通常要對(duì)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時(shí),只能訪問(wèn)低8位地址為00HFFH地址段;使用DPTR時(shí),能訪問(wèn)0000H FFFFH地址段。應(yīng)用舉例:例: MOV DPTR,#2003H MOV A, #00H MOVX DPTR,A指令執(zhí)行過(guò)程: ADPTR(地址)2003H2003H00H00H注意:只有累加器A才能把數(shù)據(jù)傳到外部RAM,或接收從外 部數(shù)據(jù)存儲(chǔ)器傳回的數(shù)據(jù)。 比如:MOVX 20H, DPTR MOVX DPTR,SBUF MOVX DPTR,R2 MOVX DPTR,R1 都是錯(cuò)誤的思考:如果要將內(nèi)部RA

16、M中40H單元中的數(shù)據(jù)傳遞到外部RAM的2000H單元中,應(yīng)如何解決?試寫(xiě)出相應(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間的某個(gè)數(shù),現(xiàn)要求查出該數(shù)的7段共陰顯示代碼,并將代碼傳回累加器。解決方案:在程序存儲(chǔ)器中

17、劃出一個(gè)區(qū)域用于存放09的7段共陰顯示代碼,比如將代碼存放在0400H開(kāi)始的地方。程序如下: 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段共陰顯示代碼 注意:我們只能將程序存儲(chǔ)器中的數(shù)據(jù)傳出(讀出),而不能將數(shù)據(jù)傳入(寫(xiě)入)程序存儲(chǔ)器。因此,語(yǔ)句: MOVC A+DPTR , A MOVC A+PC , A 都是錯(cuò)誤的。思考題:MCS-51單片機(jī)的運(yùn)算能力比較差,想想能不能

18、夠利用查表方式進(jìn)行函數(shù)y=sin(x)的運(yùn)算?五、堆棧操作指令堆棧操作指令包含入棧(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中的某個(gè)單元和累加器A之間進(jìn)行數(shù)據(jù)交換,可以是

19、整個(gè)字節(jié),也可以是半個(gè)字節(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ù)運(yùn)算指令 算術(shù)運(yùn)算指令有加法、減法、乘法和除法四類(lèi),除加1和減1指令,其他所有的指令都將影響PSW的標(biāo)志位。程序狀態(tài)字PSWD7D6D5D4D3D2D1D0CYACF0RS1RS0OVP進(jìn)位借位輔助進(jìn)位自定標(biāo)志通用寄存器選擇位溢出標(biāo)志奇偶校驗(yàn)一、加法指令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)位的加法指令加法運(yùn)算對(duì)PSW標(biāo)志位的影響1、在上例中,如果運(yùn)算結(jié)果超出FFH(255),將產(chǎn)生進(jìn)位PSW的CY位將被置1。2、若預(yù)先說(shuō)明40H和41H中放置的是有符號(hào)數(shù),則在運(yùn)算指令“ADD A,41H”執(zhí)行后,還要檢查PSW中溢出位OV的狀態(tài),如果OV位為1,則運(yùn)算結(jié)果錯(cuò)誤。溢出產(chǎn)生的條件:在運(yùn)算時(shí),如果D6位和D7位中一個(gè)有進(jìn)位而另一個(gè)無(wú)進(jìn)位,則OV=1,溢出。即:OverFlow=C6C7 OverFlow=1,溢出OverFlow=0:無(wú)溢出。溢出發(fā)生在有符號(hào)數(shù)的運(yùn)算中,同符

22、號(hào)數(shù)相加或異符號(hào)數(shù)相減,則可能發(fā)生溢出。異號(hào)數(shù)相加一定不會(huì)產(chǎn)生溢出!2、帶進(jìn)位的加法運(yùn)算該類(lèi)指令主要用于多字節(jié)的加法運(yùn)算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ù)是無(wú)符號(hào)數(shù),則在計(jì)算后要注意是否產(chǎn)生進(jìn)位。如果加數(shù)和被加數(shù)是有符號(hào)數(shù),則在計(jì)算后要注意是否溢出,只要溢出,則運(yùn)算結(jié)果錯(cuò)誤;如果無(wú)溢出,則注意是否有進(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注意:以上所有指令不會(huì)影響PSW中的各個(gè)標(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ù)是無(wú)符號(hào)數(shù),則在計(jì)算后要注意是否產(chǎn)生借位。如果減數(shù)和被減數(shù)是有符號(hào)數(shù),則在計(jì)算后要注意是否溢出,只要溢出,則運(yùn)算結(jié)果錯(cuò)誤;如果無(wú)溢出,則注意是否有借位

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指令也不會(huì)影響PSW的各個(gè)標(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這條指令用于對(duì)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中。對(duì)PSW狀態(tài)位的影響:Cy位被清0乘積大于FFH時(shí),OV位為1。Eg: MOV A, #87H MOV B, #0ABH MUL AB則:A= ?(2DH) B=? (5AH) OV=?1 1、乘法指令2、除法運(yùn)算DIV

27、 AB指令含義:將(A) (B),將商放入A,余數(shù)放入寄存器B中。對(duì)PSW標(biāo)志位的影響:Cy位被清0如果除數(shù)(B)=0,則OV位被置1,表示除法無(wú)意義,不能進(jìn)行。EG:MOV A,#100 MOV B,#26 DIV AB 則:A= ? 03 B=?22(16H) CY=?03.3.3 邏輯運(yùn)算指令該類(lèi)指令包含與、或、非、清0、異或和移位指令等共24條。這些指令都不會(huì)影響PSW的各標(biāo)志位。一、邏輯“與”運(yùn)算指令 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è)計(jì):讀入P1口的數(shù)據(jù),將其低4位清0,高4位保留,再把結(jié)果放到內(nèi)部RAM的40H單元。MOV P1,#0FFH ;使P1口置位輸入方式,先要寫(xiě)1MOV A,P1 ;讀P1口數(shù)據(jù)到AANL A,#0F0H ;A的高4位和0f與,不變,低4位和0與,清0MOV 40H,A ;把Acc的值寫(xiě)

29、到片內(nèi)RAM40H單元二、邏輯“或”運(yùn)算指令 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 邏輯或指令也稱(chēng)邏輯加指令,可以用于對(duì)累加器A或者RAM單元的內(nèi)容,特別是對(duì)特殊功能寄存器的內(nèi)容進(jìn)行變換,使其中的某位置1而其余位不變。或運(yùn)算舉例:假設(shè)(A)=60H,(30H)=79H,則執(zhí)行指令 ORL A,

30、 30H后,(A)=79H (A) 01100000 (30H) V 01111001 01111001程序設(shè)計(jì)舉例:將串口緩沖區(qū)SBUF中的數(shù)據(jù)送到內(nèi) 部RAM40H單元,再將其低7位(D6D0)全部變成1. MOV 40H,SBUFORL 40H,#7FH三、邏輯“異或”運(yùn)算 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可以用于對(duì)累加器A或者RAM單元的內(nèi)容,特別是對(duì)特殊功能寄存器的內(nèi)容進(jìn)行變換,使其中的某位取反而其余位不變。 異或運(yùn)算舉例:假設(shè)(A)=45H,(60H)=78H,則在執(zhí)行指令。 XRL A,60H后(A) =3DH (A) 01000101 (60H) 01111000 00111101 異或指令可用于判斷兩個(gè)字節(jié)中的數(shù)據(jù)是否相等.程序設(shè)計(jì):如果(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ī)中移位指令比較少,移位只能對(duì)累加器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個(gè)壓縮型BCD碼數(shù)據(jù),試編一程序?qū)⑦@4個(gè)BCD碼倒序排列。解:一個(gè)壓縮型BCD碼占有4位二進(jìn)制數(shù),2個(gè)字節(jié)單元中共有4個(gè)BCD碼數(shù)據(jù)。要倒序就必須將兩個(gè)字節(jié)單元中的高四位與低四位互相交換。再將兩個(gè)字節(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位運(yùn)算指令A(yù)NL C,bit;CCbitANL C,/bit;CCbitORL C,bit;CCbitORL C,/bit;CCbit CPLC;C CCPLbit;bitbit 3.3.5 控制轉(zhuǎn)移指令 在編寫(xiě)一個(gè)略復(fù)雜的控制程序時(shí),不免要涉及到程序的跳轉(zhuǎn)和子程序調(diào)用,這時(shí)就要用到轉(zhuǎn)移類(lèi)指令。轉(zhuǎn)移類(lèi)指令包含有條件轉(zhuǎn)移和無(wú)條件轉(zhuǎn)移兩種一、無(wú)條件轉(zhuǎn)移指令組1、長(zhǎng)轉(zhuǎn)移指令 LJMP 目標(biāo)語(yǔ)句說(shuō)明:目標(biāo)語(yǔ)句可以是程序存儲(chǔ)器64KB空間的任何地方。2、絕對(duì)轉(zhuǎn)移指令 AJMP 目標(biāo)語(yǔ)句 例: 4002H AJMP M

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

36、27(7FH)字節(jié),否則在進(jìn)行程序編譯時(shí)肯定出錯(cuò)。4、間接轉(zhuǎn)移指令 JMP A+DPTR該指令主要用于多分支的跳轉(zhuǎn)程序設(shè)計(jì)。跳轉(zhuǎn)的目標(biāo)地址是累加器A和數(shù)據(jù)指針DPTR之和,它可以是64KB存儲(chǔ)空間的任何地方。程序設(shè)計(jì)舉例:如果(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ī)定的條件滿(mǎn)足時(shí),程序跳轉(zhuǎn)到目標(biāo)地址。1、累加器A判零轉(zhuǎn)移指令JZ 目標(biāo)地址(rel) ;如(A)=0,跳到目標(biāo)語(yǔ)句 ;如(A)0,順序執(zhí)行下 ;一條指令JNZ 目標(biāo)地址(rel) ;如(A)0,跳到目標(biāo)語(yǔ)句 ;如(A)=0,順序執(zhí)行下一條 ;指令目標(biāo)地址rel(偏移量), 實(shí)際使用中常寫(xiě)成 addr16(16位的符號(hào)地址),匯編時(shí)會(huì)自動(dòng)轉(zhuǎn)換成rel。注意:目標(biāo)語(yǔ)句的地址是相對(duì)地址,應(yīng)該在當(dāng)前語(yǔ)句向前不超過(guò)128字節(jié),向后不超過(guò)127字節(jié). 程序舉例: MOV A, #10H JZ OUT MOV R2,#30H OUT: RLC A 2、判位轉(zhuǎn)移指令該類(lèi)指令的功能是檢測(cè)指定位是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ě)一程序,實(shí)現(xiàn)下圖中的邏輯運(yùn)算電路。其中P3.1、P1.1、P1.0分別是單片機(jī)端口線上的信息,RS0、RS1是PSW寄存器中的兩個(gè)標(biāo)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論