第3章第4章單片機(jī)原理與控制持技術(shù)第三版_第1頁
第3章第4章單片機(jī)原理與控制持技術(shù)第三版_第2頁
第3章第4章單片機(jī)原理與控制持技術(shù)第三版_第3頁
第3章第4章單片機(jī)原理與控制持技術(shù)第三版_第4頁
第3章第4章單片機(jī)原理與控制持技術(shù)第三版_第5頁
已閱讀5頁,還剩71頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第第3 3章章機(jī)械工業(yè)出版社同名教材機(jī)械工業(yè)出版社同名教材配套電子教案配套電子教案第第3版版第第3 3章章 80C5180C51系列單片機(jī)指令系統(tǒng)系列單片機(jī)指令系統(tǒng)3.1 指令系統(tǒng)基本概念指令系統(tǒng)基本概念標(biāo)號:操作碼標(biāo)號:操作碼 操作數(shù);注釋操作數(shù);注釋 3.1.1 指令基本格式指令基本格式 標(biāo)號:指令的符號地址標(biāo)號:指令的符號地址。 用于一段功能程序的識別標(biāo)記或控制用于一段功能程序的識別標(biāo)記或控制轉(zhuǎn)移地址。轉(zhuǎn)移地址。 指令前的標(biāo)號代表該指令的地址,是用指令前的標(biāo)號代表該指令的地址,是用符號表示的地址。符號表示的地址。 一般用英文字母和數(shù)字組成。一般用英文字母和數(shù)字組成。 標(biāo)號必須用冒號標(biāo)號必

2、須用冒號“ :”與操作碼分隔。與操作碼分隔。 操作碼:表示指令的操作功能操作碼:表示指令的操作功能。 操作碼用助記符表示,它代表了指令操作碼用助記符表示,它代表了指令的操作功能。的操作功能。 操作碼是指令的必需部分,是指令的操作碼是指令的必需部分,是指令的核心,不可缺少。核心,不可缺少。 操作數(shù):參加操作的數(shù)據(jù)或數(shù)據(jù)地址操作數(shù):參加操作的數(shù)據(jù)或數(shù)據(jù)地址。 操作數(shù)與操作碼之間用空格分隔,操作數(shù)與操作數(shù)與操作碼之間用空格分隔,操作數(shù)與操作數(shù)之間用逗號操作數(shù)之間用逗號“,”分隔。分隔。 操作數(shù)可以是數(shù)據(jù),也可以是數(shù)據(jù)的地址、操作數(shù)可以是數(shù)據(jù),也可以是數(shù)據(jù)的地址、數(shù)據(jù)地址的地址或操作數(shù)的其他信息。數(shù)據(jù)

3、地址的地址或操作數(shù)的其他信息。 操作數(shù)可分為目的操作數(shù)和源操作數(shù)。操作數(shù)可分為目的操作數(shù)和源操作數(shù)。 操作數(shù)可用二進(jìn)制數(shù)、十進(jìn)制數(shù)或十六進(jìn)制操作數(shù)可用二進(jìn)制數(shù)、十進(jìn)制數(shù)或十六進(jìn)制數(shù)表示。數(shù)表示。 操作數(shù)的個(gè)數(shù)可以是操作數(shù)的個(gè)數(shù)可以是0 03 3個(gè)。個(gè)。 注釋:指令功能說明注釋:指令功能說明。 注釋屬于非必需項(xiàng),是為便于閱讀,注釋屬于非必需項(xiàng),是為便于閱讀,對指令功能作的說明和注解。對指令功能作的說明和注解。 注釋必須以注釋必須以“;”開始。開始。3.1.2 指令系統(tǒng)中的常用符號指令系統(tǒng)中的常用符號 bitbit:位地址位地址。代表片內(nèi)代表片內(nèi)RAMRAM中的可尋址位中的可尋址位00H00H7F

4、H7FH及及SFRSFR中的可尋址位。中的可尋址位。 # #:立即數(shù)符立即數(shù)符。#data#data:8 8位立即數(shù);位立即數(shù);#data16#data16:1616位立即數(shù)。位立即數(shù)。 directdirect:8 8位直接地址位直接地址代表內(nèi)代表內(nèi)RAM 00HRAM 00H7FH7FH或或SFRSFR的的80H80HFFH FFH 。 :間接尋址符間接尋址符。如如RiRi,DPTRDPTR,A+PCA+PC,A+DPTRA+DPTR。 addr11addr11:1111位目的地址位目的地址。 addr16addr16:1616位目的地址位目的地址。 relrel:帶符號的帶符號的8 8位

5、偏移地址位偏移地址。用于轉(zhuǎn)移指令,其范圍是相對于下一條指令第用于轉(zhuǎn)移指令,其范圍是相對于下一條指令第1 1字節(jié)地址字節(jié)地址的的-128-128+127+127個(gè)字節(jié)。個(gè)字節(jié)。3.1.3 尋址方式尋址方式【例】【例】尋址就是尋找操作數(shù)的地址。尋址就是尋找操作數(shù)的地址。 立即尋址立即尋址 立即尋址是直接給出操作數(shù),操作數(shù)立即尋址是直接給出操作數(shù),操作數(shù)前有立即數(shù)符前有立即數(shù)符“ # ”。MOV A,#30H MOV A,#30H ; ;將立即數(shù)將立即數(shù)30H30H傳送至傳送至A A中中MOV DPTR,#5678H MOV DPTR,#5678H ; ;將立即數(shù)將立即數(shù)5678H5678H傳送至傳

6、送至DPTRDPTR 直接尋址直接尋址MOV A,3AHMOV A,3AH ;將內(nèi)將內(nèi)RAM 3AHRAM 3AH單元中的數(shù)據(jù)傳送至單元中的數(shù)據(jù)傳送至A A中中MOV A,P0MOV A,P0 ;將特殊功能寄存器將特殊功能寄存器P0P0口中的數(shù)據(jù)傳送至口中的數(shù)據(jù)傳送至A A中中說明:說明:3AH3AH和和P0P0是以是以directdirect形式出現(xiàn)的直接地址形式出現(xiàn)的直接地址 直接尋址是給出操作數(shù)的直接地址。直接尋址是給出操作數(shù)的直接地址。直接尋址范圍為內(nèi)直接尋址范圍為內(nèi)RAM 128BRAM 128B和特殊功能和特殊功能寄存器。寄存器。【例】【例】 寄存器尋址寄存器尋址MOV A,R0

7、MOV A,R0 ; ;將將R0R0中的數(shù)據(jù)傳送至中的數(shù)據(jù)傳送至A A中中 寄存器尋址的操作數(shù)在規(guī)定的寄存器中。寄存器尋址的操作數(shù)在規(guī)定的寄存器中。 規(guī)定的寄存器有規(guī)定的寄存器有: 工作寄存器工作寄存器R0R0R7R7 累加器累加器A A 雙字節(jié)雙字節(jié)ABAB 數(shù)據(jù)指針數(shù)據(jù)指針DPTRDPTR 位累加器位累加器CyCy 這些被尋址寄存器中的內(nèi)容就是操作數(shù)這些被尋址寄存器中的內(nèi)容就是操作數(shù)【例】【例】 寄存器間接尋址寄存器間接尋址MOV A,R0 MOV A,R0 ; ;將以將以R0R0中內(nèi)容為地址的存儲單元中的數(shù)據(jù)中內(nèi)容為地址的存儲單元中的數(shù)據(jù) 傳送至傳送至A A中中MOVX A,DPTRMO

8、VX A,DPTR; ;將外將外RAM DPTRRAM DPTR所指存儲單元中的數(shù)據(jù)所指存儲單元中的數(shù)據(jù) 傳送至傳送至A A中中 PUSH PSW PUSH PSW ; ;將將PSWPSW中數(shù)據(jù)中數(shù)據(jù) 傳送至堆棧指針傳送至堆棧指針SPSP所指的存儲單元中所指的存儲單元中 間接尋址是根據(jù)操作數(shù)地址的地址尋找間接尋址是根據(jù)操作數(shù)地址的地址尋找操作數(shù)。操作數(shù)。 間接尋址用間址符間接尋址用間址符“ ”作為前綴。作為前綴?!纠俊纠?變址尋址變址尋址MOVC A,A+DPTRMOVC A,A+DPTR 【例】【例】在變址尋址中,在變址尋址中,操作數(shù)操作數(shù)地址基址變址地址基址變址用于讀用于讀ROMROM

9、數(shù)據(jù)操作。數(shù)據(jù)操作。; ;將將A A的內(nèi)容與的內(nèi)容與DPTRDPTR內(nèi)容相加,內(nèi)容相加, 得到一個(gè)新地址,從該地址得到一個(gè)新地址,從該地址 ROMROM中讀取數(shù)據(jù)送入中讀取數(shù)據(jù)送入A A中。中。 相對尋址一般用于相對轉(zhuǎn)移指令,相對尋址一般用于相對轉(zhuǎn)移指令,轉(zhuǎn)移目的地址當(dāng)前轉(zhuǎn)移目的地址當(dāng)前PCPC值相對偏移量值相對偏移量relrel。;將位地址;將位地址07H(07H(字節(jié)地址字節(jié)地址20H20H中最中最 高位高位) )中的數(shù)據(jù)傳送至進(jìn)位位中的數(shù)據(jù)傳送至進(jìn)位位CyCy。 相對尋址相對尋址 位尋址位尋址 位尋址是對內(nèi)位尋址是對內(nèi)RAMRAM和特殊功能寄存器中的和特殊功能寄存器中的可尋址位進(jìn)行操作的

10、尋址方式??蓪ぶ肺贿M(jìn)行操作的尋址方式?!纠俊纠縈OV C,07HMOV C,07H3.2 指令系統(tǒng)指令系統(tǒng) MOV A,Rn MOV A,Rn ;RnA ,n=0;RnA ,n=07 7 MOV A,Ri MOV A,Ri ;(Ri)A,i=0;(Ri)A,i=0、1 1 MOV A,direct MOV A,direct ;(direct)A;(direct)A MOV A,#data MOV A,#data ;dataA;dataA 一、一、數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令 內(nèi)內(nèi)RAMRAM數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令 以以累加器累加器A A為目的字節(jié)的傳送指令為目的字節(jié)的傳送指令(4 4條條

11、) MOV Rn,A MOV Rn,A ;ARn,n=0;ARn,n=07 7 MOV Rn,direct MOV Rn,direct;(direct)Rn,n=0;(direct)Rn,n=07 7 MOV Rn,#data MOV Rn,#data ;dataRn,n=0;dataRn,n=07 7 以以工作寄存器工作寄存器RnRn為目的字節(jié)為目的字節(jié) 的傳送指令的傳送指令(3 3條條) 以以直接地址直接地址為目的字節(jié)的傳送指令為目的字節(jié)的傳送指令(5 5條條) MOV direct,A MOV direct,A ;A;A(directdirect) MOV direct,Rn MOV d

12、irect,Rn ;Rn;Rn(directdirect),n=0,n=07 7 MOV direct,Ri MOV direct,Ri ;(Ri);(Ri)(directdirect),i=0,i=0、1 1 MOV direct1,direct2 MOV direct1,direct2;(direct2);(direct2)(direct1direct1) MOV direct,#data MOV direct,#data;data;data(directdirect) 以以寄存器間址寄存器間址為目的字節(jié)的傳送指令為目的字節(jié)的傳送指令(3 3條條) MOV Ri,A MOV Ri,A ;A

13、(Ri),i=0;A(Ri),i=0、1 1 MOV Ri,direct MOV Ri,direct;(direct)(Ri),i=0;(direct)(Ri),i=0、1 1 MOV Ri,#data MOV Ri,#data ;data(Ri),i=0;data(Ri),i=0、1 1 1616位數(shù)據(jù)傳送指令位數(shù)據(jù)傳送指令(唯一唯一)MOV DPTR,#data16 MOV DPTR,#data16 ;data16DPTR;data16DPTR【例】【例】MOV DPTR,#1234H MOV DPTR,#1234H ;DPTR=1234H;DPTR=1234H該指令也可以用兩條該指令也可

14、以用兩條8 8位數(shù)據(jù)傳送指令實(shí)現(xiàn):位數(shù)據(jù)傳送指令實(shí)現(xiàn):MOV DPH,#12H MOV DPH,#12H ;DPH=12H;DPH=12HMOV DPL,#34H MOV DPL,#34H ;DPL=34H,DPTR=1234H;DPL=34H,DPTR=1234H MOVX A,Ri MOVX A,Ri ;(Ri)A,i=0;(Ri)A,i=0、1 1 MOVX A,DPTR MOVX A,DPTR ;(DPTR)A;(DPTR)A MOVX Ri,A MOVX Ri,A ;A(Ri),i=0;A(Ri),i=0、1 1 MOVX DATR,A MOVX DATR,A ;A(DATR);A(

15、DATR) 外外RAMRAM傳送指令傳送指令(4 4條條) 讀讀ROMROM指令指令(2(2條條)內(nèi)內(nèi)RAMRAM( (包括特殊功能寄存器包括特殊功能寄存器): ): 用用MOVMOV指令傳送;指令傳送;外外RAM: RAM: 用用MOVXMOVX指令傳送;指令傳送;ROM: ROM: 用用MOVCMOVC指令傳送。指令傳送。 MOVC A,A+DPTR MOVC A,A+DPTR ;(A+DPTR)A;(A+DPTR)A MOVC A,A+PC MOVC A,A+PC ;PC+1PC,(A+PC)A;PC+1PC,(A+PC)A 綜上所述,三個(gè)不同的存儲空間用三種不同的指綜上所述,三個(gè)不同的

16、存儲空間用三種不同的指令傳送:令傳送: PUSH direct PUSH direct ;SP+1SP;SP+1SP,(direct)(SP)(direct)(SP) POP direct POP direct ;(SP)(direct);(SP)(direct),SP-1SPSP-1SP 堆棧操作指令堆棧操作指令(2條條) PUSHPUSH為入棧指令為入棧指令例例PUSH 30HPUSH 30H;(;(30H30H)=2BH=2BH,具體操作是:具體操作是: 先將堆棧指針先將堆棧指針SPSP的內(nèi)容(的內(nèi)容(0FH0FH)加)加1 1,指向堆棧頂?shù)囊?,指向堆棧頂?shù)囊粋€(gè)空單元,此時(shí)個(gè)空單元,此時(shí)

17、SP=10HSP=10H; 然后將指令指定的直接尋址單元然后將指令指定的直接尋址單元30H30H中的數(shù)據(jù)(中的數(shù)據(jù)(2BH2BH)送到該空單元中。送到該空單元中。 POPPOP為出棧指令為出棧指令例例 POP 40H POP 40H ;(40H)=4CH(40H)=4CH,具體操作是:,具體操作是: 先將先將SPSP所指單元所指單元0FH0FH(棧頂?shù)刂罚┲械臄?shù)據(jù)(棧頂?shù)刂罚┲械臄?shù)據(jù)(4CH4CH)彈出,送到指定的內(nèi)彈出,送到指定的內(nèi)RAMRAM單元單元40H40H,(,(40H40H)=4CH=4CH; 然后然后SP-1SPSP-1SP,SP=0EHSP=0EH,SPSP仍指向棧頂?shù)刂?。仍?/p>

18、向棧頂?shù)刂贰?交換指令交換指令(5條)條) XCH A,Rn XCH A,Rn ; ARn; ARn,n=0n=07 7 XCH A,Ri XCH A,Ri ; A(Ri); A(Ri),i=0i=0、1 1 XCH A,direct XCH A,direct ; A(direct); A(direct)SWAP A SWAP A ; A; A7 74 4AA3 30 0 字節(jié)交換指令字節(jié)交換指令 半字節(jié)交換指令半字節(jié)交換指令XCHD A,Ri XCHD A,Ri ; A; A3 30 0(Ri)(Ri)3 30 0 高高4 4位不變。位不變。i=0i=0、1 1 累加器高低四位互換累加器高低

19、四位互換 ADD A,Rn ADD A,Rn ;A+RnA(n=0;A+RnA(n=07)7) 有進(jìn)位有進(jìn)位,Cy=1;,Cy=1;無進(jìn)位無進(jìn)位,Cy=0,Cy=0 ADD A,Ri ADD A,Ri ;A+(Ri)A(i=0;A+(Ri)A(i=0、1)1) 有進(jìn)位有進(jìn)位,Cy=1;,Cy=1;無進(jìn)位無進(jìn)位,Cy=0,Cy=0 ADD A,direct ADD A,direct ;A+(direct)A;A+(direct)A 有進(jìn)位有進(jìn)位,Cy=1;,Cy=1;無進(jìn)位無進(jìn)位,Cy=0,Cy=0 ADD A,#data ADD A,#data ;A+dataA;A+dataA 有進(jìn)位有進(jìn)位,

20、Cy=1;,Cy=1;無進(jìn)位無進(jìn)位,Cy=0,Cy=0 二、二、算術(shù)運(yùn)算類指令算術(shù)運(yùn)算類指令 加法指令加法指令 不帶不帶CyCy加法指令加法指令(4 4條)條) 帶帶CyCy加法指令加法指令(4 4條)條) ADDC A,Rn ; ADDC A,Rn ;A+Rn+CyA(n=0A+Rn+CyA(n=07)7) 有進(jìn)位有進(jìn)位,Cy=1;,Cy=1;無進(jìn)位無進(jìn)位,Cy=0,Cy=0 ADDC A,Ri ; ADDC A,Ri ;A+(Ri)+CyA(i=0A+(Ri)+CyA(i=0、1)1) 有進(jìn)位有進(jìn)位,Cy=1;,Cy=1;無進(jìn)位無進(jìn)位,Cy=0,Cy=0 ADDC A,direct ; A

21、DDC A,direct ;A+(direct)+CyAA+(direct)+CyA 有進(jìn)位有進(jìn)位,Cy=1;,Cy=1;無進(jìn)位無進(jìn)位,Cy=0,Cy=0 ADDC A,#data ; ADDC A,#data ;A+data+CyAA+data+CyA 有進(jìn)位有進(jìn)位,Cy=1;,Cy=1;無進(jìn)位無進(jìn)位,Cy=0 ,Cy=0 減法指令減法指令(4 4條)條) SUBB A,Rn SUBB A,Rn ; A-Rn-CyA; A-Rn-CyA,(n=0(n=07),7), 有借位有借位,Cy=1;,Cy=1;無借位無借位,Cy=0,Cy=0 SUBB A,Ri SUBB A,Ri ; A-(Ri)

22、-CyA; A-(Ri)-CyA,(n=0(n=01), 1), 有借位有借位,Cy=1;,Cy=1;無借位無借位,Cy=0,Cy=0 SUBB A,direct SUBB A,direct; A-direct-CyA, ; A-direct-CyA, 有借位有借位,Cy=1;,Cy=1;無借位無借位,Cy=0,Cy=0 SUBB A,#data SUBB A,#data ; A-data-CyA, ; A-data-CyA, 有借位有借位,Cy=1;,Cy=1;無借位無借位,Cy=0,Cy=0 INC A INC A;A+1A;A+1A INC Rn INC Rn ;Rn+1Rn,n=0;R

23、n+1Rn,n=07 7 INC Ri INC Ri;(Ri)+1(Ri), i=0;(Ri)+1(Ri), i=0、1 1 INC direct INC direct;(direct)+1(direct);(direct)+1(direct) INC DPTR INC DPTR;DPTR+1DPTR;DPTR+1DPTR 加加1減減1指令指令 加加1指令指令(5 5條)條) 減減1 1指令指令(4 4條)條) DECDEC A A ; ;A-1AA-1A DECDEC Rn Rn ; ;Rn-1Rn, n=0Rn-1Rn, n=07 7 DECDEC Ri Ri ;(Ri)-1(Ri), i

24、=0;(Ri)-1(Ri), i=0、1 1 DECDEC directdirect ;(;(direct)-1(direct)direct)-1(direct) 加加1 1減減1 1指令涉及指令涉及 A A時(shí),會影響時(shí),會影響P P,但不影響,但不影響其他標(biāo)志位。其他標(biāo)志位。 DIV AB DIV AB ;(A;(AB)B)商商A,A,余數(shù)余數(shù)BB Cy=0 Cy=0,OV=0OV=0 BCDBCD碼調(diào)整指令碼調(diào)整指令DA ADA A功能:對加法運(yùn)算結(jié)果進(jìn)行功能:對加法運(yùn)算結(jié)果進(jìn)行BCDBCD碼調(diào)整。碼調(diào)整。 乘除法指令乘除法指令 乘法指令乘法指令(1 1條)條)MUL AB MUL AB

25、; A; ABBABBA 除法指令除法指令(1 1條)條)三、三、邏輯運(yùn)算及移位指令邏輯運(yùn)算及移位指令 ANL A,Rn ANL A,Rn ;ARnA;ARnA ANL A,Ri ANL A,Ri ;A(Ri)A;A(Ri)A ANL A,#data ANL A,#data ;AdataA;AdataA ANL A,direct ANL A,direct ;A(direct)A;A(direct)A ANL direct,A ANL direct,A ;(direct)Adirect;(direct)Adirect ANL direct,#data ANL direct,#data;(dire

26、ct)datadirect;(direct)datadirect 邏輯邏輯“與與”運(yùn)算指令運(yùn)算指令(6 6條)條) 邏輯邏輯“或或”運(yùn)算指令運(yùn)算指令(6 6條)條) ORLORL A,RnA,Rn ;A;ARnARnA ORL ORL A A,Ri ,Ri ;A;A( (Ri)Ri)AA ORL ORL A A,#data ,#data ;A;AdataAdataA ORL ORL A,direct A,direct ;A;A( (direct)direct)AA ORL direct,A ORL direct,A ;(direct);(direct)AdirectAdirect ORL di

27、rect,#data ORL direct,#data;(direct);(direct)datadatadirectdirect 邏輯邏輯“異或異或”運(yùn)算指令運(yùn)算指令(6 6條)條) XRLXRL A,RnA,Rn ;A;A RnARnA XRL XRL A A,Ri ,Ri ;A;A ( (Ri)Ri)AA XRL XRL A A,#data ,#data ;A;A dataAdataA XRL XRL A,direct A,direct ;A;A ( (direct)direct)AA XRL direct,A XRL direct,A ;(direct);(direct) Adirec

28、tAdirect XRL direct,#data XRL direct,#data;(direct);(direct) datadatadirectdirect CLR A CLR A;0A;0A CPL A CPL A;AA;AA 清零和取反指令清零和取反指令 循環(huán)移位指令循環(huán)移位指令(4 4條)條) 循環(huán)左移循環(huán)左移:RL ARL A 帶帶CyCy循環(huán)左移循環(huán)左移:RLC ARLC A 循環(huán)右移循環(huán)右移:RR ARR A 帶帶CyCy循環(huán)右移循環(huán)右移:RRC ARRC A MOV C,bit MOV C,bit ;(bit)Cy;(bit)Cy MOV bit,C MOV bit,C ;

29、Cybit;Cybit四、四、位操作類指令位操作類指令 位傳送指令位傳送指令(2 2條)條) 位取反指令位取反指令: CPL CCPL C;CC;CC CPL bit CPL bit;(bit)bit;(bit)bit 位修正指令位修正指令(6 6條)條) 位清位清0 0指令指令: : CLR C CLR C;0C;0C CLR bit CLR bit;0bit;0bit 位置位置1 1指令指令: SETB CSETB C;1C;1C SETB bit SETB bit;1bit;1bit 位邏輯位邏輯“與與”運(yùn)算指令運(yùn)算指令: : ANL C,bitANL C,bit;C(bit)C;C(b

30、it)C ANL C, ANL C,/bit/bit;C(bit)C;C(bit)C 位邏輯位邏輯“或或”運(yùn)算指令運(yùn)算指令: : ORL C,bitORL C,bit;C(bit)C;C(bit)C ORL C ORL C,/bit,/bit;C(;C(bit)C bit)C 位邏輯運(yùn)算指令位邏輯運(yùn)算指令(4 4條)條) 相對轉(zhuǎn)移指令相對轉(zhuǎn)移指令 SJMP rel SJMP rel ;PC+2PC,PC+relPC;PC+2PC,PC+relPC五、五、控制轉(zhuǎn)移類指令控制轉(zhuǎn)移類指令 無條件轉(zhuǎn)移指令無條件轉(zhuǎn)移指令(3 3條)條) 長轉(zhuǎn)移指令長轉(zhuǎn)移指令 LJMP addr16 LJMP addr1

31、6 ; addr; addr15150 0PCPC, 短轉(zhuǎn)移指令短轉(zhuǎn)移指令 AJMP addr11AJMP addr11; PC+2PC; PC+2PC, addraddr10100 0PCPC10100 0, PCPC15151111不變不變 間接轉(zhuǎn)移指令間接轉(zhuǎn)移指令(散轉(zhuǎn)指令)(散轉(zhuǎn)指令) JMP A+DPTRJMP A+DPTR;A+DPTRPC;A+DPTRPCLJMPLJMP、AJMPAJMP、SJMPSJMP三條無條件轉(zhuǎn)移指令的三條無條件轉(zhuǎn)移指令的區(qū)別區(qū)別: 轉(zhuǎn)移范圍不一樣。轉(zhuǎn)移范圍不一樣。 LJMPLJMP轉(zhuǎn)移范圍是轉(zhuǎn)移范圍是64KB64KB; AJMPAJMP轉(zhuǎn)移范圍是與當(dāng)前轉(zhuǎn)

32、移范圍是與當(dāng)前PCPC值同一值同一2KB2KB; SJMPSJMP轉(zhuǎn)移范圍是當(dāng)前轉(zhuǎn)移范圍是當(dāng)前PC-128BPC-128B+127B+127B。 使用使用AJMPAJMP和和SJMPSJMP指令應(yīng)注意轉(zhuǎn)移目標(biāo)地址指令應(yīng)注意轉(zhuǎn)移目標(biāo)地址是否在轉(zhuǎn)移范圍內(nèi),若超出范圍,程序?qū)⒊鲥e(cuò)。是否在轉(zhuǎn)移范圍內(nèi),若超出范圍,程序?qū)⒊鲥e(cuò)。 指令字節(jié)不一樣。指令字節(jié)不一樣。 LJMPLJMP是是3 3字節(jié)指令;字節(jié)指令; AJMPAJMP、SJMPSJMP是是2 2字節(jié)指字節(jié)指令。令。 條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令(1313條)條) 條件轉(zhuǎn)移指令根據(jù)判斷條件可分為:條件轉(zhuǎn)移指令根據(jù)判斷條件可分為: 判判C C轉(zhuǎn)移轉(zhuǎn)移 判

33、判bitbit轉(zhuǎn)移轉(zhuǎn)移 判判A A轉(zhuǎn)移轉(zhuǎn)移 減減1 1非非0 0轉(zhuǎn)移轉(zhuǎn)移 比較轉(zhuǎn)移指令比較轉(zhuǎn)移指令 滿足條件,則轉(zhuǎn)移;滿足條件,則轉(zhuǎn)移; 不滿足條件,則程序順序執(zhí)行。不滿足條件,則程序順序執(zhí)行。 C=0 C=0轉(zhuǎn)移指令:轉(zhuǎn)移指令: JNC relJNC rel ; PC+2PC,; PC+2PC, 若若Cy=0Cy=0,則,則PC+relPCPC+relPC,轉(zhuǎn)移,轉(zhuǎn)移 若若Cy=1Cy=1,則程序順序執(zhí)行。,則程序順序執(zhí)行。 判判C C轉(zhuǎn)移指令轉(zhuǎn)移指令(2 2條條) C=1C=1轉(zhuǎn)移指令轉(zhuǎn)移指令: JC relJC rel ; PC+2PC,; PC+2PC, 若若Cy=1Cy=1,則,則P

34、C+relPCPC+relPC,轉(zhuǎn)移,轉(zhuǎn)移 若若Cy=0Cy=0,則程序順序執(zhí)行。,則程序順序執(zhí)行。(bitbit)=1=1轉(zhuǎn)移并清轉(zhuǎn)移并清0 0指令指令: JBC bit,rel JBC bit,rel ; PC+3PC; PC+3PC, ; ;若若(bit)=1,(bit)=1,則則PC+relPC,PC+relPC,轉(zhuǎn)移轉(zhuǎn)移, ,且且0(bit)0(bit) ; ;若若(bit)=0,(bit)=0,則程序順序執(zhí)行則程序順序執(zhí)行 判判bitbit轉(zhuǎn)移指令轉(zhuǎn)移指令(3 3條)條)(bitbit)=1=1轉(zhuǎn)移指令轉(zhuǎn)移指令: JB bit,rel JB bit,rel ; PC+3PC,; P

35、C+3PC, 若若(bit)=1,(bit)=1,則則PC+relPC,PC+relPC,轉(zhuǎn)移轉(zhuǎn)移 若若(bit)=0,(bit)=0,則程序順序執(zhí)行則程序順序執(zhí)行(bitbit)=0=0轉(zhuǎn)移指令轉(zhuǎn)移指令: JNB bit,rel JNB bit,rel ; PC+3PC,; PC+3PC, 若若(bit)=0,(bit)=0,則則PC+relPC,PC+relPC,轉(zhuǎn)移轉(zhuǎn)移 若若(bit)=1,(bit)=1,則程序順序執(zhí)行則程序順序執(zhí)行 A=0A=0轉(zhuǎn)移指令轉(zhuǎn)移指令: JZ rel JZ rel ; PC+2PC,; PC+2PC, 若若A=0,A=0,則則PC+relPC,PC+relP

36、C,轉(zhuǎn)移轉(zhuǎn)移 若若A A 0,0,則程序順序執(zhí)行則程序順序執(zhí)行 判判A A轉(zhuǎn)移指令轉(zhuǎn)移指令(2 2條)條) A A 0 0轉(zhuǎn)移指令轉(zhuǎn)移指令: JNZ rel JNZ rel ; PC+2PC,; PC+2PC, 若若A A 0,0,則則PC+relPC,PC+relPC,轉(zhuǎn)移轉(zhuǎn)移 若若A=0,A=0,則程序順序執(zhí)行則程序順序執(zhí)行 減減1 1非非0 0轉(zhuǎn)移指令轉(zhuǎn)移指令(2 2條)條) DJNZ DJNZ directdirect,rel,rel;PC+3PC,(direct)-1direct;PC+3PC,(direct)-1direct 若若(direct)=0,(direct)=0,則程序順

37、序執(zhí)行則程序順序執(zhí)行 若若(direct)(direct) 0,0,則則PC+relPC,PC+relPC,轉(zhuǎn)移轉(zhuǎn)移 DJNZ DJNZ RnRn,rel ,rel ;PC+2PC,Rn-1Rn,;PC+2PC,Rn-1Rn, 若若Rn=0,Rn=0,則程序順序執(zhí)行則程序順序執(zhí)行 若若RnRn 0,0,則則PC+relPC,PC+relPC,轉(zhuǎn)移轉(zhuǎn)移 比較轉(zhuǎn)移指令比較轉(zhuǎn)移指令(4 4條)條) CJNE CJNE A A, ,directdirect,rel,rel;PC+3PC,;PC+3PC, ; ;若若A A=(=(directdirect),),則程序順序執(zhí)行則程序順序執(zhí)行 ; ;若若A

38、 A( (directdirect),),則則PC+PC+relrelPC,PC,轉(zhuǎn)移轉(zhuǎn)移 ; ;且若且若A A( (directdirect),Cy=0;),Cy=0;若若A A( (directdirect),Cy=1),Cy=1 CJNE CJNE A A, ,#data#data,rel ,rel ;PC+3PC,;PC+3PC, ; ;若若A A= =datadata, ,則程序順序執(zhí)行則程序順序執(zhí)行 ; ;若若A Adatadata, ,則則PC+PC+relrelPC,PC,轉(zhuǎn)移轉(zhuǎn)移 ; ;且若且若A Adatadata,Cy=0;,Cy=0;若若A Adatadata,Cy=1

39、,Cy=1 CJNE CJNE RnRn, ,#data#data,rel,rel;PC+3PC,;PC+3PC, ; ;若若RnRn= =datadata, ,則程序順序執(zhí)行則程序順序執(zhí)行 ; ;若若RnRndatadata, ,則則PC+PC+relrelPC,PC,轉(zhuǎn)移轉(zhuǎn)移 ; ;且若且若RnRndatadata,Cy=0;,Cy=0;若若RnRndatadata,Cy=1,Cy=1 CJNE CJNE RiRi, ,#data#data,rel,rel;PC+3PC,;PC+3PC, ; ;若若(Ri)(Ri)= =datadata, ,則程序順序執(zhí)行則程序順序執(zhí)行 ; ;若若(Ri)

40、(Ri)datadata, ,則則PC+PC+relrelPC,PC,轉(zhuǎn)移轉(zhuǎn)移 ; ;且若且若(Ri)(Ri)datadata,Cy=0;,Cy=0;若若(Ri)(Ri)datadata,Cy=1,Cy=1 產(chǎn)生當(dāng)前產(chǎn)生當(dāng)前PCPC:PC+3PCPC+3PC, ( PC+3( PC+3是因?yàn)樵撝噶顬槿止?jié)指令是因?yàn)樵撝噶顬槿止?jié)指令 ) ) 斷口地址低斷口地址低8 8位保存到堆棧中:位保存到堆棧中: SP+1SPSP+1SP,(PC)(PC)0 07 7(SP)(SP) 斷口地址高斷口地址高8 8位保存到堆棧中:位保存到堆棧中: SP+1SPSP+1SP,(PC)(PC)8 81515(SP)

41、(SP) 形成轉(zhuǎn)移目標(biāo)地址:形成轉(zhuǎn)移目標(biāo)地址:addr16PCaddr16PC 調(diào)用和返回指令調(diào)用和返回指令LCALL addr16 LCALL addr16 ; PC+3PC,SP+1SP,(PC); PC+3PC,SP+1SP,(PC)0 07 7(SP)(SP) ; SP+1SP,(PC) ; SP+1SP,(PC)8 81515(SP)(SP) ; addr16PC ; addr16PC 長調(diào)用指令長調(diào)用指令LCALLLCALL指令執(zhí)行步驟:指令執(zhí)行步驟: 產(chǎn)生當(dāng)前產(chǎn)生當(dāng)前PCPC:PC+2PCPC+2PC, ( PC+2( PC+2是因?yàn)樵撝噶顬殡p字節(jié)指令是因?yàn)樵撝噶顬殡p字節(jié)指令 )

42、 ) 斷口地址低斷口地址低8 8位保存到堆棧中:位保存到堆棧中: SP+1SPSP+1SP,(PC)(PC)0 07 7(SP)(SP) 斷口地址高斷口地址高8 8位保存到堆棧中:位保存到堆棧中: SP+1SPSP+1SP,(PC)(PC)8 81515(SP) (SP) 形成轉(zhuǎn)移目標(biāo)地址:形成轉(zhuǎn)移目標(biāo)地址:addr11PCaddr11PC0 01010,PC,PC11111515不變不變 短調(diào)用指令短調(diào)用指令A(yù)CALL addr11ACALL addr11; PC+2PC,SP+1SP,(PC); PC+2PC,SP+1SP,(PC)0 07 7(SP)(SP) ; SP+1SP,(PC);

43、 SP+1SP,(PC)8 81515(SP)(SP) ; addr; addr0 01010PCPC0 010 10 ,PC,PC11111515不變不變 ACALLACALL指令執(zhí)行步驟:指令執(zhí)行步驟: (SP)PC (SP)PC8 81515,SP-1SPSP-1SP; (SP)PC (SP)PC0 07 7, SP-1SPSP-1SP。 返回指令返回指令:返回指令有子程序返回和中斷返回兩種:返回指令有子程序返回和中斷返回兩種: RET RET ; ;子程序返回子程序返回 RETI RETI ; ;中斷返回中斷返回返回指令執(zhí)行步驟:返回指令執(zhí)行步驟: 空操作指令空操作指令(1 1條)條)

44、 NOPNOP為單機(jī)周指令,在時(shí)間上占用一個(gè)為單機(jī)周指令,在時(shí)間上占用一個(gè)機(jī)器周期,常用于時(shí)間機(jī)器周期,常用于時(shí)間“微調(diào)微調(diào)”。NOP NOP ;PC+1PC;PC+1PC第第4 4章章機(jī)械工業(yè)出版社同名教材機(jī)械工業(yè)出版社同名教材配套電子教案配套電子教案第第3版版第第4 4章章 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)4.1.1 匯編匯編 將匯編語言源程序轉(zhuǎn)換為機(jī)器代碼的過程稱為匯編。 將由二進(jìn)制碼組成的機(jī)器代碼程序轉(zhuǎn)換為匯編語言源程序的過程稱為反匯編。 4.1 匯編語言程序設(shè)計(jì)基本概念匯編語言程序設(shè)計(jì)基本概念 4.1.2 偽指令偽指令 在匯編時(shí)起控制作用,自身并不產(chǎn)生機(jī)器在匯編時(shí)起控制作用,自身并不

45、產(chǎn)生機(jī)器碼,不屬于指令系統(tǒng),而僅是為匯編服務(wù)的一碼,不屬于指令系統(tǒng),而僅是為匯編服務(wù)的一些指令,稱為偽指令。些指令,稱為偽指令。 常用的偽指令有以下幾種:常用的偽指令有以下幾種: 起始偽指令起始偽指令 ORG(Origin)ORG(Origin) 功能:規(guī)定功能:規(guī)定ORGORG下面目標(biāo)程序的起始地址。下面目標(biāo)程序的起始地址。格式:格式:ORG (16ORG (16位位地址地址)功能:將一個(gè)數(shù)據(jù)或特定的匯編符號賦予規(guī)定功能:將一個(gè)數(shù)據(jù)或特定的匯編符號賦予規(guī)定 的字符名稱。的字符名稱。 結(jié)束偽指令結(jié)束偽指令 ENDEND功能:是匯編語言源程序的結(jié)束標(biāo)志。在功能:是匯編語言源程序的結(jié)束標(biāo)志。在EN

46、DEND 以后所寫的指令,匯編程序不再處理以后所寫的指令,匯編程序不再處理。格式:格式:ENDEND 等值偽指令等值偽指令 EQUEQU(EquateEquate)格式:格式:(字符名稱字符名稱) EQUEQU (數(shù)據(jù)或匯編符號數(shù)據(jù)或匯編符號) 數(shù)據(jù)地址賦值偽指令數(shù)據(jù)地址賦值偽指令 DATADATA格式:格式:(字符名稱字符名稱) DATADATA (表達(dá)式表達(dá)式)功能:將數(shù)據(jù)地址或代碼地址賦予規(guī)定的功能:將數(shù)據(jù)地址或代碼地址賦予規(guī)定的 字符名稱。字符名稱。 定義字節(jié)偽指令定義字節(jié)偽指令DBDB(Define ByteDefine Byte)格式:格式:DB (8DB (8位二進(jìn)制數(shù)表位二進(jìn)制

47、數(shù)表) )功能:從指定的地址單元開始,定義若干功能:從指定的地址單元開始,定義若干 個(gè)個(gè)8 8位內(nèi)存單元的數(shù)據(jù)。位內(nèi)存單元的數(shù)據(jù)。 數(shù)據(jù)與數(shù)據(jù)之間用數(shù)據(jù)與數(shù)據(jù)之間用“,”分割。分割。格式:格式:(字符名稱)字符名稱) BITBIT (位地址)(位地址) 定義字偽指令定義字偽指令DWDW(Define WordDefine Word)格式:格式:DW DW (1616位二進(jìn)制數(shù)據(jù)表)位二進(jìn)制數(shù)據(jù)表)功能:從指定的地址單元開始,定義功能:從指定的地址單元開始,定義 若干個(gè)若干個(gè)1616位數(shù)據(jù)。位數(shù)據(jù)。 定義位地址偽指令定義位地址偽指令BITBIT功能:將位地址賦予所規(guī)定的字符名稱。功能:將位地址賦

48、予所規(guī)定的字符名稱。 匯編和調(diào)試匯編和調(diào)試4.1.3 程序設(shè)計(jì)的基本步驟程序設(shè)計(jì)的基本步驟 編寫程序要求:編寫程序要求: 不僅要完成規(guī)定的功能任務(wù),而且還應(yīng)該執(zhí)行不僅要完成規(guī)定的功能任務(wù),而且還應(yīng)該執(zhí)行速度快、占用內(nèi)存少、條理清晰、閱讀方便、便于速度快、占用內(nèi)存少、條理清晰、閱讀方便、便于移植、巧妙而實(shí)用。移植、巧妙而實(shí)用。 一般應(yīng)按以下幾個(gè)步驟進(jìn)行:一般應(yīng)按以下幾個(gè)步驟進(jìn)行: 分析問題,確定算法或解題思路分析問題,確定算法或解題思路 畫流程圖畫流程圖 編寫源程序編寫源程序 順序程序是指按順序依次執(zhí)行的程序,也順序程序是指按順序依次執(zhí)行的程序,也稱為簡單程序或直線程序。稱為簡單程序或直線程序。

49、 順序程序結(jié)構(gòu)雖然比較簡單,但也能完成順序程序結(jié)構(gòu)雖然比較簡單,但也能完成一定的功能任務(wù),是構(gòu)成復(fù)雜程序的基礎(chǔ)。一定的功能任務(wù),是構(gòu)成復(fù)雜程序的基礎(chǔ)。 4.2 匯編語言程序設(shè)計(jì)舉例匯編語言程序設(shè)計(jì)舉例4.2.1 順序程序順序程序CONT: MOVCONT: MOV A,R0 A,R0; ;讀低讀低8 8位位CPLCPL A A; ;取反取反ADDADD A,#1 A,#1; ;加加1 1MOVMOV R2,A R2,A; ;存低存低8 8位位MOVMOV A,R1 A,R1; ;讀高讀高8 8位位CPLCPL A A; ;取反取反ADDCADDC A,#80H A,#80H; ;加進(jìn)位及符號位

50、加進(jìn)位及符號位MOV R3,AMOV R3,A; ;存高存高8 8位位RETRET; ;【例】【例】 已知已知1616位二進(jìn)制負(fù)數(shù)存放在位二進(jìn)制負(fù)數(shù)存放在R1R0R1R0中,中, 試求其補(bǔ)碼,并將結(jié)果存在試求其補(bǔ)碼,并將結(jié)果存在R3R2R3R2中。中。解:二進(jìn)制負(fù)數(shù)的求補(bǔ)方法可歸結(jié)為解:二進(jìn)制負(fù)數(shù)的求補(bǔ)方法可歸結(jié)為“求反加求反加1”1”,符號,符號位不變。利用位不變。利用CPLCPL指令實(shí)現(xiàn)求反;加指令實(shí)現(xiàn)求反;加1 1時(shí),則應(yīng)低時(shí),則應(yīng)低8 8位先加位先加1 1,高高8 8位再加上低位的進(jìn)位。注意這里不能用位再加上低位的進(jìn)位。注意這里不能用INCINC指令,因?yàn)橹噶?,因?yàn)镮NCINC指令不影

51、響標(biāo)志指令不影響標(biāo)志位。位。程序如下:程序如下: 在許多情況下,需要根據(jù)不同的條件在許多情況下,需要根據(jù)不同的條件轉(zhuǎn)向不同的處理程序,這種結(jié)構(gòu)的程序稱轉(zhuǎn)向不同的處理程序,這種結(jié)構(gòu)的程序稱為分支程序。為分支程序。 80C5180C51指令系統(tǒng)中設(shè)置了條件轉(zhuǎn)移指指令系統(tǒng)中設(shè)置了條件轉(zhuǎn)移指令、比較轉(zhuǎn)移指令和位轉(zhuǎn)移指令,可以實(shí)令、比較轉(zhuǎn)移指令和位轉(zhuǎn)移指令,可以實(shí)現(xiàn)分支程序?,F(xiàn)分支程序。4.2.2 分支程序分支程序 S0單獨(dú)按下, 紅燈亮,其余燈滅; S1單獨(dú)按下, 綠燈亮,其余燈滅; S0、S1均按下, 紅綠黃燈全亮; S0、S1均未按下, 黃燈亮,其余燈滅。 【例【例4-6】已知電路如圖】已知電路如

52、圖4-44-4所示,要求實(shí)現(xiàn):所示,要求實(shí)現(xiàn):Keil C51軟件調(diào)試(見例9-1 ) 程序編譯鏈接及糾錯(cuò)。直至顯示:0 Error(s),0 Warning(s) 進(jìn)入調(diào)試狀態(tài) ,全速運(yùn)行。 打開P1口對話框,設(shè)置 P1.7 P1.6(s0、s1)狀態(tài) 。 觀測 P1.2P1.0狀態(tài) (0亮1滅 ),是否符合題目要求。畫出Proteus 虛擬仿真電路圖裝入在Keil 調(diào)試時(shí)生成的 Hex文件全速運(yùn)行 后,即時(shí)操作帶鎖按鈕S0、S1信號燈會按題目要求隨之變化 圖9-59 Proteus ISIS虛擬仿真信號燈電路課堂練習(xí)題:課堂練習(xí)題: 電路及燈亮滅要求同上例,其中第2、3兩條指令 JB P1

53、.7和JB P1.6按下列要求修改,試重新編程,并進(jìn)行Keil 軟件調(diào)試、Proteus 虛擬仿真,看能否達(dá)到題目要求。 JB JB P1.7 P1.7, JNB P1.6 JNB P1.6, JNB P1.7 JNB P1.7, JB P1.6 JB P1.6, JNB P1.7 JNB P1.7, JNB P1.6 JNB P1.6, 循環(huán)程序一般包括以下幾個(gè)部分:循環(huán)程序一般包括以下幾個(gè)部分: 循環(huán)初值;循環(huán)初值; 循環(huán)體;循環(huán)體; 循環(huán)修改;循環(huán)修改; 循環(huán)控制;循環(huán)控制;其結(jié)構(gòu)可以有兩種組織形式,其結(jié)構(gòu)可以有兩種組織形式,如如圖圖4-64-6所所示。示。 4.2.3 循環(huán)程序循環(huán)程序

54、 【例【例4-7】設(shè)設(shè)XiXi均為單字節(jié)數(shù),并按順序存放均為單字節(jié)數(shù),并按順序存放在以在以50H50H為首地址的內(nèi)為首地址的內(nèi)RAMRAM存儲單元中,數(shù)存儲單元中,數(shù)據(jù)長度(個(gè)數(shù))據(jù)長度(個(gè)數(shù))N N存在存在R2R2中,試編程求和中,試編程求和S=XS=X1 1+X+X2 2+ +X+XN N,并將,并將S S(雙字節(jié))存放在(雙字節(jié))存放在R3R4R3R4中(設(shè)中(設(shè)S S6553665536)。)。解:程序如下:解:程序如下: SXN:SXN: MOV R2,#N MOV R2,#N ;置數(shù)據(jù)長度置數(shù)據(jù)長度( (循環(huán)次數(shù)循環(huán)次數(shù)) ) MOV R3,#00H MOV R3,#00H ;和單

55、元和單元( (高高8 8位位) )清清0 0 MOV R4,#00H MOV R4,#00H ;和單元和單元( (低低8 8位位) )清清0 0 MOV R0,#50H MOV R0,#50H ;求和數(shù)據(jù)區(qū)首址求和數(shù)據(jù)區(qū)首址LOOP: MOV A,R4LOOP: MOV A,R4 ;讀前次低讀前次低8 8位和位和 ADD A,R0ADD A,R0 ;低低8 8位累加位累加 MOV R4,AMOV R4,A ;存低存低8 8位和位和 CLR A CLR A ; ADDC A,R3ADDC A,R3 ;高高8 8位加進(jìn)位位加進(jìn)位 MOV R3,AMOV R3,A ;存高存高8 8位和位和 INC

56、R0INC R0 ;指向下一數(shù)據(jù)指向下一數(shù)據(jù) DJNZ R2,LOOP DJNZ R2,LOOP ;判判N N個(gè)數(shù)據(jù)累加完否?個(gè)數(shù)據(jù)累加完否? RETRET ;退出循環(huán)退出循環(huán)循循環(huán)環(huán)體體置置循循環(huán)環(huán)初初值值循環(huán)修改循環(huán)修改循環(huán)控制循環(huán)控制退出循環(huán)退出循環(huán) DY1ms:MOV R7,#250 DY1ms:MOV R7,#250 ; ;置循環(huán)次數(shù)置循環(huán)次數(shù) DLOP: DJNZ R7,DLOP DLOP: DJNZ R7,DLOP ;2;2機(jī)周機(jī)周250=500250=500機(jī)周機(jī)周 RETRET ; ;【例4-8】按下列要求編寫延時(shí)子程序: 延時(shí)1ms,fosc=6MHz; 延時(shí)10ms,fo

57、sc=12MHz; 延時(shí)1s,fosc=6MHz;解解 :延時(shí):延時(shí)1ms,fosc=6MHz,一個(gè)機(jī)器周期為一個(gè)機(jī)器周期為2 2 s s說明:說明:MOV RnMOV Rn指令為指令為1 1個(gè)機(jī)器周期個(gè)機(jī)器周期; ; DJNZ DJNZ指令為指令為2 2個(gè)機(jī)器周期個(gè)機(jī)器周期; ; RET RET指令為指令為2 2個(gè)機(jī)器周期個(gè)機(jī)器周期; ; (2 2機(jī)周機(jī)周250)+1+2250)+1+22 2 s s/ /機(jī)周機(jī)周=1006=1006 s s1ms1msKeil C51軟件調(diào)試 編譯(擴(kuò)展名用.asm)鏈接并進(jìn)入調(diào)試狀態(tài)后,全速運(yùn)行。觀察寄存器窗口Sys中:states值為501(機(jī)周),s

58、ec值為0.001002(s) RET(返回)指令需與子程序調(diào)用指令成對出現(xiàn),單獨(dú)執(zhí)行時(shí)會出錯(cuò)。因此,Keil調(diào)試時(shí),需去除RET指令,用偽指令END替代,才能得到正確的延時(shí)時(shí)間。 但實(shí)際調(diào)用時(shí),仍需加上RET指令,延時(shí)時(shí)間增加2機(jī)周。 注意:DY10ms:MOV R6,#20 DY10ms:MOV R6,#20 ; ; 置外循環(huán)次數(shù)置外循環(huán)次數(shù)DLP1: MOV R7,#250 DLP1: MOV R7,#250 ; ; 置內(nèi)循環(huán)次數(shù)置內(nèi)循環(huán)次數(shù)DLP2: DJNZ R7,DLP2 DLP2: DJNZ R7,DLP2 ; 2; 2機(jī)周機(jī)周250 =500250 =500機(jī)周機(jī)周 DJNZ

59、R6,DLP1 DJNZ R6,DLP1 ; 500; 500機(jī)周機(jī)周20= 1000020= 10000機(jī)周機(jī)周 RETRET ; ;解解:延時(shí)10ms, fosc=12MHz,一個(gè)機(jī)器周期為1s。說明:說明:MOV RnMOV Rn指令為指令為1 1個(gè)機(jī)器周期個(gè)機(jī)器周期; ; DJNZ DJNZ指令為指令為2 2個(gè)機(jī)器周期個(gè)機(jī)器周期; ; RET RET指令為指令為2 2個(gè)機(jī)器周期個(gè)機(jī)器周期; ; (2 2機(jī)周機(jī)周250)+1+2250)+1+220+1+220+1+21 1 s s/ /機(jī)周機(jī)周 =10063=10063 s10mss10msKeil C51軟件調(diào)試結(jié)果軟件調(diào)試結(jié)果(用E

60、ND替代RET): states=10061(機(jī)周),(機(jī)周),sec=0.010061(s)。)。 DY1S:MOV R5,#5 DY1S:MOV R5,#5 ; ; 置外循環(huán)次數(shù)置外循環(huán)次數(shù)DYS0:MOV R6,#200 DYS0:MOV R6,#200 ; ; 置中循環(huán)次數(shù)置中循環(huán)次數(shù)DYS1:MOV R7,#250 DYS1:MOV R7,#250 ; ; 置內(nèi)循環(huán)次數(shù)置內(nèi)循環(huán)次數(shù)DYS2:DJNZ R7,DYS2 DYS2:DJNZ R7,DYS2 ; 2; 2機(jī)周機(jī)周250 = 500250 = 500機(jī)周機(jī)周 DJNZ R6,DYS1 DJNZ R6,DYS1 ; 500; 5

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論