第3章MCS-51單片機(jī)指令系統(tǒng).ppt_第1頁(yè)
第3章MCS-51單片機(jī)指令系統(tǒng).ppt_第2頁(yè)
第3章MCS-51單片機(jī)指令系統(tǒng).ppt_第3頁(yè)
第3章MCS-51單片機(jī)指令系統(tǒng).ppt_第4頁(yè)
第3章MCS-51單片機(jī)指令系統(tǒng).ppt_第5頁(yè)
已閱讀5頁(yè),還剩160頁(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章 單片機(jī)指令系統(tǒng),3.1 MCS-51單片機(jī)指令格式和尋址方式 3.2 MCS-51單片機(jī)指令分類介紹 3.3 MCS-51單片機(jī)指令匯總,內(nèi)容提要:,3.1 MCS-51單片機(jī)指令格式和尋址方式,3.1.2 MCS-51單片機(jī)指令格式 指令的表示形式稱指令格式。編寫程序時(shí)必須嚴(yán)格按指令格式書寫。 MCS-51指令由操作碼和操作數(shù)組成。 指令應(yīng)具有以下功能: (1)操作碼指明執(zhí)行什么性質(zhì)和類型的操作。例如,數(shù)的傳送、加法、減法等。 (2)操作數(shù)指明操作的數(shù)本身或者是操作數(shù)所在的地址。 (3)指定操作結(jié)果存放的地址。 匯編語(yǔ)言指令格式如下:,標(biāo)號(hào):,操作碼助記符,第一操作數(shù),,第二操作數(shù)

2、,;注釋,1. 一字節(jié)指令(49條) 操作碼與操作數(shù)信息同在一字節(jié)中。 如:INC DPTR (1010 0011) MOV A , Rn (1110 1rrr) 2. 二字節(jié)指令(45條) 第一字節(jié)為操作碼,第二字節(jié)為操作數(shù)。 如:MOV A , #data (0111 0100 立即數(shù)) #data表示一個(gè)8位的二進(jìn)制操作數(shù),占一個(gè)字節(jié),稱為立即數(shù)。 3. 三字節(jié)指令(17條) 第一字節(jié)為操作碼,第二、三字節(jié)為操作數(shù)(數(shù)據(jù)或地址)。 如:ANL direct , #data (0101 0011 直接地址 立即數(shù)) direct為單元地址,#data為8位立即數(shù)。,3.1.3 尋址方式,寄

3、存器尋址 直接尋址 寄存器間接尋址 立即尋址 變址尋址 位尋址 相對(duì)尋址,指令中,操作數(shù)可能是具體的數(shù)據(jù),也可能是具體的存放數(shù)據(jù)的地址或符號(hào),無(wú)論何種情況,都可由操作數(shù)取得參與指令運(yùn)行的二進(jìn)制數(shù)據(jù)。這個(gè)過(guò)程叫作尋址。,寄存器尋址,以寄存器的內(nèi)容作為操作數(shù)的尋址方式。包括A、B 、DPTR寄存器以及通用寄存器R0R7 。 例如: CLR A ;A0 INC DPTR ;DPTR(DPTR)+1 ADDR5,# 20H ;R5#20H+(R5),直接尋址,指令中直接給出操作數(shù)地址的尋址方式,能進(jìn)行直接尋址的存儲(chǔ)空間有SFR寄存器和內(nèi)部數(shù)據(jù)RAM(因?yàn)槭?位地址)。 例如:MOV PSW,# 20H

4、 ;PSW#20H PSW為直接尋址寄存器的符號(hào)地址。 MOVA,30H;A內(nèi)部RAM 30H單元中的內(nèi)容 30H為直接給出的內(nèi)部RAM的地址。 注意:這是訪問(wèn)大部分SFR寄存器的唯一方法,可寫成單元地址形式,也可寫成寄存器符號(hào)形式。,直接尋址方式示意圖,思考問(wèn)題:我們知道,工作寄存器就是內(nèi)存單元的一部分,如果我們選擇工作寄存器組0,則R0就是RAM的00H單元,那么這樣一來(lái),MOV A,00H 和 MOV A,R0不就沒(méi)什么區(qū)別了嗎?,的確,這兩條指令執(zhí)行的結(jié)果是完全相同的,都是將00H單元中的內(nèi)容送到A中去,但是執(zhí)行的過(guò)程不同,執(zhí)行第一條指令需要2個(gè)機(jī)器周期,而第二條則只需要1個(gè)機(jī)器周期,

5、第一條指令變成最終的目標(biāo)碼要兩個(gè)字節(jié)(E5H 00H),而第二條則只要一個(gè)字節(jié)(E8H)就可以了。,寄存器間接尋址,以寄存器中的內(nèi)容作為操作數(shù)的地址,通過(guò)該地址獲得操作數(shù)的尋址方式。可間接尋址的存儲(chǔ)器空間包括內(nèi)部數(shù)據(jù)RAM和外部數(shù)據(jù)RAM。 能用于寄存器間接尋址的寄存器有R0,R1,DPTR,SP。其中R0、R1必須是工作寄存器組中的寄存器。SP僅用于堆棧操作(POP和PUSH)。為區(qū)別于寄存器尋址,使用時(shí)寄存器前面加“”標(biāo)志,例如:MOV R0,A ;內(nèi)部RAM(R0)(A)其指令操作過(guò)程示意圖如圖3-1所示。 又如:MOVX A,R1;A外部RAM(R1)其指令操作過(guò)程示意圖如圖3-2所示

6、。 再如:MOVX DPTR , A ;外部RAM(DPTR)(A) 其指令操作過(guò)程示意圖如圖3-3所示。,圖3-1 MOV R0,A間接尋址示意圖,圖3-2 MOVX A,R1間接尋址示意圖,圖3-3 MOVX DPTR,A間接尋址示意圖,例:(R1)80H、(80H)=33H,則執(zhí)行指令 MOV A,Ri后,累加器A的內(nèi)容為33H而不是80H,寄存器間接尋址方式示意圖,立即尋址,指令中直接給出操作數(shù)的尋址方式。立即數(shù)用前面加有#號(hào)的8位或16位數(shù)來(lái)表示,立即數(shù)只能是源操作數(shù),不能作為目的操作數(shù)。 例如: MOV A ,# 60H ;A#60H MOV DPTR,# 3400H;DPTR#3

7、400H MOV 30H ,# 40H ;30H單元#40H 上述三條指令執(zhí)行完后,累加器A中數(shù)據(jù)為立即數(shù)據(jù)60H,DPTR寄存器中數(shù)據(jù)為3400H,30H單元中數(shù)據(jù)為立即數(shù)40H。,立即尋址示意圖,變址尋址,變址尋址只能對(duì)程序存儲(chǔ)器中數(shù)據(jù)進(jìn)行操作,尋址范圍64K。以DPTR或PC作為基址寄存器,A作為變址寄存器(其中的數(shù)看作無(wú)符號(hào)數(shù)),并以兩者內(nèi)容相加形成的16位地址作為操作數(shù)地址。由于程序存儲(chǔ)器是只讀的,因此變址尋址只有讀操作而無(wú)寫操作,在指令符號(hào)上采用MOVC的形式(如圖3-4所示)。 例如:MOVC A,A+DPTR ;A(A)+(DPTR) 又如,MOVC A, A+PC ;A(A)

8、+(PC) 這條指令與上條指令不同的是,基址寄存器是PC。 變址尋址的指令共3條,并且均為一字節(jié)指令。 另外一條是:JMP A+DPTR,圖3-4 MOVC A,A+DPTR變址尋址示意圖,例: MOVC A,A+DPTR,變址尋址方式示意圖,位尋址,位尋址只能對(duì)有位地址的單元作位尋址操作。 位尋址其實(shí)是一種直接尋址方式,不過(guò)其地址是位地址。 例如:SETB 10H ;將10H位置1 如果22H單元中存放著數(shù)據(jù)40H,22H單元的D0位的位地址為10H,執(zhí)行上述指令后(22H)=41H。 又如:MOV 32H,C ;32H (進(jìn)位位CY) ORL C ,32H ;CY(CY)(32H),相對(duì)尋

9、址,以當(dāng)前程序計(jì)數(shù)器PC的內(nèi)容為基礎(chǔ),加上指令給出的一字節(jié)補(bǔ)碼數(shù)(偏移量rel)形成新的PC值的尋址方式。 相對(duì)尋址用于修改PC值,主要用于實(shí)現(xiàn)程序的分支轉(zhuǎn)移。 轉(zhuǎn)移的目的地址=轉(zhuǎn)移指令地址+指令字節(jié)數(shù)+rel 例如,SJMP 08H ;PC(PC)+2+08H 指令操作示意圖如圖3-5所示。 偏移量rel是一帶符號(hào)8位二進(jìn)數(shù)的補(bǔ)碼數(shù),范圍為-128+127。實(shí)際書寫程序時(shí)往往先用地址標(biāo)號(hào)代替,在匯編為機(jī)器指令時(shí)再計(jì)算出來(lái)。,圖3-5 相對(duì)尋址示意圖,例: 指出下列每一條指令的尋址方式。 MOV 2FH,#40H MOV A , R0 MOV DPTR,#2020H MOV 45H,P0 MO

10、V A,R1 MOVC A,A+PC JC LOOP,中的源操作數(shù)為立即尋址,目的操作數(shù)為直接尋址。 中的源操作數(shù)為寄存器間接尋址,目的操作數(shù)為寄存器尋址。 中的源操作數(shù)為16位立即尋址,目的操作數(shù)為寄存器尋址。 中的源操作數(shù)和目的操作數(shù)都是直接尋址。 中的源操作數(shù)和目的操作數(shù)都為寄存器尋址。 中的源操作數(shù)為基址加變址尋址,目的操作數(shù)為寄存器尋址。 中的操作數(shù)為相對(duì)尋址。,例: 判斷下列指令是否正確,若不正確請(qǐng)指出錯(cuò)誤: MOV A , DPTR MOV DPTR,#03H MOV #80H,R7 MOV B,C,不正確。A是8位寄存器,DPTR為16位寄存器,不匹配。 正確。 不正確。#80

11、H為立即數(shù),不能作為目的地址。 不正確。B為8位字節(jié)寄存器,C為1位位累加器,不匹配。,3.1.4 尋址方式小結(jié),片內(nèi)外程序存儲(chǔ)器的指令尋址只能使用變址尋址 內(nèi)部數(shù)據(jù)存儲(chǔ)器由于使用頻繁,尋址方式多 外部數(shù)據(jù)存儲(chǔ)器,只能使用寄存器間接尋址 相對(duì)尋址只用于程序轉(zhuǎn)移 左邊操作數(shù)稱為目的操作數(shù),右邊操作數(shù)稱為源操作數(shù) 目的操作數(shù)只有寄存器尋址、直接尋址、寄存器間接尋址和位尋址4種方式,3.2 指令分類,按指令功能,MCS-51指令系統(tǒng)分為數(shù)據(jù)傳送(29條)、算術(shù)運(yùn)算(24條)、邏輯運(yùn)算及移位(24條)、控制轉(zhuǎn)移(17條)、位操作(17條)5大類。 位操作指令又稱布爾處理指令。,3.2.1 指令描述符號(hào)

12、介紹,Rn當(dāng)前選中的寄存器區(qū)中的8個(gè)工作寄存器R0R7(n=07) Ri當(dāng)前選中的寄存器區(qū)中的2個(gè)工作寄存器R0、R1(i=0,1) direct8位的內(nèi)部數(shù)據(jù)存儲(chǔ)器單元中的地址 #data包含在指令中的8位常數(shù) #data16包含在指令中的16位常數(shù) addr1616位目的地址 addr1111位目的地址,rel8位帶符號(hào)的偏移字節(jié),簡(jiǎn)稱偏移量 DPTR數(shù)據(jù)指針,可用作16位地址寄存器 bit內(nèi)部RAM或?qū)S眉拇嫫髦械闹苯訉ぶ肺?A累加器 ACC 直接尋址方式的累加器 B專用寄存器,用于乘法和除法指令中 C進(jìn)位標(biāo)志或進(jìn)位位,或布爾處理機(jī)中的累加器,間址寄存器或基址寄存器的前綴,如Ri,DPT

13、R / 位操作數(shù)的前綴,表示對(duì)該位操作數(shù)取反,如/bit 寄存器或片內(nèi)RAM的直接地址 ()某寄存器或存儲(chǔ)單元的內(nèi)容 ()由間接尋址的單元中的內(nèi)容 箭頭左邊的內(nèi)容被箭頭右邊的內(nèi)容所代替,3.2.2 數(shù)據(jù)傳送類指令,數(shù)據(jù)傳送類指令共29條,是將源操作數(shù)送到目的操作數(shù)。指令執(zhí)行后,源操作數(shù)不變,目的操作數(shù)被源操作數(shù)取代。數(shù)據(jù)傳送類指令用到的助記符有MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH、POP 8種。 源操作數(shù)可采用寄存器、寄存器間接、直接、立即、變址5種尋址方式尋址,目的操作數(shù)可以采用寄存器、寄存器間接、直接尋址3種尋址方式。MCS-51單片機(jī)片內(nèi)數(shù)據(jù)傳送途徑如圖3-6

14、所示。,圖3-6 MCS-51單片機(jī)片內(nèi)數(shù)據(jù)傳送圖,1以A為目的操作數(shù),MOV A,Rn ;A (Rn) MOV A,direct ;A(direct) MOV A,Ri ;A(Ri) MOV A,#data ;A #data,2以Rn為目的操作數(shù),MOV Rn,A ;Rn (A) MOV Rn,direct;Rn (direct) MOV Rn,#data;Rn #data,3以直接地址為目的操作數(shù),MOV direct ,A ;direct (A) MOV direct,Rn ; direct (Rn) MOV direct2 ,direct1 ;direct2 (direct1) MOV

15、 direct,Ri ; direct (Rn) MOV direct,#data ; direct #data,4以間接地址為目的操作數(shù),MOV Ri,A;(Ri) (A) MOV Ri,direct;(Ri) (direct) MOV Ri,#data;(Ri) #data 例如:設(shè)(30H)=6FH,R1=40H,執(zhí)行MOV R1,30H后,30H單元中數(shù)據(jù)取出送入R1間接尋址的40H單元,(40H)=6FH。,5以DPTR為目的操作數(shù),MOV DPTR,#data16;DPTR #data16 例如執(zhí)行 MOV DPTR,#2000H 后, (DPTR)= 2000H。,6訪問(wèn)外部數(shù)據(jù)

16、RAM,MOVX A,DPTR;A (DPTR) MOVX DPTR,A;(DPTR) (A) MOVX A,Ri; A (Ri) MOVX Ri,A;(Ri) (A),說(shuō)明: 片外數(shù)據(jù)存貯單元與片內(nèi)RAM之間的數(shù)據(jù)傳送以及片外數(shù)據(jù)存貯單元之間的數(shù)據(jù)傳送不能直接進(jìn)行,必須通過(guò)累加器A中轉(zhuǎn)。MOVX 20H, 2000H及MOVX 3000H, 2000H等都是錯(cuò)誤的。 尋址方式只能是寄存器間接尋址。參與間接尋址的寄存器只有Ri和DPTR兩種(3個(gè))。DPTR為16位寄數(shù)器,尋址范圍為0000H0FFFFH共64KB空間。而Ri是8位寄數(shù)器,只能尋址000FFH低256單元。,片外數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)

17、傳送指令,解 MOV DPTR ,#2000H MOVX A,DPTR MOV 20H, A MOV DPTR ,#2000H MOVX A,DPTR MOV R0,#0FAH MOVX R0,A,例 將片外數(shù)據(jù)存貯器2000H單元的內(nèi)容傳送到片內(nèi)的20H單元中;將片外數(shù)據(jù)存貯器2000H單元的內(nèi)容傳送到片外0FAH單元。,7讀程序存儲(chǔ)器,MOVC A,A+DPTR;A (A)+(DPTR) MOVC A,A+PC;A (A)+(PC) 例如已知A=30H,DPTR=3000H, 程序存儲(chǔ)器單元(3030H)=50H,執(zhí)行MOVC A, A+DPTR后,A=50H。,說(shuō)明: 程序存貯器只能讀出

18、,不能寫入,所以其數(shù)據(jù)傳送都是單向的,即從程序存貯器讀出數(shù)據(jù),并且只能向累加器A傳送。 ROM片內(nèi)、片外是統(tǒng)一編址,該指令既可訪問(wèn)片內(nèi),又可訪問(wèn)片外程序存貯器。 該類指令主要用于查表,又稱查表指令。應(yīng)用時(shí),一般以PC或DPTR確定表格的首址,查表時(shí),根據(jù)A中不同的內(nèi)容查找到表格中的相應(yīng)項(xiàng),故此時(shí)稱PC或DPTR為基址寄存器,A為變址寄存器,尋址方式為基址加變址尋址。 使用DPTR作基址寄存器比較靈活,且不易出錯(cuò)。建議盡可能使用MOVCA,DPTR指令。,解法一 以DPTR為基址寄存器,平方表首址可靈活安排在ROM中適當(dāng)?shù)奈恢萌?000H,即平方表的內(nèi)容從2000H單元放起。程序如下: ORG

19、1800H MOV DPTR ,#2000H MOV A,20H MOVC A,A+DPTR MOV 21H,A ORG 2000H DB 00H, 01H ,04H , 09H ,10H, 19H DB 24H, 31H, 40H , 51H ,64H,,例 以查表方式求出片內(nèi)RAM中20H單元數(shù)的平方值,存入片內(nèi)21H單元中。,RAM 21H,ORG 1000H 1000MOV A,20H 1001 ADD A,#03H 1003 MOVC A,A+PC 1004 MOV 21H,A 1006 RET 1007 DB 00H, 01H, 04H ,解法二 以PC為基址寄存器,此時(shí)表格須緊跟

20、程序之后,且要計(jì)算好表格首址位置(本例中要進(jìn)行加3修正,原因?)。,XCH A,20H XCH A,30H XCH A,20H,例 改正下列指令中的錯(cuò)誤,完成其功能: MOV A,2000H ;片外RAM 2000H單元內(nèi)容送入A。 MOVX 20H,2000H ;片外RAM 2000H單元內(nèi)容送入片內(nèi)20H單元。 MOVC A,2000H ;將ROM 2000H單元內(nèi)容送入A。 MOVX A,A+DPTR ;以查表方式將片外RAM單元的內(nèi)容送入A。 XCH 40H,30H ;交換片內(nèi)RAM 30H和40H單元的內(nèi)容。 PUSH AB ;將寄存器對(duì)AB的內(nèi)容壓入堆棧。,解 MOV DPTR,#

21、2000H MOVX A,DPTR,MOV DPTR,#2000H MOVX A,DPTR MOV 20H,A,MOV DPTR,#2000H MOV A,#0 MOVC A,A+DPTR,無(wú)法以查表方式將片外RAM 存貯單元的內(nèi)容送入A。,PUSH A PUSH B,例 設(shè)RAM 40H單元的內(nèi)容為80H,80H單元內(nèi)容為47H,P1口的輸入狀態(tài)為0FFH,試判斷下列程序執(zhí)行結(jié)果。 MOV R0,#40H MOV A,R0 MOV R1,A MOV B ,R1 MOV R1,P1 MOV P2,P1,解執(zhí)行結(jié)果為: (A)80H,(B)47H,(R0)40H,(R1)80H,(P1)0FFH

22、,(P2)0FFH,(80H)0FFH。,; R0 40H ; A ( 40H)80H ; R1 80H ; B ( 80H)47H ;( 80H) 0FFH ; P2 0FFH,8數(shù)據(jù)交換,數(shù)據(jù)交換指令XCH、XCHD、和SWAP共5條,如圖所示。 數(shù)據(jù)交換指令,l整字節(jié)交換 XCH A,Rn ;(A) (Rn) XCH A ,direct;(A)(direct) XCH A,Ri ;(A)(Ri),例:設(shè)(A)=08H,(R7)=0DCH, 執(zhí)行指令 XCH A, R7 結(jié)果為:(A)=0DCH, (R7)=08H,功能:將累加器A中內(nèi)容與源操作數(shù)互換,l半字節(jié)交換 XCHD A,Ri;(

23、A)03(Ri)03,例:(A)=80H,(R0)=30H,(30H)=0FH,執(zhí)行XCHD A, R0 結(jié)果為:(A)=8FH, (30H)=00H,功能:累加器A中內(nèi)容與源操作數(shù)低4位交換,高4位不變。,l累加器高低半字節(jié)交換 SWAP A;(A)03(A)47,功能:A中高4位與低4位互換。,例:(A)=80H ,執(zhí)行SWAP A結(jié)果為:(A)08H.,解 XCH A,20H SWAP A MOV R1,21H XCHD A,R1 SWAP A XCH A,20H,例 試用交換指令使片內(nèi)20H單元的高4位與21H單元的低4位交換。,所謂堆棧是在片內(nèi)RAM中按“先進(jìn)后出,后進(jìn)先出”原則設(shè)置

24、的專用存儲(chǔ)區(qū)。數(shù)據(jù)的進(jìn)棧出棧由指針SP統(tǒng)一管理。數(shù)據(jù)寫入堆棧稱入棧,數(shù)據(jù)從堆棧中讀出稱出棧。,9. 堆棧操作,PUSH direct ;SP (SP)+1, (SP) (direct) 功能:將堆棧指針加1后,片內(nèi)RAM單元內(nèi)容送進(jìn)棧頂單元,原RAM單元內(nèi)容不變。 說(shuō)明: PUSH指令常用于保護(hù)CPU現(xiàn)場(chǎng)。 棧操作是字節(jié)指令,每次只能壓入或彈出1個(gè)字節(jié)的內(nèi)容。 如PUSH DPTR是錯(cuò)誤的,但可以用以下兩條指令完成DPTR的入棧。 PUSH DPH PUSH DPL,1)入棧指令PUSH,例:設(shè)(A)=30H,(B)=80H ,(SP)=50H .則執(zhí)行指令: PUSH A PUSH B,結(jié)果

25、為:(51H)=30H,(52H)=80H,(SP)=52H,POPdirect ; direct (SP), SP (SP)-1 功能:將(SP)內(nèi)容傳送給片內(nèi)RAM單元,SP內(nèi)容減1。 說(shuō)明: 棧操作要注意先入后出的原則。 POP指令常用于恢復(fù)CPU現(xiàn)場(chǎng),2)出棧指令POP,例 試用棧操作指令完成P0和P1內(nèi)容的互換。 解 PUSH P0 PUSH P1 POP P0 POP P1,例: 將片內(nèi)RAM 30H單元與40H單元中的內(nèi)容互換。,方法1(直接地址傳送法): MOV31H,30H MOV30H,40H MOV40H,31H SJMP$,方法2(間接地址傳送法): MOVR0,#40

26、H MOVR1,#30H MOVA,R0 MOVB,R1 MOVR1,A MOVR0,B SJMP$,方法3 (字節(jié)交換傳送法): MOVA,30H XCHA,40H MOV30H,A SJMP$,方法4(堆棧傳送法): PUSH30H PUSH40H POP30H POP40H SJMP$,小結(jié): 1. MCS-51系列單片機(jī)指令系統(tǒng)共有多少條指令? 分哪幾類? 2.數(shù)據(jù)傳送類指令有幾種類型?它們是否影響標(biāo)志位?,3.2.3 算術(shù)運(yùn)算類指令,算術(shù)運(yùn)算類指令包括:ADD、ADDC、SUBB、MUL、DIV、INC、DEC和DA,如圖所示。 算術(shù)運(yùn)算類指令,1加法指令 ADD A,Rn;A (A

27、) + (Rn) ADD A,direct;A (A) +(direct) ADD A,Ri;A (A) +(Ri) ADD A,#data;A (A) + #data,功能:把源操作數(shù)與累加器A內(nèi)容相加,結(jié)果存在累加器中。該操作不改變?cè)床僮鲾?shù),影響PSW中的C、AC、OV和P位。 說(shuō)明: ADD指令的目的操作數(shù)只能是累加器A,且只有以上4種形式。如ADDB,40H或ADD A,203AH等都是不存在的,非法的。 指令中,參加運(yùn)算的兩個(gè)8位二進(jìn)制數(shù),即可看作是8位無(wú)符號(hào)數(shù)(0255),也可以看作是7位帶符號(hào)數(shù)的補(bǔ)碼數(shù)(-128+127)。,例 試編程計(jì)算40H和41H兩單元字節(jié)數(shù)的和,并存放在

28、42H單元。若(40H)=0B3H,(41H)=79H,給出計(jì)算結(jié)果并判斷PSW受影響的位。,解程序如下: MOV A , 40H ADD A , 41H MOV 42H,A,若(40H)=0B3H,(41H)=79H,則運(yùn)算結(jié)果:若是無(wú)符號(hào)數(shù),和為12CH;若是有符號(hào)數(shù),和為+2CH。 (42H)=2CH, (C)=1,(AC)=0,(OV)=0,(P)=1。,例 (A)=85H,(R0)=20H,(20H)=0AFH,執(zhí)行指令: ADD A,R0 10000101 +10101111 1 00110100 結(jié)果:(A)=34H;(C )=1;(AC)=1;(OV)=1。 對(duì)于加法,溢出只能

29、發(fā)生在兩個(gè)加數(shù)符號(hào)相同的情況。在進(jìn)行帶符號(hào)數(shù)的加法運(yùn)算時(shí),溢出標(biāo)志OV是一個(gè)重要的編程標(biāo)志,利用它可以判斷兩個(gè)帶符號(hào)數(shù)相加,和數(shù)是否溢出。,2帶進(jìn)位加法指令 ADDC A,Rn;A (A) + (Rn) + (C ) ADDC A,direct;A (A) +(direct)+( C) ADDC A,Ri;A (A) +(Ri)+( C) ADDC A,#data;A (A) + #data +( C) C為來(lái)自PSW狀態(tài)寄存器中的進(jìn)位位C。 例如,設(shè)(A)=20H,(R0)=21H,(C )=1,執(zhí)行指令 ADDC , R0后,(A)=42H。,功能:該操作與ADD類似,只是PSW中的進(jìn)位位

30、C參與運(yùn)算。帶進(jìn)位加法指令通常用于多字節(jié)或多個(gè)數(shù)加法運(yùn)算。,解當(dāng)(C )0時(shí),兩指令運(yùn)行結(jié)果一樣,為(A)0A4H。 當(dāng)(C)1時(shí),兩指令運(yùn)行的結(jié)果不同,相差1。即ADD A, 30H的結(jié)果為(A)0A4H,而ADDC A,30H的結(jié)果是(A)0A5H。 顯然,ADD指令與C值無(wú)關(guān),而ADDC的運(yùn)行結(jié)果與C值有關(guān)。,例已知(A)=26H , (30H)=7EH , 比較在(C )0、(C )1兩種情況下執(zhí)行 ADD A ,30H 和 ADDC A ,30H指令的結(jié)果。,解 MOV A,30H ADD A,40H ;低字節(jié)相加 MOV 50H,A MOV A,31H ADDC A,41H ;高字

31、節(jié)相加 MOV 51H,A MOV A, #00H ADDC A,#00H ;取高相加產(chǎn)生的進(jìn)位 MOV 52H,A 說(shuō)明: 多字節(jié)數(shù)求和,從低字節(jié)開始,最低字節(jié)相加用ADD指令,高字節(jié)相加用ADDC指令。 N字節(jié)數(shù)相加,結(jié)果可能為N+1字節(jié)數(shù)。 為單獨(dú)取得進(jìn)位的值,可參考本頁(yè)范例。,例 兩字節(jié)無(wú)符號(hào)數(shù)相加,被加數(shù)放在內(nèi)部RAM30H,31H單元(低位放在前),加數(shù)放在內(nèi)部RAM40H、41H單元。計(jì)算兩數(shù)的和,放在50H52H單元中。,例試把存放在R1R2和R3R4中的兩個(gè)16位數(shù)相加,結(jié)果存于R5R6中。 解:參考程序如下: MOVA,R2;取第一個(gè)數(shù)的低8位 ADDA,R4;兩數(shù)的低8位

32、相加 MOVR6,A;保存和的低8位 MOVA,R1;取第一個(gè)數(shù)的高8位 ADDCA,R3;兩數(shù)的高8位相加并把低8位相加時(shí)的進(jìn)位位加進(jìn)來(lái) MOVR5,A;把相加的高8位存入R5寄存器中,3帶借位減法指令 SUBB A,Rn;A (A) (Rn) ( C) SUBB A,direct;A (A) (direct)-( C) SUBB A,Ri ;A (A) ( (Ri) ( C) SUBB A,#data;A (A) - #data ( C) 例如,設(shè)A=39H,R0=20H,(20H)=32H,(C )=1,執(zhí)行指令 SUBB A,R0后,(A)=06H。,功能: 指令功能是以A中數(shù)為被減數(shù)

33、,減去操作數(shù),再減去進(jìn)位,差存在A中。影響PSW中的C,AC,OV,和P位。 說(shuō)明: MCS-51指令系統(tǒng)中,無(wú)不帶進(jìn)位(實(shí)為借位)的減法指令。若進(jìn)行不帶借的減法運(yùn)算,要在運(yùn)算前使用ADD A,#00H或CLR C等指令將進(jìn)位標(biāo)志清0。 減法指令中,無(wú)BCD碼調(diào)整。,例 兩個(gè)雙字節(jié)數(shù)相減,被減數(shù)放在30H,31H,減數(shù)放在40H,41H中,差放入50H、51H。,解 ADD A,#00H ;將進(jìn)位位清0 MOV A,30H SUBB A,40H ;低字節(jié)相減 MOV 50H,A MOV A,31H SUBB A,41H ;高字節(jié)相減 MOV 51H,A 說(shuō)明:多字節(jié)相減,從低字節(jié)開始,最低字節(jié)

34、相減時(shí),應(yīng)先將進(jìn)位位清0。,4乘法指令 MUL AB;BA (A)(B),功能:累加器A和寄存器B中的兩個(gè)無(wú)符號(hào)8位數(shù)相乘,所得16位乘積的低8位放在A中,高8位放在B中。 說(shuō)明:乘法指令影響PSW的狀態(tài)。執(zhí)行MUL指令后,C被清0,OV與結(jié)果有關(guān),若OV=0,表示乘積小于255(0FFH),只在A中,(B)0;若OV=1,則乘積大于255,(B)0。 例如:(A)=20H, (B)=0A0H, 執(zhí)行指令 MUL AB 結(jié)果:(A)00H,(B)=14H,即積為1400H, (C)=0,(OV)=1,5除法指令 DIV AB;(A)(B)商在A中,余數(shù)在B中,功能:兩8位無(wú)符號(hào)數(shù)相除,被除數(shù)置

35、于累加器A中,除數(shù)置于寄存器B中。指令執(zhí)行后,商存于A中,余數(shù)存于B中。 說(shuō)明:該指令執(zhí)行后,C清0,若除數(shù)為0(即寄存器B內(nèi)數(shù)據(jù)為0),(OV)=1,表明除0沒(méi)有意義;若除數(shù)不為0,則(OV)=0。 例:(A)=0FBH,(B)=12H ,則 DIV AB 結(jié)果:(A)=0DH,(B)=11H,(C)=0,(OV)=0,例 編程實(shí)現(xiàn)下列運(yùn)算:FD1D2+D3/D4 ,其中D1、D2、D3、D4都為非0的8位二進(jìn)制無(wú)符號(hào)數(shù)。,解 MOV A,#D1 MOV B, #D2 MUL AB ;計(jì)算D1D2 MOV R2,A ;暫存D1D2的結(jié)果 MOV R3,B MOV A,#D3 MOV B,#D

36、4 DIV AB ;計(jì)算D3/D4 ADD A,R2 ;乘積的低位與商相加 MOV R2,A ;存F低位 MOV A,R3 ADDC A,#0 ;乘積的高位與低位和的進(jìn)位相加 MOV R3,A ;存F高位在R3中,例:試將A中的二進(jìn)制數(shù)轉(zhuǎn)換為3位BCD碼,其中,百位數(shù)存放于31H單元,十位數(shù)和個(gè)位數(shù)壓縮后存于30H單元中。,解: MOV B,#100 DIV AB MOV 31H,A MOV A,#10 XCH A,B DIV AB SWAP A ADD A,B MOV 30H,A,6加1指令 INC A;A (A) + 1 INC Rn;Rn (Rn) + 1 INC direct;(dir

37、ect) (direct)+ 1 INC Ri;(Ri)(Ri)+ 1 INC DPTR;DPTR (DPTR) + 1 功能:對(duì)A,Rn,內(nèi)部RAM單元及數(shù)據(jù)指針DPTR進(jìn)行加1操作,除INC A影響P外,不影響任何標(biāo)志位。 說(shuō)明:若原為0FFH,執(zhí)行該指令后,將變?yōu)?0H,但不影響進(jìn)位位C。 例如,(30H)=22H,執(zhí)行 INC 30H 后,(30H)=23H。,其結(jié)果為:(A)=00H,(R2)=10H,(R0)=40H,(40H)=01H,(DPTR)=1B00H,PSW中,(P)=0,C及其它位不變。,例(A)=0FFH, (R2)=0FH, (R0)=40H, (40H)=00H

38、, (DPTR)=1AFFH執(zhí)行下列指令: INC A INC R2 INC R0 INC DPTR,7減1指令 DEC A;A (A) - 1 DEC Rn;Rn (Rn) - 1 DEC direct;direct (direct)- 1 DEC Ri;(Ri)(Ri)- 1,功能:減1運(yùn)算 說(shuō)明:與INC命令類似,但無(wú)DPTR減1指令。 若原為00H,執(zhí)行該指令后,將變?yōu)?FFH 。 例如(A)=10H,(R5)=00H,(30H)=2FH,(R0)=40H,(40H)=0FFH。 則執(zhí)行以下指令: DEC A, DEC R5, DEC 30H, DEC R0 結(jié)果為:(A)0FH, (

39、R5)=0FFH, (30H)=2EH, (40H)=0FEH, (P)=0,例:設(shè)(R0)=7FH,在內(nèi)RAM中,(7EH)=00H, (7FH)=40H 執(zhí)行: DEC R0 DEC R0 DEC R0 結(jié)果為 :(R0)= 7EH,(7EH)=0FFH,(7FH)=3FH。,8十進(jìn)制調(diào)整指令 DA A ;,調(diào)整要完成的任務(wù)是:,(1)當(dāng)累加器A中的低4位數(shù)出現(xiàn)了非BCD碼(10101111)或低4位產(chǎn)生進(jìn)位(AC=1),則應(yīng)在低4位加6調(diào)整,以產(chǎn)生低4位正確的BCD結(jié)果。,(2)當(dāng)累加器A中的高4位數(shù)出現(xiàn)了非BCD碼(10101111)或高4位產(chǎn)生進(jìn)位(CY=1),則應(yīng)在高4位加6調(diào)整,

40、以產(chǎn)生高4位正確的BCD結(jié)果。 十進(jìn)制調(diào)整指令執(zhí)行后,PSW中的CY表示結(jié)果的百位值。,執(zhí)行過(guò)程中,CPU能根據(jù)加法運(yùn)算后,累加器中的值和PSW中的AC及C標(biāo)志位的狀況自動(dòng)選擇一個(gè)修正值(00H、06H、60H、66H)與原運(yùn)算結(jié)果相加,進(jìn)行二-十進(jìn)制調(diào)整。,例:設(shè)(A) = 56H 為56的壓縮的BCD碼數(shù),(R3)= 67H,(CY)=1 執(zhí)行 ADDC A,R3 DA A 結(jié)果為:123 注意:1)DA指令只能跟在加法指令后面使用; 2)調(diào)整前參與運(yùn)算的兩數(shù)是BCD碼數(shù); 3)DA指令不能與減法指令配對(duì)使用,但可以實(shí)現(xiàn)對(duì)A中 壓縮BCD數(shù)進(jìn)行減一操作。 例:設(shè)(A)=30H(壓縮BCD碼

41、數(shù)),執(zhí)行: ADD A,#99H DA A 后,便實(shí)現(xiàn)了30 1 = 29的操作。,例 若(A)0101 0110B,表示的BCD碼為56,(R3)0110 0111B,表示的BCD碼為67,(CY)0。執(zhí)行以下指令: ADD A,R2 DA A 由于(A)0010 0011B,即,且(CY)1,即,結(jié)果為BCD數(shù)123。 應(yīng)該注意,DA指令不能對(duì)減法進(jìn)行十進(jìn)制調(diào)整。,例 在20H、21H中分別存放壓縮BCD碼55和72,試將兩數(shù)相加,并計(jì)算出結(jié)果。,解MOV A,20H ADD A,21H DA A 結(jié)果 (A)=27, C=1 如果不使用DAA指令,則結(jié)果為0C7H,是錯(cuò)誤的。,例 設(shè)兩

42、個(gè)4位BCD碼分別存放在30H(十位、個(gè)位)和31H(百位、千位)、40H(十位、個(gè)位)和41H(百位、千位)。試編程求這兩個(gè)數(shù)的和,結(jié)果存放在30H、31H、32H中。,解程序如下: MOV R0,#30H MOV R1,#40H MOV A , R0 ;取十位、個(gè)位 ADD A , R1 ;兩數(shù)十位、個(gè)位相加 DA A ;調(diào)整為BCD碼 MOV R0,A ;存十位、個(gè)位 INC R0 INC R1 MOV A ,R0 ;取千位、百位 ADDC A , R1 ;兩數(shù)千位、百位和進(jìn)位位相加 DA A ;調(diào)整為BCD碼 MOV R0,A ;存千位、百位 MOV A,#0 ADDC A,#0 IN

43、C R0 MOV R0,A ;存萬(wàn)位,3.2.4 邏輯運(yùn)算及移位類指令,1“與”操作指令 2“或”操作指令 3“異或”操作指令 4清零與求反指令 5移位指令,1.邏輯與指令A(yù)NL,ANL A,Rn ;A (A)(Rn) ANL A,direct ;A (A)(direct) ANL A,Ri ;A (A)(Ri) ANL A,#data ;A (A)#data ANL direct,A ;direct (A)(direct) ANL direct,#data ;direct (direct)#data,說(shuō)明: 邏輯運(yùn)算是按位進(jìn)行的,對(duì)進(jìn)位標(biāo)志位C不產(chǎn)生影響。 該指令用于“屏蔽”某些位。,例:(

44、P1)= 35H,使其高4位輸出0,低4位不變。 解; ANL P1,#0FH,例 將R1中的低4位清0,高4位不變。 解 MOV A,#11110000B ANL A, R1 MOV R1,A,結(jié)果為:(A)=62H,例:設(shè)(A)=7AH, (20H )=0E6H,執(zhí)行指令 ANL A, 20H,2.邏輯或指令ORL,ORL A,Rn ;A (A)(Rn) ORL A,direct ;A (A) (direct) ORL A,Ri ;A (A) (Ri) ORL A,#data ;A (A) #data ORL direct, A ;direct (A) (direct) ORL direc

45、t, #data ;direct (direct) #data,例 將片外RAM 2000H單元的0、1位置1,2、3位清0,其它位不變。 解 MOV DPTR, # 2000H MOVX A,DPTR ORL A,#00000011B ANL A,#11110011B MOV DPTR,A,例:將A中的低3位送入P1中,并保持P1中高5位不變。 ANL A,#07H ANL P1,#0F8H ORL P1,A ;(P1)= P17P16P15P14P13A2A1A0 這稱為“數(shù)位組合”。,3.邏輯異或指令XRL,XRL A,Rn ;A (A) (Rn) XRL A,direct ;A (A)

46、 (direct) XRL A,Ri ;A (A) (Ri) XRL A,#data ;A (A) #data XRL direct,A, ;direct (direct) (A) XRL direct,#data ;direct (direct) #data,說(shuō)明: 若與0進(jìn)行異或運(yùn)算,結(jié)果保持不變; 若與1進(jìn)行異或運(yùn)算,結(jié)果取反; 自身異或等效于清0。 例 XRL A, A 結(jié)果為:(A)0,例 將20H單元內(nèi)容1、3、5、7位保持不變,0、2、4、6位取反。,解XRL 20H, #01010101B 若 (20H)=11110110 則執(zhí)行指令:,結(jié)果為(20H)=10100011B 這

47、稱為“指定位取反”。,注意: 在上述ANL、ORL、XRL操作中,用于端口操作時(shí),無(wú)論P(yáng)0 P3是第一,還是第二操作數(shù),都遵循“讀修改寫”端口鎖存器的操作方式。,4.累加器清0指令 CLR,CLR A,CPL A,累加器取反指令 CPL,例如(A)0E6H執(zhí)行CPL A ,結(jié)果為:(A)=19H 說(shuō)明: 1)取反即為邏輯非運(yùn)算。 2)MCS-51單片機(jī)沒(méi)有求補(bǔ)指令,若對(duì)累加器A中數(shù)求補(bǔ),則程序如下: CPL A INC A,5. 移位指令,循環(huán)左移 RL A ;An+1An, A0 A7 循環(huán)右移 RR A ;An An+1,A7 A0 帶進(jìn)位循環(huán)左移 RLC A ;An+1 An ,A0 C

48、,C A7 帶進(jìn)位循環(huán)右移 RRC A ;An An+1,A7 C,C A0,RL A RR A RLC A RRC A,后兩條指令,影響P標(biāo)志和CY。,例 分析下列程序段實(shí)現(xiàn)的功能: MOV A, direct RL A MOV R1,A RL A RL A ADD A,R1 MOV direct,A,解各指令實(shí)現(xiàn)的功能依次如程序右邊注譯,可知該程序?qū)崿F(xiàn)的功能是將存貯單元的數(shù)乘以10。,;取數(shù)設(shè)為D0 ;D02 ;(R1)2D0 ;2D02 ;4D02 ;8D0+2D0 ;存數(shù)10D0,例 將20H單元存放的無(wú)符號(hào)數(shù)除2。 解 ADD A,#0 ;C清零 MOV A,20H RRC A MO

49、V 20H,A,3.2.5 控制轉(zhuǎn)移類指令,程序的順序執(zhí)行是由PC自動(dòng)加1實(shí)現(xiàn)的,要改變程序的執(zhí)行順序,實(shí)現(xiàn)分支轉(zhuǎn)向,必須通過(guò)強(qiáng)迫改變PC值的方法來(lái)實(shí)現(xiàn),這就是控制轉(zhuǎn)移類指令的基本功能。控制轉(zhuǎn)移類指令可以控制程序根據(jù)不同情況執(zhí)行不同的程序段,令單片機(jī)應(yīng)用系統(tǒng)做出相應(yīng)的動(dòng)作??刂妻D(zhuǎn)移類指令使單片機(jī)具有“智能化”功能。 控制類指令的掌握使用較復(fù)雜,包括無(wú)條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令及子程序調(diào)用與返回指令。,1無(wú)條件轉(zhuǎn)移指令,長(zhǎng)轉(zhuǎn)移指令LJMP LJMP addr16 ;PC addr16 功能:指令執(zhí)行后將16位地址(addr16)傳送給PC,從而實(shí)現(xiàn)程序轉(zhuǎn)移到新的地址開始運(yùn)行。 說(shuō)明:該指令可實(shí)現(xiàn)

50、64KB范圍的任意轉(zhuǎn)移。,SJMP rel ;PC (PC)+2+rel 功能:執(zhí)行指令后,程序從當(dāng)前位置向前或向后跳轉(zhuǎn)rel個(gè)單元運(yùn)行。 說(shuō)明:該指令中尋址方式為相對(duì)尋址。 rel為8位帶符號(hào)補(bǔ)碼數(shù),因此所能實(shí)現(xiàn)的程序轉(zhuǎn)移是雙向的,若rel為正數(shù),則向前轉(zhuǎn)移,若rel為負(fù)數(shù)向后轉(zhuǎn)移。轉(zhuǎn)移相對(duì)范圍圖是-128127H共256個(gè)單元; 注譯中的“PC(PC)+2+rel”是這樣得來(lái)的:注譯中 “(PC)”是該指令執(zhí)行前的值,前面的“PC”是指指令執(zhí)行后的值。因“SJMP rel”指令存放在ROM中占用2個(gè)字節(jié)單元(為雙字節(jié)指令),故程序從指令執(zhí)行后“當(dāng)前位置”向前或向后跳轉(zhuǎn)rel個(gè)單元,也就是從

51、指令執(zhí)行前的位置向前或向后跳轉(zhuǎn)2rel個(gè)單元。,短轉(zhuǎn)移指令SJMP,AJMP addr11 ;PC (PC)+2,PC100 addr11 功能: addr11的11位數(shù)取代該指令執(zhí)行后程序指針PC的低11位PC100,程序根據(jù)PC值轉(zhuǎn)移運(yùn)行。 說(shuō)明: addr11為11位無(wú)符號(hào)數(shù),程序轉(zhuǎn)移最大范圍為2KB。,絕對(duì)轉(zhuǎn)移指令A(yù)JMP,跳轉(zhuǎn)的范圍不同。,短轉(zhuǎn)移類指令:AJMP addr11 長(zhǎng)轉(zhuǎn)移類指令:LJMP addr16 相對(duì)轉(zhuǎn)移指令:SJMP rel,轉(zhuǎn)移范圍: 2KB 64KB -128+127,指令構(gòu)成不同。 AJMP、LJMP后跟的是絕對(duì)地址, 而SJMP后跟的是相對(duì)地址。,指令長(zhǎng)度

52、不同 原則上,所有用SJMP或AJMP的地方都可以用LJMP來(lái)替代。,以上三條指令,均可理解成:PC值改變,即跳轉(zhuǎn)到一個(gè)標(biāo)號(hào)處。 那么他們的區(qū)別何在呢?,JMP A+DPTR ;PC (A)+(DPTR) 功能: 由A及DPTR的內(nèi)容決定程序轉(zhuǎn)移的目的地址。 說(shuō)明: DPTR為基址寄存器,A為變址寄存器,為基址加變址尋址方式。 把DPTR值固定,賦與A不同的值,則可實(shí)現(xiàn)程序的多分支轉(zhuǎn)移。,變址尋址轉(zhuǎn)移指令JMP,這條指令的用途也是跳轉(zhuǎn),轉(zhuǎn)到什么地方去呢?這可不能由標(biāo)號(hào)簡(jiǎn)單地決定了。 轉(zhuǎn)移地址由A+DPTR形成,并直接送入PC。 指令對(duì)A、DPTR和標(biāo)志位均無(wú)影響。 本指令可代替眾多的判別跳轉(zhuǎn)指

53、令,又稱為散轉(zhuǎn)指令,多用于多分支程序結(jié)構(gòu)中。,這條指令與前三條指令相比有所不同,例: MOV DPTR,#TAB ;將TAB代表的地址送入DPTR JMP A+DPTR ;跳轉(zhuǎn) TAB: AJMP ROUT0 ;跳轉(zhuǎn)ROUT0開始的程序段 TAB+2: AJMP ROUT1 ;跳轉(zhuǎn)ROUT1開始的程序段 TAB+4: AJMP ROUT2 ;跳轉(zhuǎn)ROUT2開始的程序段 TAB+6: AJMP ROUT3 ;跳轉(zhuǎn)ROUT3開始的程序段 . ROUT0: . ROUT1: . ROUT2: . ROUT3:,執(zhí)行該段程序后,程序?qū)⒏鶕?jù)A中的內(nèi)容轉(zhuǎn)移到不同的程序段去執(zhí)行-散轉(zhuǎn)。 A=0,轉(zhuǎn)ROUT0

54、 A=2,轉(zhuǎn)ROUT1 A=4,轉(zhuǎn)ROUT2 A=6,轉(zhuǎn)ROUT3,2條件轉(zhuǎn)移指令 所謂條件轉(zhuǎn)移就是程序的轉(zhuǎn)移是有條件的,當(dāng)指令中規(guī)定的條則滿足時(shí),程序轉(zhuǎn)移,否則程序不轉(zhuǎn)移,仍順序執(zhí)行。 l累加器判零轉(zhuǎn)移指令 l數(shù)值比較轉(zhuǎn)移指令 l減1條件轉(zhuǎn)移指令 l相對(duì)偏移量rel的求法,條件轉(zhuǎn)移類指令,JZ rel : 若(A)= 0 ,則轉(zhuǎn)移,否則順序執(zhí)行。 JNZ rel : 若(A) 0,則轉(zhuǎn)移,否則順序執(zhí)行。 轉(zhuǎn)移目的地址 = (PC)+ 2 + rel 不影響任何標(biāo)志位。,累加器判零轉(zhuǎn)移指令 JZ rel JNZ rel,例:將外RAM的一個(gè)數(shù)據(jù)塊(首地址為DATA1)傳送到內(nèi)部數(shù)據(jù)RAM(首地

55、址為DATA2),遇到傳送的數(shù)據(jù)為零時(shí)停止傳送,試編程。,解 MOV R0,#DATA2 ;賦首址 MOV DPTR,#DATA1 LOOP1:MOVX A,DPTR ;取數(shù) JZ LOOP2 ;判斷是否為0 MOV R0,A ;不為0存數(shù) INC R0 ;準(zhǔn)備取下一個(gè)數(shù) INC DPTR SJMP LOOP1 ;重復(fù)取數(shù)過(guò)程 LOOP2:RET ;為0結(jié)束,2、數(shù)值比較轉(zhuǎn)移指令 功能:比較二個(gè)字節(jié)中的值,若不等,則轉(zhuǎn)移。 CJNE A,#data,rel CJNE A,direct,rel CJNE Ri,#data,rel CJNE Rn,#data,rel,該類指令具有比較和判斷雙重功能

56、,比較的本質(zhì)是做減法運(yùn)算,用第一操作數(shù)內(nèi)容減去第二操作數(shù)內(nèi)容,但差值不回存。 轉(zhuǎn)移目的地址 = (PC)+ 3 + rel 若第一操作數(shù)內(nèi)容小于第二操作數(shù)內(nèi)容,則(C)= 1,否則(C)= 0。,說(shuō)明: 數(shù)據(jù)比較轉(zhuǎn)移指令都為三字節(jié)指令。 利用該類指令不但可以實(shí)現(xiàn)程序的轉(zhuǎn)移功能,也可以用以比較兩數(shù)值的大小。 指令執(zhí)行后進(jìn)位位C的狀態(tài)反映了被比較數(shù)與比較數(shù)相減有無(wú)借位。,該類指令可產(chǎn)生三分支程序: 即,相等分支;大于分支;小于分支。,例: 設(shè)P1口的P1.0 P1.3為準(zhǔn)備就緒信號(hào)輸入端,當(dāng)該四位為全1時(shí),說(shuō)明各項(xiàng)工作已準(zhǔn)備好,單片機(jī)可順序執(zhí)行,否則,循環(huán)等待。,解: MOV A,P1 ANL A,#0FH CJNE A,#0FH,WAIT ;P1.0 P1.3不為全1時(shí),返 ; 回WAIT MOV A,R2 ,解 MOV R0,#DATA LOOP1: CJNE R0,#64H,LOOP2 SJMP LOOP3 LOOP2: INC R0 SJMP LOOP1 LOOP3: MOV A,R0,例 找出片內(nèi)RAM的DATA為首址的數(shù)據(jù)塊中第一個(gè)等于100的數(shù),并將其地址存入A中。,3、減1條件轉(zhuǎn)移指令 DJNZ Rn,rel ;(二

溫馨提示

  • 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)論