單片機匯編指令.ppt_第1頁
單片機匯編指令.ppt_第2頁
單片機匯編指令.ppt_第3頁
單片機匯編指令.ppt_第4頁
單片機匯編指令.ppt_第5頁
已閱讀5頁,還剩92頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、2-1 匯編語言與指令系統(tǒng)簡介 2-2 數(shù)據(jù)傳送類指令 2-3 算術(shù)運算類指令 2-4 邏輯運算類指令 2-5 控制轉(zhuǎn)移類指令 2-6 位操作類指令 2-7 偽指令,第二章 MCS-51單片機指令系統(tǒng),項目引入,1.項目描述 利用P1口外接的8只LED發(fā)光二極管模擬彩燈 。 2.硬件電路與工作原理 讓學(xué)生根據(jù)任務(wù)分析硬件要求,畫出具體電路,并在實驗開發(fā)板上接線 3.程序設(shè)計(給出控制程序),8051,流水式彩燈控制程序框圖,控制程序 ORG 0000H LOOP: MOV P1,#55H ;將立即數(shù)55H送P1端口 LCALL TIME ;調(diào)延時子程序TIME MOV P1,#0AAH ;將立

2、即數(shù)AAH送P1端口 LCALL TIME ;調(diào)延時子程序TIME SJMP LOOP ;轉(zhuǎn)移到LOOP TIME: MOV R6,#200 ;延時子程序TIME TIME1:MOV R7,#200 TIME2:NOP NOP NOP DJNZ R7,TIME2 DJNZ R6,TIME1 RET END,2.1 匯編語言與指令系統(tǒng)簡介,一、匯編語言程序設(shè)計的意義 什么是程序? 完成某項特定任務(wù)的指令的集合。 計算機按程序一條一條地依次執(zhí)行指令,從而完成指定任務(wù)。 要讓計算機完成各項任務(wù),就應(yīng)設(shè)計各種程序。 程序設(shè)計語言:,匯編語言程序的每一條語句都與計算機的某一條指令對應(yīng),所以必需熟悉指令系

3、統(tǒng)。 指令 = 操作碼 + 操作數(shù) 操作碼表示了該指令所能執(zhí)行的操作功能。 操作數(shù)表示參加操作的數(shù)的本身或操作數(shù)所在的地址。 MCS-51指令格式: 標(biāo)號是程序員根據(jù)編程需要給指令設(shè)定的符號地址,可有可無;標(biāo)號由18個字符組成,第一個字符必須是英文字,不能是數(shù)字或其它符號;標(biāo)號后必須用冒號。,操作碼表示指令的操作種類,如MOV表示數(shù)據(jù)傳送操作,ADD表示加法操作等。 操作數(shù)或操作數(shù)地址表示參加運算的數(shù)據(jù)或數(shù)據(jù)的有效地址。操作數(shù)一般有以下幾種形式:沒有操作數(shù)項,操作數(shù)隱含在操作碼中,如RET指令;只有一個操作數(shù),如CPL A指令;有兩個操作數(shù),如MOV A,#00H指令,操作數(shù)之間以逗號相隔;有

4、三個操作數(shù),如CJNE A,#00H,NEXT指令,操作數(shù)之間也以逗號相隔。 注釋是對指令的解釋說明,用以提高程序的可讀性;注釋前必須加分號。,二、MCS-51系列單片機的指令系統(tǒng) 111條指令,共分五大類: 數(shù)據(jù)傳送類;(29條) 算術(shù)運算類;(24條) 邏輯運算類;(24條) 控制轉(zhuǎn)移類;(17條) 位操作類。(17條),指令中操作數(shù)的描述符號: Rn 工作寄存器R0 R7 Ri 間接尋址寄存器R0、R1 Direct 直接地址,包括內(nèi)部128B RAM單元地址、 26個SFR地址。 #data 8位常數(shù) #data 16 16位常數(shù) addr 16 16位目的地址 addr 11 11位

5、目的地址 rel 8位帶符號的偏移地址 DPTR 16位外部數(shù)據(jù)指針寄存器 bit 可直接位尋址的位,A 累加器 B 寄存器B C 進、借位標(biāo)志位,或位累加器 間接寄存器或基址寄存器的前綴 / 指定位求反 (x) x地址單元中的內(nèi)容 (x) x地址單元中的內(nèi)容為地址的單元中的內(nèi)容 當(dāng)前指令的地址,三、 尋 址 方 式 操作數(shù)是指令的重要組成部分,指出了參與操作的數(shù)據(jù)或數(shù)據(jù)的地址。尋找操作數(shù)地址的方式稱為尋址方式。一條指令采用什么樣的尋址方式,是由指令的功能決定的。尋址方式越多,指令功能就越強。 MCS-51指令系統(tǒng)共使用了7種尋址方式,包括寄存器尋址、直接尋址、立即數(shù)尋址、寄存器間接尋址、變址

6、尋址、相對尋址和位尋址。,1. 寄存器尋址 寄存器尋址是指將操作數(shù)存放于寄存器中,寄存器包括工作寄存器R0R7、累加器A、通用寄存器B、地址寄存器DPTR等。例如,指令MOV R1,A的操作是把累加器A中的數(shù)據(jù)傳送到寄存器R1中,其操作數(shù)存放在累加器A中,所以尋址方式為寄存器尋址。 如果程序狀態(tài)寄存器PSW的RS1:RS0=01(選中1組工作寄存器,對應(yīng)地址為08H0FH),設(shè)累加器A的內(nèi)容為20H,則執(zhí)行MOV R1,A指令后,內(nèi)部RAM 09H單元的值就變?yōu)?0H,如圖2.1所示。,采用寄存器尋址的指令如下: MOV P1,A;將累加器A的內(nèi)容送 到P1口 MOV P1,R4 ;將寄存器R

7、4的內(nèi)容送到P1口 CLR A;將累加器A清0 CPL A;將累加器A中的內(nèi)容取反 RL A;將累加器A的內(nèi)容循環(huán)左移,圖2.1 寄存器尋址示意圖,2. 直接尋址 直接尋址是指把存放操作數(shù)的內(nèi)存單元的地址直接寫在指令中。在MCS-51單片機中,可以直接尋址的存儲器主要有內(nèi)部RAM區(qū)和特殊功能寄存器SFR區(qū)。 例如,指令MOV A,3AH執(zhí)行的操作是將內(nèi)部RAM 中地址為3AH的單元內(nèi)容傳送到累加器A中,其操作數(shù)3AH就是存放數(shù)據(jù)的單元地址,因此該指令是直接尋址。 設(shè)內(nèi)部RAM 3AH單元的內(nèi)容是88H,那么指令MOV A,3AH的執(zhí)行過程如圖2.2所示。,圖2.2 直接尋址示意圖,采用直接尋址

8、的指令如下: MOV P1,20H ;將20H單元的內(nèi)容傳送到P1口,3. 立即數(shù)尋址 立即數(shù)尋址是指將操作數(shù)直接寫在指令中。 例如,指令MOV A,#3AH執(zhí)行的操作是將立即數(shù)3AH送到累加器A中,該指令就是立即數(shù)尋址。注意:立即數(shù)前面必須加“#”號,以區(qū)別立即數(shù)和直接地址。該指令的執(zhí)行過程如圖2.3所示。,圖2.3 立即數(shù)尋址示意圖,采用立即數(shù)尋址的指令如下: MOV20H,#55;將立即數(shù)55H送20H 單元 MOVA,#0F0H;將立即數(shù)0F0H送累加器A MOVR4,#0FH;將立即數(shù)0FH送寄存器R4中 MOVR0,#20H;將立即數(shù)20H送寄存器R0口,AND A,#0FH;累加

9、器A的內(nèi)容與立即數(shù)0FH進行 邏輯與操作 ORA,#0F0H;累加器A的內(nèi)容與立即數(shù)0F0H進行邏輯 或操作 MOV A,#01H ;將立即數(shù)01H送累加器A中 MOV A,#55H ;將立即數(shù)55H送累加器A中,4. 寄存器間接尋址 寄存器間接尋址是指將存放操作數(shù)的內(nèi)存單元的地址放在寄存器中,指令中只給出該寄存器。執(zhí)行指令時,首先根據(jù)寄存器的內(nèi)容,找到所需要的操作數(shù)地址,再由該地址找到操作數(shù)并完成相應(yīng)操作。 在MCS-51指令系統(tǒng)中,用于寄存器間接尋址的寄存器有R0、R1和DPTR,稱為寄存器間接尋址寄存器。 注意:間接尋址寄存器前面必須加上符號“”。例如,指令MOV A,R0執(zhí)行的操作是將

10、R0的內(nèi)容作為內(nèi)部RAM的地址,再將該地址單元中的內(nèi)容取出來送到累加器A中。,設(shè)R0=3AH,內(nèi)部RAM 3AH中的值是65H,則指令MOV A,R0的執(zhí)行結(jié)果是累加器A的值為65H,該指令的執(zhí)行過程如圖2.4所示。,圖2.4 寄存器間接尋址示意圖,5. 變址尋址 變址尋址是指將基址寄存器與變址寄存器的內(nèi)容相加,結(jié)果作為操作數(shù)的地址。DPTR或PC是基址寄存器,累加器A是變址寄存器。該類尋址方式主要用于查表操作。 例如,指令MOVC A,A+DPTR執(zhí)行的操作是將累加器A和基址寄存器DPTR的內(nèi)容相加,相加結(jié)果作為操作數(shù)存放的地址,再將操作數(shù)取出來送到累加器A中。 設(shè)累加器A=02H,DPTR

11、=0300H,外部ROM中,0302H單元的內(nèi)容是55H,則指令MOVC A,A+DPTR的執(zhí)行結(jié)果是累加器A的內(nèi)容為55H。該指令的執(zhí)行過程如圖2.5所示。,圖2.5 變址尋址示意圖,6. 相對尋址 相對尋址是指程序計數(shù)器PC的當(dāng)前內(nèi)容與指令中的操作數(shù)相加,其結(jié)果作為跳轉(zhuǎn)指令的轉(zhuǎn)移地址(也稱目的地址)。該類尋址方式主要用于跳轉(zhuǎn)指令。 例如,指令SJMP 54H執(zhí)行的操作是將PC當(dāng)前的內(nèi)容與54H相加,結(jié)果再送回PC中,成為下一條將要執(zhí)行指令的地址。 設(shè)指令SJMP 54H的機器碼80H,54H存放在2000H處,當(dāng)執(zhí)行到該指令時,先從2000H和2001H單元取出指令,PC自動變?yōu)?002H

12、;再把PC的內(nèi)容與操作數(shù)54H相加,形成目標(biāo)地址2056H,再送回PC,使得程序跳轉(zhuǎn)到2056H單元繼續(xù)執(zhí)行。該指令的執(zhí)行過程如圖2.6所示。,圖2.6 相對尋址示意圖,7. 位尋址 位尋址是指按位進行的尋址操作,而上述介紹的指令都是按字節(jié)進行的尋址操作。MCS-51單片機中,操作數(shù)不僅可以按字節(jié)為單位進行操作,也可以按位進行操作。當(dāng)我們把某一位作為操作數(shù)時,這個操作數(shù)的地址稱為位地址。 位尋址區(qū)包括專門安排在內(nèi)部RAM中的兩個區(qū)域:一是內(nèi)部RAM的位尋址區(qū),地址范圍是20H2FH,共16個RAM單元,位地址為00H7FH;二是特殊功能寄存器SFR中有11個寄存器可以位尋址,參見有關(guān)章節(jié)中位地

13、址定義。,例如,指令SETB 3DH執(zhí)行的操作是將內(nèi)部RAM位尋址區(qū)中的3DH位置1。 設(shè)內(nèi)部RAM 27H單元的內(nèi)容是00H,執(zhí)行SETB 3DH后,由于3DH對應(yīng)內(nèi)部RAM 27H的第5位,因此該位變?yōu)?,也就是27H單元的內(nèi)容變?yōu)?0H。該指令的執(zhí)行過程如圖2.7所示。,圖2.7 位尋址示意圖,2-2 數(shù)據(jù)傳送類指令,一、內(nèi)部RAM數(shù)據(jù)傳送類 1、一般數(shù)據(jù)傳送指令,數(shù)據(jù)傳送指令是MCS-51單片機匯編語言程序設(shè)計中使用最頻繁的指令,包括內(nèi)部 RAM、寄存器、外部RAM以及程序存儲器之間的數(shù)據(jù)傳送。 數(shù)據(jù)傳送操作是指把數(shù)據(jù)從源地址傳送到目的地址,源地址內(nèi)容不變。,1. 內(nèi)部8位數(shù)據(jù)傳送指令

14、(15條) 內(nèi)部8位數(shù)據(jù)傳送指令共15條,主要用于MCS-51單片機內(nèi)部RAM與寄存器之間的數(shù)據(jù)傳送。指令基本格式: MOV ,回憶前述操作數(shù)描述符: A,direct,Rn,Ri,#data,DPTR等。 經(jīng)排列組合可寫出下列指令:,MOV direct,Rn MOV direct,direct MOV direct,Ri MOV direct,#data MOV Ri,A (Ri) A MOV Ri, direct MOV Ri,#data MOV DPTR,#data16 ;唯一的16位數(shù)據(jù)傳送指令。 上述指令不影響任何標(biāo)志位,但PSW的P位除外。,(direct),A,MOV dire

15、ct,A ;,上述指令不影響任何標(biāo)志位,但PSW的P位除外。 注意: MOV Rn,Rn MOV Ri, Ri MOV Rn, Ri MOV #data, A 等等指令是非法指令。,哇!好容易出錯??!,例2.1 已知相應(yīng)單元的內(nèi)容如下,請指出每條指令執(zhí)行后相應(yīng)單元內(nèi)容的變化。,(1) MOV A,#20H (2) MOV A,40H (3) MOV A,R0 (4) MOV A,R0 解:(1) MOV A,#20H執(zhí)行后A=20H。 (2) MOV A,40H執(zhí)行后A=30H。 (3) MOV A,R0執(zhí)行后A=50H。 (4) MOV A,R0執(zhí)行后A=10H。,例2.2 已知相應(yīng)單元的內(nèi)

16、容如下,請指出下列指令執(zhí)行后各單元內(nèi)容相應(yīng)的變化。,(1) MOV A,R6 (2) MOV R6,70H (3) MOV 70H,50H (4) MOV 40H,R0 (5) MOV R1,#88H 解:(1) MOV A,R6執(zhí)行后A=30H。 (2) MOV R6,70H執(zhí)行后R6=40H。 (3) MOV 70H,50H執(zhí)行后(70H)=60H。 (4) MOV 40H,R0執(zhí)行后(40H)=60H。 (5) MOV R1,#88H執(zhí)行后(66H)=88H,二、 外部RAM數(shù)據(jù)傳送 MOVX A,Ri MOVX A, DPTR MOVX Ri, A MOVX DPTR,A 例:若DPT

17、R=3020H, 外部RAM (3020H)=48H,執(zhí)行指令 MOVX A,DPTR 后,A=?,注意: 外部RAM只能通過累加器A進行數(shù)據(jù)傳送。 累加器A與外部RAM之間傳送數(shù)據(jù)時只能間接尋址方式,間接尋址寄存器為DPTR,R0,R1。 以上傳送指令結(jié)果通常影響程序狀態(tài)字寄存器PSW的P標(biāo)志。,例2.3 把外部數(shù)據(jù)存儲器2040H單元中的數(shù)據(jù)傳送到外部數(shù)據(jù)存儲器2560H單元中去。 解: MOV DPTR,#2040H MOVX A,DPTR;先將2040H單元的內(nèi)容傳送到累加器A中 MOV DPTR,#2560H MOVX DPTR,A;再將累加器A中的內(nèi)容傳送到2560H單元中,三、字

18、節(jié)交換指令 XCH A,Rn ARn XCH A,direct A(direct) XCH A,Ri A(Ri) XCHD A,Ri 半字節(jié)交換,低4位交換,高4位不變 A30(Ri)30 SWAP A 半字節(jié)交換 不影響任何標(biāo)志位。,四、棧操作指令 PUSH direct POP direct 不影響任何標(biāo)志位。 PUSH direct 指令執(zhí)行中,機器自動進行兩步操作: (1) SP SP+ 1 (2 )(SP) (direct) 例2.4、設(shè)SP = 09H,(DPTR)= 0123H,分析: 執(zhí)行 PUSH DPL PUSH DPH 后,各單元中的內(nèi)容。,POP direct 指令執(zhí)行

19、中,機器也自動進行兩步操作: (1)(direct) (SP) (2)SP (SP) 1 例2.5、設(shè)SP= 0BH,(0BH)= 01H,(0AH)= 23H 執(zhí)行 POP DPH POP DPL 后,各單元中的內(nèi)容。,注意: 堆棧是用戶自己設(shè)定的內(nèi)部RAM中的一塊專用存儲區(qū),使用時一定先設(shè)堆棧指針,堆棧指針缺省為SP=07H。 堆棧遵循后進先出的原則安排數(shù)據(jù)。 堆棧操作必須是字節(jié)操作,且只能直接尋址。將累加器A入棧、出棧指令可以寫成:PUSH/POP ACC 或 PUSH/POP 0E0H 而不能寫成: PUSH/POP A 堆棧通常用于臨時保護數(shù)據(jù)及子程序調(diào)用時保護現(xiàn)場和恢復(fù)現(xiàn)場。 以上

20、指令結(jié)果不影響程序狀態(tài)字寄存器PSW標(biāo)志。,例2.6 設(shè)堆棧指針為30H,把累加器A和DPTR中的內(nèi)容壓入,然后根據(jù)需要再把它們彈出,編寫實現(xiàn)該功能的程序段。 解:MOV SP,#30H ;設(shè)置堆棧指針,SP=30H為棧底地址 PUSH ACC ;SP+1SP,SP=31H,ACC (SP) PUSH DPH ;SP+1SP,SP=32H,DPH (SP),PUSH DPL ;SP+1SP,SP=33H,DPL (SP) POP DPL ;(SP)DPL,SP-1,SP=32H POP DPH ;(SP)DPH,SP-1,SP=31H POP ACC ;(SP)ACC,SP-1,SP=30H,

21、例2.7:設(shè)(10H)01H,(20H)1AH。將內(nèi)部RAM的10H與20H兩單元的內(nèi)容交換。 解:PUSH 10H PUSH 20H POP 10H POP 20H,五、 查表指令 與ROM之間的數(shù)據(jù)傳送。 MOVC A,A + DPTR MOVC A, A + PC MOVC 含義是傳送常數(shù)。 以DPTR 為基地址的指令,可在ROM 的64KB范圍內(nèi)查表; 而以PC為基地址的指令只能在(PC)+ 1為中心上、下256B范圍內(nèi)查表。,2-3 算術(shù)運算類指令,包括:加、 減、乘、除;加一、減一。 一、加法指令 ADD A,Rn ;A A+ Rn以下類同。 ADD A,direct ADD A,

22、Ri ADD A,#data,ADDC A,Rn ;A A+Rn+C; 以下類同。 ADDC A,direct ADDC A,Ri ADDC A,#data 上述四條指令多用于多字節(jié)數(shù)相加。 INC A ;A A+1 ,以下類同。 INC Rn INC direct INC Ri INC DPTR,例2.8 分別指出指令I(lǐng)NC R0和INC R0的執(zhí)行結(jié)果。設(shè)R0=30H,(30H)=00H。 解: INC R0 ;R0+1=30H+1=31HR0,R0=31H INC R0 ;(R0)+1=(30H)+1(R0),(30H)=01H,R0中內(nèi)容不變,DA A ;二 十進制調(diào)整指令。 執(zhí)行過程

23、中,CPU能根據(jù)加法運算后,累加器中的值和PSW中的AC及C標(biāo)志位的狀況自動選擇一個修正值(00H、06H、60H、66H)與原運算結(jié)果相加,進行二十進制調(diào)整。,例2.9 設(shè)A = 56H 為56的壓縮的BCD碼數(shù),R3= 67H,CY=1 執(zhí)行 ADDC A,R3 DA A 結(jié)果為:124 注意: 1)DA指令只能跟在加法指令后面使用; 2)調(diào)整前參與運算的兩數(shù)是BCD碼數(shù); 3)DA指令不能與減法指令配對使用,但可以實現(xiàn)對A中壓縮BCD數(shù)進行減一操作。,二、減法指令 SUBB A,Rn ;A ARnC,以下類同。 SUBB A,direct SUBB A,Ri SUBB A,#data 注

24、意:減法之前先清零C。 DEC A ;A A1,以下類同。 DEC Rn DEC Ri DEC direct,例2.10 設(shè)R0=7FH,在內(nèi)RAM中,(7EH)=00H, (7FH)=40H 執(zhí)行: DEC R0 DEC R0 DEC R0 結(jié)果為 : (7FH)=3FH R0= 7EH,(7EH)=0FFH。,三、乘法和除法指令 乘法: MUL AB ;(A)(B),積的低8位在A中, 積的高8位在B中。 除法: DIV AB ;(A)(B),商在A中,余數(shù)在B中。 ; 若(B)= 0 ,則結(jié)果不定,(OV)= 1。,例2.11 設(shè)A=C2H, R1=AAH, CY=1,分析執(zhí)行指令 AD

25、DC A, R1 后的執(zhí)行結(jié)果。,2-4 邏輯運算類指令,共分兩大類:單字節(jié)邏輯操作,雙字節(jié)邏輯操作,共24條。 一、單字節(jié)邏輯操作指令 CLR A ; A 0 CPL A A中8位按位求反。 循環(huán)左移、右移指令: RL A RLC A RR A RRC A 注:左移一位相當(dāng)于乘2;右移一位相當(dāng)于除2。,二、雙字節(jié)邏輯操作指令 “與操作”: ANL A,Rn ; A ARn,以下類同。 ANL A,direct ANL A,Ri ANL A,#data ANL direct,A ANL direct,#data 例2.12、P1= 35H,使其高4位輸出0,低4位不變。 解: ANL P1,#

26、0FH 此做法稱為“屏蔽”位。,“或操作”: ORL A,Rn ; A ARn,以下類同。 ORL A,direct ORL A,Ri ORL A,#data ORL direct,A ORL direct,#data,例2.13、將A中的低3位送入P1中,并且保持P1中高5位不變。 ANL A,#07H ANL P1,#0F8H ORL P1,A ;(P1)= P7P6P5P4P3A2A1A0 這稱為“數(shù)位組合”。,“異或操作”: XRL A,Rn ; A ARn,以下類同。 XRL A,direct XRL A,Ri XRL A,#data XRL direct,A XRL direct,

27、#data 例2.14、設(shè)P1= 0B4H = 10110100B,執(zhí)行: XRL P1,#00110001B 結(jié)果按# 0 0 1 1 0 0 0 1 取反,即: P1= 1 0 0 0 0 1 0 1 B = 85H 這稱為“指定位取反”。,2-5 控制轉(zhuǎn)移類指令,作用:改變程序計數(shù)器PC的值,從而改變程序執(zhí)行方向。 分為四大類:無條件轉(zhuǎn)移指令;條件轉(zhuǎn)移指令;調(diào)用指令; 返回指令。,LJMP addr16 ;長跳轉(zhuǎn)指令 轉(zhuǎn)移目的地址 addr16 (PC),0000H FFFFH,64KB AJMP addr11 ;絕對轉(zhuǎn)移 轉(zhuǎn)移目的地址的形成:先(PC) (PC)+ 2; 然后 PC15

28、 11不變,PC10 0 addr10 0 64KB = 216 =25211 = 322KB 轉(zhuǎn)移目的地址與(PC)+ 2在同一個2KB范圍內(nèi)。,SJMP rel ;短轉(zhuǎn)移,相對尋址。 轉(zhuǎn)移目的地址 = (PC)+ 2 + rel, 所以 rel = 轉(zhuǎn)移目的地址(PC)2 但,實際使用中常寫成 SJMP addr16,匯編時會自動轉(zhuǎn) 換成rel。 JMP A + DPTR ;間接轉(zhuǎn)移,散轉(zhuǎn)移指令。 轉(zhuǎn)移目的地址 = A + DPTR 本指令不影響標(biāo)志位。常用于多分支程序結(jié)構(gòu)中,可在程序運行過程中動態(tài)地決定程序分支走向。,例2.15、執(zhí)行下列程序,解: MOV DPTR,#TABLE JMP

29、 A + DPTR TABLE: AJMP ROUT0 AJMP ROUT1 AJMP ROUT2 AJMP ROUT3 ,比較LJMP、AJMP、SJMP、JMP轉(zhuǎn)移的起點和范圍:,二、條件轉(zhuǎn)移指令 實現(xiàn)按照一定條件決定轉(zhuǎn)移的方向,分三類: 判零轉(zhuǎn)移指令 比較轉(zhuǎn)移指令 循環(huán)轉(zhuǎn)移指令,JZ rel : 若A= 0 ,則轉(zhuǎn)移,否則順序執(zhí)行。 JNZ rel : 若A 0,則轉(zhuǎn)移,否則順序執(zhí)行。 轉(zhuǎn)移目的地址 = PC+ 2 + rel 不影響任何標(biāo)志位。,1、判零轉(zhuǎn)移,例2.16、將外RAM的一個數(shù)據(jù)塊(首地址為DATA1)傳送到內(nèi)部數(shù)據(jù)RAM(首地址為DATA2),遇到傳送的數(shù)據(jù)為零時停止傳送

30、,試編程。,解: MOV R0,#DATA2 MOV DPTR,#DATA1 LOOP1: MOVX A,DPTR JZ LOOP2 MOV R0,A INC R0 INC DPTR SJMP LOOP1 LOOP2: SJMP LOOP2,2、比較轉(zhuǎn)移指令 功能:比較二個字節(jié)中的值,若不等,則轉(zhuǎn)移。 CJNE A,#data,rel; 若A#data, 則PCPC+3+rel,否則順序 執(zhí)行;若 A#data,則CY=1; 否則CY=0。 CJNE A,direct,rel CJNE Ri,#data,rel CJNE Rn,#data,rel 該類指令具有比較和判斷雙重功能。 轉(zhuǎn)移目的地址

31、 = PC+ 3 + rel 若第一操作數(shù)內(nèi)容小于第二操作數(shù)內(nèi)容, 則Cy= 1, 否則Cy= 0。,該類指令可產(chǎn)生三分支程序: 相等分支;大于分支;小于分支。,例2.17、設(shè)P1口的P1.0 P1.3為準(zhǔn)備就緒信號輸入端,當(dāng)該四位為全1時,說明各項工作已準(zhǔn)備好,單片機可順序執(zhí)行,否則,循環(huán)等待。 解: WAIT: MOV A,P1 ANL A,#0FH CJNE A,#0FH,WAIT ;P1.0 P1.3不為全1 時,返 回WAIT MOV R2,A,3、循環(huán)轉(zhuǎn)移指令 DJNZ Rn,rel ;RnRn-1,若Rn0,則PCPC+2+rel, 否 則順序執(zhí)行(二字節(jié)指令) DJNZ dir

32、ect,rel ;(direct)(direct)-1,若(direct) 0,則PCPC+3+rel,否則順序執(zhí)行(三 字節(jié)指令) 本指令也為雙功能指令,即減1操作和判斷轉(zhuǎn)移操作。 第一操作數(shù)內(nèi)容減1后,若差值不為零,則轉(zhuǎn)移;否則順序執(zhí)行。 轉(zhuǎn)移目的地址 = PC+ 2或3 + rel,例2.18、將8031內(nèi)部RAM的40H 4FH單元置初值#A0H #AFH。 解: MOV R0,#40H MOV R2,#10H MOV A,#0A0H LOOP: MOV R0,A INC R0 INC A DJNZ R2,LOOP ,LCALL addr16 ;長調(diào)用 ACALL addr11 ;絕對

33、調(diào)用 LCALL addr16 ;轉(zhuǎn)移范圍64KB,不影響標(biāo)志位。執(zhí)行中自動完成如下過程: PC PC + 3 SP SP+ 1 (SP) PC7 0, 保護斷點地址低字節(jié); SP SP+ 2 (SP) PC15 8,保存斷點地址高字節(jié); PC addr16 ,目的地址送PC,轉(zhuǎn)子程序。,三、調(diào)用指令,執(zhí)行結(jié)果:SP= 09H,(09H)= 21H,(08H)= 03H, PC= 3456H,例2.19、設(shè)SP= 07H,PC= 2100H,子程序首地址為3456H,執(zhí)行: LCALL 3456H MOV A,20H,ACALL addr11 : 轉(zhuǎn)移范圍與(PC)+ 2在同一個2KB內(nèi)。不影

34、響任何標(biāo)志位,執(zhí)行中機器自動完成下列過程: PC PC+ 2 SP SP+ 1 (SP) PC7 0 SP SP+ 2 (SP) PC15 8 PC10 0 addr10 0,三、返回指令 從子程序返回主程序。 RET ;調(diào)用子程序返回; RETI ;中斷子程序返回。 結(jié)論:RET返回地址事先已知,而RETI的返回地址在程序執(zhí)行中產(chǎn)生的,不固定。不影響標(biāo)志位,但PSW不能恢復(fù)到中斷前的狀態(tài)。 其機器自動操作過程如下: PC15 8 (SP) SP SP 1 PC7 0 (SP) SP SP 1,例2.20、設(shè)SP= 0BH,(0AH)= 23H,(0BH)= 01H 執(zhí)行: RET,空操作指令

35、 NOP ;空操作 不執(zhí)行任何操作,僅僅使(PC)+ 1,繼續(xù)執(zhí)行下條指令,不影響標(biāo)志位, 在ROM中占一個字節(jié)。用于延時調(diào)整。,2-6 位操作類指令,包括:位傳送指令、條件轉(zhuǎn)移指令、位運算指令。 位操作由單片機內(nèi)布爾處理器來完成。 位地址的三種表示: 1)使用直接位地址表示;如20H、30H、33H等; 2)使用位寄存器名來表示;如C、OV、F0等; 3)用字節(jié)寄存器名后加位數(shù)來表示; 如PSW.4、P0.5、ACC.3等;,一、位傳送指令 MOV C,bit MOV bit,C 功能:C (bit);或(bit) C,二、位狀態(tài)控制指令 CLR bit ;(bit) 0 SETB bit

36、;(bit) 1 CPL bit ;(bit) (/ bit) CLR C SETB C CPL C,例2.21:若C=1,P3=1100 0101B, P1=0011 0101B,執(zhí)行以下指令: MOV P1.3, C MOV C, P3.3 MOV P1.2, C,ANL C,bit ;C C(bit) ANL C,/ bit ;C C(/ bit),ORL C,bit ;C C(bit) ORL C,/bit ;C C(/bit),三、位邏輯操作指令,四、布爾條件轉(zhuǎn)移指令 有5條,分別對C和直接位地址進行測試, 并根據(jù)其狀態(tài)執(zhí)行轉(zhuǎn)移。 1、判布爾累加器轉(zhuǎn)移 JC rel ;C= 1,轉(zhuǎn)移,否則順序執(zhí)行。 JNC rel ;C= 0,轉(zhuǎn)移,否則順序執(zhí)行。 不影響標(biāo)志。轉(zhuǎn)移地址 :PC PC+ rel,解: MOV A,30H CJNE A,40H,LOOP1 SETB 7FH SJMP $ LOOP1: JC LOOP2 MOV 20H,A MOV 21H,40H SJMP $ LOOP2: MOV 20H,40H MOV 21H,A SJMP $,例2.22、比較內(nèi)部RAM的30H和40H單元中的二個無符號數(shù)的

溫馨提示

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

最新文檔

評論

0/150

提交評論