第3章 MCS-51指令系統及程序設計_第1頁
第3章 MCS-51指令系統及程序設計_第2頁
第3章 MCS-51指令系統及程序設計_第3頁
第3章 MCS-51指令系統及程序設計_第4頁
第3章 MCS-51指令系統及程序設計_第5頁
已閱讀5頁,還剩82頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

MCS-51單片機原理及應用第章

MCS-51指令系統及匯編程序設計本章內容提要MCS—51系列單片機的尋址方式, 六種尋址方式的定義與表達方式MCS—51系列單片機的指令系統, 各指令的格式、功能、簡單應用單片機原理及應用計算機工作的基本原理是存儲程序并執行程序,而程序則由能實現某種功能的指令序列構成。編寫程序時使用的程序設計語言有三種:機器語言、匯編語言和高級語言。

機器語言是CPU唯一能直接識別的語言,是機器指令的集合,二進制代碼書寫。用匯編語言和高級語言編制的程序稱之為源程序,都要轉換成機器語言程序后才能為計算機直接執行,這種用機器語言描述的程序我們通常稱之為目標程序。單片機原理及應用

高級語言的特點是通用性強,可以在不同的機器上運行。用高級語言編寫的程序要用編譯程序或解釋程序翻譯成機器語言程序方能執行。

匯編語言是用助記符來表示機器指令的一種程序設計語言。其每條語句對應相應的機器指令。匯編語言與機器的指令系統密切相關,不同的機型其指令系統不同,匯編語言程序不具備高級語言的通用性,用匯編語言編寫的程序要經過匯編程序(也可以手譯)翻譯成機器語言程序后才能為計算機所識別。

其特點是占用的內存小、執行速度快。

單片機原理及應用

指令系統:一臺計算機具有的所有指令的集合稱為該計算機的指令系統。

MCS—51系列單片機的指令系統共有111條指令,在儲存空間與執行時間上都有較高的效率,還含有豐富的位操作指令,成為該指令系統的一大特色。

按其功能可分為數據傳送、算術運算、邏輯運算、程序轉移、位操作等5個大類。

按指令長度:單字節指令49條、雙字節指令46條、三字節指令只有16

條。按指令執行時間:單機器周期指令64條,雙機器周期指令45條,乘除2

條指令的執行時間為4個機器周期。

單片機原理及應用操作碼70數據或尋址方式70雙字節指令:標號:操作碼操作數或操作數地址(尋址方式);注釋單字節指令:操作碼70三字節指令:操作碼70數據或尋址方式70數據或尋址方式70指令按字節長度可以分為三種:指令的格式:例如:MOVA,R0例如:MOVA,30H例如:MOVDPTR,#2010H由1~6個字符組成,字母開頭由2~5個字母組成的助記符字符串,規定指令的操作功能操作數1~3,逗號隔開,不同指令操作數個數不同單片機原理及應用二、尋址方式

計算機的指令通常由操作碼和操作數兩部分構成。操作碼部分指出了指令的功能,通常用代表該功能的英文縮寫來表示;而操作數部分則可能是操作數本身或操作數所在的地址。表示指令中操作數所在位置的方法稱為尋址方式。對MCS—51系列單片機,操作數可以為0~2個。不同的指令系統,具有的尋址方式也不同,相同功能的指令采用不同的尋址方式,有時可以節約空間,有時可以提高速度,尋址方式的多樣化增加了指令的靈活性。 MCS—51系列單片機的指令系統有6種基本的尋址方式。指令給出參與運算的數據的方式稱為尋址方式單片機原理及應用

立即尋址操作數就在指令中,跟在操作碼的后面,該操作數被稱為立即數。在指令中,立即數前面加“#”符號作為標志。指令:MOVA,#40H^#data結果A中等于#40H程序存儲器0100000001110100此指令的立即數40H此指令的操作碼74HPC+1PC單片機原理及應用立即尋址

指令中直接給出操作數數值的尋址方式。立即操作數用前面加有#號的8位或16位數來表示。例如:MOV A,#60H ;A←#60HMOV DPTR,#3400H ;DPTR←#3400HMOV 30H,#40H ;30H單元←#40H上述三條指令執行完后,累加器A中數據為立即數據60H,DPTR寄存器中數據為3400H,30H單元中數據為立即數40H。單片機原理及應用直接尋址指令中含有操作數的直接地址(內部RAM),該地址指出了 參與運算或傳送的數據的直接單元(或位地址) 可訪問:SFR、內部RAM低128字節、片內RAM位地址 如:MOVA,40H結果:A中為(?)程序存儲器40HPC+10E5HPC內部RAM49h05H0e2h……0FH40H41H3FHMOVC,40H結果:位C中為?

28H單片機原理及應用直接尋址

指令中直接給出操作數地址的尋址方式,能進行直接尋址的存儲空間有SFR寄存器和內部數據RAM。例如:MOV A,30H ;A←30H內部RAM單元中的內容30H為直接給出的內部RAM的地址。單片機原理及應用寄存器尋址

指令指出當前工作區某一個寄存器(R0~R7)的內容作為操作數值 指令操作碼字節的低3位指明所使用的寄存器。 INC Rn 十六進制代碼:08~0FH INC R0 十六進制代碼:08 INC R1 十六進制代碼:09 INC R2 十六進制代碼:0A單片機原理及應用寄存器尋址

以通用寄存器的內容為操作數的尋址方式。通用寄存器指A、B、DPTR以及R0~R7

。例如: CLR A ;A←0 INC R0 ;R0←R0+1 ADD R5,#20H ;R5←#20H+R5單片機原理及應用寄存器間接尋址@Ri

指令指出R0、R1(用@R0或@R1)表示,其內容為地址所指的內RAM或外RAM中的數值,作為操作數值。

例如:R0=40H,MOVA,@R0 結果:A=? MOVXA,@R0 結果:A=?內RAM080H40H39H外RAM020H40H39HMOVX指令也可用DPTR作寄存器間接尋址單片機原理及應用寄存器間接尋址以寄存器中內容為地址,以該地址中內容為操作數的尋址方式。間接尋址的存儲器空間包括內部數據RAM和外部數據RAM。能用于寄存器間接尋址的寄存器有R0,R1,DPTR,SP。其中R0、R1必須是工作寄存器組中的寄存器。SP僅用于堆棧操作。單片機原理及應用片內RAM30HR034HA30H34HMOV@R0,A間接尋址示意圖單片機原理及應用片外RAM45HA0010H45H10HR1片外RAM2000HDPTR30HA2000H30HMOVXA,@R1間接尋址示意圖MOVX@DPTR,A間接尋址示意圖單片機原理及應用尋址比較MOVP1,R0③地址是寄存器R0MOVP1,@R0②地址在寄存器R0里MOVP1,20H④地址是內存20HMOVP1,#20H①直接將20H這個數送P1口MOVP1,R0單片機原理及應用變址尋址

變址尋址只能對程序存儲器中數據進行操作。由于程序存儲器是只讀的,因此變址尋址只有讀操作而無寫操作,在指令符號上采用MOVC的形式。如:MOVCA,@A+DPTR;A←(A+DPTR)MOVCA,@A+PC ;A←(A+PC)基址寄存器是PC。單片機原理及應用MOVCA,@A+DPTR;A←(A+DPTR)變址尋址示意圖程序存儲器2000HDPTR10HA2010H64H10H2000H單片機原理及應用相對尋址

以當前程序計數器PC的內容為基礎,加上指令給出的一字節補碼數(偏移量)形成新的PC值的尋址方式。相對尋址用于修改PC值,主要用于實現程序的分支轉移。例如,SJMP08H;PC←PC+2+08H

單片機原理及應用程序存儲器(2000H)200AHSJMP200AH08H2000H+208HPC2000HSJMP08H相對尋址示意圖單片機原理及應用位尋址位尋址只能對有位地址的單元作位尋址操作。位尋址其實是一種直接尋址方式,其地址是位地址。例如:SETB10H;將10H位置1若22H單元中存放著數據40H,22H單元的D0位的位地址為10H,執行上述指令后(22H)=41H。MOV32H,C;32H←進位位CORLC,32H;C←C∨32H單片機原理及應用寄存器尋址直接尋址立即數尋址寄存器間接尋址變址尋址相對尋址位尋址MOVCA,@A+DPTR目的地寄存器操作數內部RAM3AH65H3AH基址寄存器12H變址寄存器34H內部RAM46HXXHADPTRPC46H單片機原理及應用目的地寄存器尋址直接尋址立即數尋址寄存器間接尋址基址+變址尋址相對尋址XXH位尋址操作數SJMP54HPC+54HPC2002H······2002H=2056HPC2056H單片機原理及應用寄存器尋址直接尋址立即數尋址寄存器間接尋址變址尋址相對尋址位尋址20H······27H21H28H21H20H100000000如果想使27H單元的D5位置1,該怎么辦呢?單片機原理及應用單元地址2FH2EH2DH2CH2BH2AH29H28H

26H25H24H23H22H21H20H7F776F675F574F47372F271F170F07

MSB

位地址

LSB7E766E665E564E46

362E261E160E067D756D655D554D45352D251D150D057C746C645C544C44

342C241C140C047B736B635B534B43

332B231B130B037A726A625A524A42

322A221A120A027971696159514941

312921191109017870686058504840

30282018100800位尋址地址表例:SETB3DH

3D

3C

3B3F

3E3A

393827H單片機原理及應用寄存器尋址直接尋址立即數尋址寄存器間接尋址變址尋址相對尋址位尋址SETB3DH20H······27H21H28H21H20H000000010單片機原理及應用指令描述約定符號含義Rn表示當前選定寄存器組的工作寄存器R0~R7Ri表示作為間接尋址的地址指針R0~R1#data表示8位立即數,即00H~FFH#data16表示16位立即數,即0000H~FFFFHaddr16表示16位地址,用于64K范圍內尋址addr11表示11位地址,用于2K范圍內尋址direct8位直接地址,可以是內部RAM區的某一單元或某一專用功能寄存器的地址Rel帶符號的8位偏移量(-128~+127)Bit位尋址區的直接尋址位(X)X地址單元中的內容,或X作為間接尋址寄存器時所指單元的內容←將←后面的內容傳送到前面去單片機原理及應用MCS-51的指令1數據傳送指令(29條)

2算術運算指令(24條)3邏輯運算指令(24條)4控制轉移指令(17條)5位操作指令(17條)6常用偽指令(17條)

學習MCS—51單片機的指令系統應從指令的格式、功能、適用的尋址方式、運用等幾方面著手。單片機原理及應用3.2指令系統及應用CYAcF0RS1RS0OVF1PPSW單片機原理及應用目的地址源地址數據MOV<目的操作數>,<源操作數>MOVA,#20H,ARndirect1@RiARndirect2@Ri#dataARndirect2@Ri#dataMOVRnA#datadirect2direct1ARndirect2@Ri#data@RiAdirect2#data20HA1數據傳送指令(29條)

——8位數據傳送指令(15條)

單片機原理及應用練習1

設內部RAM中33H單元中內容為44H,34H單元中內容為0AFH,R0中內容為33H,R1中內容為00H,給出以下每一條指令執行后A中的值和PSW中P的值。 MOVA,#34H MOVA,34H MOVA,R1 MOVA,@R0

單片機原理及應用練習2設內部RAM30H單元中內容為52H,指出以下指令執行順次時的結果。

MOVA,#30H MOVA,30H MOVR0,#30H MOVA,@R0 MOV30H,#30H單片機原理及應用——16位數據傳送指令(1條)

以數據指針DPTR為目的操作數,把16位數據送入DPTR

MOVDPTR,#data16 MOVDPTR,#0A5FFH單片機原理及應用——外部數據傳送指令(4條)

MOVX<目的操作數>,<源操作數>,A@DPTR@RiMOVXA@DPTR@Ri@DPTRA@Ri@DPTRA@RiA單片機原理及應用MOVC查表指令MOVCA,@A+PC;(A+PC)AMOVCA,@A+DPTR;(A+DPTR)A基址寄存器加變址寄存器間接尋址 以十六位PC或DPTR作為基址寄存器,以8位累加器A作為變址寄存器,兩內容相加形成16位地址,此尋址方式常用于查表。單片機原理及應用1)字節交換指令(3條)

——交換和查表類指令(9條)

,AXCHdirectRn@RidirectARn@Ri2)低半字節交換指令(1條)

XCHDA,@Ri3)累加器A中高4位和低4位交換(1條)

SWAPA4)查表指令(2條)

MOVCA,@A+PCMOVCA,@A+DPTR5)堆棧操作指令(2條)

PUSHdirectPOPdirect單片機原理及應用3.2.1數據傳送類指令4)交換指令 XCHA,Rn XCHA,@Ri XCHA,direct XCHDA,@Ri SWAPA若A=0ABHR1=045H(44H)=0EFH(45H)=0CDH分別執行XCHA,R1XCHA,@R1XCHA,44H XCHDA,@R1SWAPA單片機原理及應用1.MOVA,#1000H ;A←1000H2.MOVXA,1000H ;A←(1000H)片外RAM3.MOVCA,1000H ;A←(1000H)片外ROM4.MOVX60H,A ;片外RAM(60H)←A5.MOVR0,60H ;片內RAM:(61H)←(60H) MOV61H,@R06.XCHR1,R2 ;R1←→R27.MOVXDPTR,#2000H;DPTR←2000H8.MOVX60H,@DPTR ;片內RAM←片外RAM9.MOVR1,R2 ;R1←R2下列指令是否錯誤,如錯請改正:單片機原理及應用3.2指令系統及應用5)堆棧指令

進棧PUSHdirect 1.SP+1送SP 2.(direct)送(SP)若當前SP=60H(30H)=0ABH執行PUSH30H產生的結果為:

出棧 POPdirect 1.(SP)送(direct)2.SP-1送SP若(65H)=091H(64H)=0A1H(63H)=0B1H(32H)=0C1H當前SP=64H,執行POP32H結果為:單片機原理及應用3.2.2算術運算類指令1)不帶進位位的加法指令 ADDA,Rn ADDA,direct ADDA,@Ri ADDA,#data影響CYAcOVP例:A=85HR0=20H(20H)=0AFH執行指令 ADDA,@R0

10000101A結果:A=34HCY=1 +) 10101111(20H) Ac=1OV=1P=1 (1) 00110100 單片機原理及應用directdirect2算術運算類指令(24條)

——加法指令(8條)

A,Rn@Ri#dataADDRn@Ri#datadirectdirectA,Rn@Ri#dataADDCRn@Ri#data——減法指令(4條)

directdirectA,Rn@Ri#dataSUBBRn@Ri#dataADDCA,B;(A+B+CY→A)SUBBA,B;(A–B–

CY→A)單片機原理及應用3.2指令系統及應用3.2.2算術運算類指令1)不帶進位位的加法指令 ADDA,Rn ADDA,direct ADDA,@Ri ADDA,#data影響CYAcOVP例:A=53HR0=0FCH執行指令 ADDA,R0 01010011結果:A=4FHCY= +) 11111100 Ac=OV=P= (1) 01001111 單片機原理及應用3.2.2算術運算類指令2)帶進位位的加法指令 ADDCA,Rn ADDCA,direct ADDCA,@Ri ADDCA,#data影響CYAcOVP例:A=85HR0=20H(20H)=0FFHCY=1執行指令 ADDA,@R0

結果:A=84HCY=1 Ac=1OV=0P=1 思考:如何實現雙字節數相加?單片機原理及應用3.2.2算術運算類指令3)帶進位位的減法指令 SUBBA,Rn SUBBA,direct SUBBA,@Ri SUBBA,#data影響CYAcOVP例:A=0C9HR2=54HCY=1執行指令 SUBBA,R2

11001001結果:A=74HCY=0 01010100 Ac=0OV=1P=0 -) 1 01110100 思考:如何實現雙字節數相減?單片機原理及應用BCD碼:00110100——BCD碼調整指令(1條)

DAA注意:DAA指令只能跟在ADD或ADDC加法指令后,不適用于減法指令。十進制二進制BCD碼012345678910

11

12

13

14

15000000010010001101000101011001111000100110101011110011011110111100000001001000110100010101100111100010010001000000010001000100100001001100010100000101011816+34十進制0001100000010110+BCD碼001011100011010000101110-00000110差6單片機原理及應用3.2.2算術運算類指令十進制調整指令

DAA只能跟在加法指令后,將A中結果調整為BCD碼。例:執行指令 MOVA,#56H MOVR5,#67H ADDA,R5 DAA結果A=23HCY=1其它不變化單片機原理及應用3.2.2算術運算類指令4)加1指令(增量指令) INCA INCRn INCdirect INC@Ri INCDPTR例: A=0FFH執行指令 INCA 結果?例 R0=09H R2=10H執行指令 INCR0

INC R1 結果?單片機原理及應用3.2.2算術運算類指令減1指令

DECA DECRn DECdirect DEC@Ri例:A=0FHR7=19H(30H)=00HR1=40H(40H)=0FFH分別執行指令DECADECR7DEC30HDEC@R1結果A=0EHP=1 R7=18H; (30H)=0FFH (40H)=0FEH單片機原理及應用3.2.2算術運算類指令乘法指令

MULAB把A和B中的無符號數相乘,低字節存于A中, 高字節存于B中。CY位總清零,積大于0FFH,置位OV例:執行指令 MOVA,#50H MOVB,#0A0H MULAB結果A=00HB=32H0V=1CY=0其它不變化思考:如何實現雙字節數相乘?單片機原理及應用3.2.2算術運算類指令除法指令

DIVAB把A和B中的無符號數相除,執行指令后,商 存于A中,余數存于B中,CY、OV均清零。除 數為零時,A、B內容不確定,并置位OV例:執行指令 MOVA,#0FBH MOVB,#12H DIVAB結果A=0DHB=11H0V=0CY=0其它不變化單片機原理及應用邏輯及移位類指令

——邏輯與指令(6條)

助記符格式機器碼(B)相應操作指令說明機器周期ANLA,direct01010101directAA∧direct按位相與1ANLA,Rn01011rrrAA∧Rnn=0~7rrr=000~1111ANLA,@Ri0101011iAA∧(Ri)i=0,11ANLA,#data01010100dataAA∧#data

1ANLdirect,A01010010direct(direct)(direct)∧A不影響PSW的P標志1ANLdirect,#data01010011directdata(direct)(direct)∧#data不影響PSW的P標志2單片機原理及應用——邏輯或指令(6條)

01000011directdata助記符格式機器碼(B)相應操作指令說明機器周期ORLA,direct01000101directAA∨direct按位相或1ORLA,Rn01001rrrAA∨Rnn=0~7,rrr=000~1111ORLA,@Ri0100011iAA∨(Ri)i=0,11ORLA,#data01000100dataAA∨#data

1ORLdirect,A01000010direct(direct)(direct)∨A不影響PSW的P標志1ORLdirect,#data(direct)(direct)∨#data不影響PSW的P標志2單片機原理及應用——邏輯異或指令(6條)

助記符格式機器碼(B)相應操作指令說明機器周期XRLA,direct01100101directAA(direct)按位相異或1XRLA,Rn01101rrrAARnn=0~7,rrr=000~1111XRLA,@Ri0110011iAA(Ri)i=0,11XRLA,#data01100100dataAA#data

1XRLdirect,A01100010direct(direct)(direct)A不影響PSW的P標志1XRLdirect,#data01100011directdata(direct)(direct)#data不影響PSW的P標志2單片機原理及應用3.2.3邏輯運算類指令

2)兩個操作數的邏輯操作指令邏輯與ANL、邏輯或ORL、邏輯異或XRL例: MOVA,#38H MOVR0,#0FH ANLA,R0結果:A=?例:將P1口低3位設置位輸入 ORLP1,03HORLP1,#03HORLP1,07HORLP1,#07H單片機原理及應用——累加器A清0和取反指令助記符格式機器碼(B)相應操作指令說明機器周期CLRA11100100A00HA中內容清0,影響P標志1CPLA11110100A中內容按位取反,影響P標志1AA單片機原理及應用RLARRARLCARRCAA.0A.7A.0A.7A.0A.7A.0A.7CYCY——循環移位指令單片機原理及應用2.4控制轉移類指令

——無條件轉移指令(4條)1)長轉移指令:LJMP0AAAAH;AAAAHPCPC=0000HPC=AAAAH0000H0001H······AAA9HAAAAH0002H假設執行該指令前,PC的值為0000H。注意:該指令可以轉移到64KB程序存儲器中的任意位置。單片機原理及應用PC高5位(保持不變)PC低11位A10A9A800001A7A6A5A4A3A2A1A0操作數(第二字節)11位轉移地址的形成示意圖程序計數器PC2)絕對轉移指令AJMPaddr11;PC+2PC,addr11PC.10~PC.0操作碼(第一字節)單片機原理及應用3.2.4控制轉移類指令

1)無條件轉移指令長跳轉指令:LJMPaddr16把操作數分別裝進PC的高字節和低字 節。可以跳轉至64KBROM的任何地方。短跳轉:AJMPadd11在此指令2KB范圍內跳轉,即在頁內跳轉 實際使用時,一般采用符號地址,即標號。相對轉移指令:SJMPrelPC+2+rel送PC,在前128B至后127B間 跳轉。單片機原理及應用3.2.4控制轉移類指令

2)散轉指令(基址加變址寄存器間接轉移指令)

JMP@A+DPTRA+DPTR送PC形成16位跳裝目的地址。 常用于按鍵等轉移控制。3)條件轉移指令 以跳裝指令的下一條指令為中心,256B范圍內跳轉。當條件 滿足時執行跳轉。一、測試條件符合轉移指令

JZrel 如果A中為0,則跳轉 JNZrel 如果A中不為0,則跳轉

單片機原理及應用3.2.4控制轉移類指令

3)條件轉移指令

JCrel CY位為1,執行跳轉

JNCrel CY位為1,執行跳轉 JBbit,rel 字節尋址位為1,執行跳轉 JNBbit,rel 字節尋址位為0,執行跳轉 JBCbit,rel 字節尋址位為1,執行跳轉,并清0此位單片機原理及應用3.2.4控制轉移類指令

3)條件轉移指令 比較不等轉移指令

CJNEA,direct,rel CJNEA,#data,rel CJNERn,#data,rel CJNE@Ri,#data,rel比較兩操作數的大小,如果值不等,則轉移,如果第一操作數小于第二操作數,還要CY位置1,否則CY清0。整個操作不影響兩操作數內容。單片機原理及應用3.2.4控制轉移類指令

3)條件轉移指令比較不等轉移指令例: 根據A的內容大于60H、小于60H、等于60H三種情況作不同的處理。

CJNEA,#60H,NEQ ;A不等于60H轉移

EQ: …………. ;A=60H處理程序

………….. NEQ:JCLOW

………….. ;A>60H處理程序

LOW:………… ;A<60H處理程序

單片機原理及應用3.2.4控制轉移類指令

3)條件轉移指令 減一不等于0轉移指令

DJNZRn,rel DJNZdirect,rel 將源操作數Rn或(direct)減一,如果值不等0,則轉移。 此指令使得允許以RAM單元用作程序循環計數器。例:延時程序 DELAY: MOV30H,#03H DEL0: MOV31H,#0F0H DEL1: DJNZ31H,DEL1 DJNZ30H,DEL0

思考:如何用DJNZ指令,將內部RAM區域字節地址20H~30H清零?單片機原理及應用3.2.5位操作類指令

1)位變量傳送指令 MOVC,bit MOVbit,C例: 執行以下兩條指令 MOVC,06H MOVP1.0,C2)位變量修改指令 CLRC CLRbiteg.CLR27H;(24H).70 CPLC CPLbit SETBC SETBbit eg.SETBP1.7P1.71單片機原理及應用3.2.5位操作類指令

3)位變量邏輯操作指令

邏輯與 ANLC,bit ANLbit,C

邏輯或 ORLC,bit ORLC,/bit 斜線“/”表示邏輯非單片機原理及應用3.2.5調用返回指令

短調用 ACALLaddr11 PC+2PCL入(SP+1)PCH入(SP+2),即SP=SP+2長調用 LCALL

addr16 兩者的區別在于所調用程序所在地址范圍不同,前者在同一頁面地址內調用,后者可在64K范圍內調用。返回指令: RET在子程序結尾,必須是此指令,才能從子程序中返回至主程序例:若SP=62H,(62H)=07H,(61H)=30H執行

RET結果:SP=60HPC=0730H單片機原理及應用3.2.5調用返回指令

中斷返回指令: RETI在中斷子程序結尾,必須是此指令,才能從子程序中返回至主程序,并清除相應的中斷寄存器。3.2.6空操作指令

NOP3.2.7偽指令

ORG定位偽指令 EQU END 匯編結束 BIT DB DW DS單片機原理及應用將00H~0FH這16個數順序地置入片內RAM20H~2FH單元中。

方案一

MOVR0,#20H MOVR7,#0FH CLRALOOP:MOV@R0,AINCAINCR0DJNZR7,LOOPSJMP$還有什么方法實現循環的終止?單片機原理及應用方案二MOVR0,#20H MOVR7,#0FH CLRALOOP:MOV@R0,AINCAINCR0CJNEA,#0FH,LOOPSJMP$單片機原理及應用方案三

MOVR0,#20H MOVA,#0FH MOV30H,#00HLOOP:MOV@R0,30HINC30HINCR0DECAJNZLOOPSJMP$單片機原理及應用方案四

MOVR0,#20H MOVA,#0FH MOV30H,#00HLOOP:MOV@R0,30HINC30HINCR0SUBBA,#01HJNCLOOPSJMP$單片機原理及應用2.5位操作類指令單元地址2FH2EH2DH2CH2BH2AH29H28H27H26H25H24H23H22H21H20H7F776F675F574F473F372F271F170F07

MSB

位地址

LSB7E766E665E564E463E362E261E160E067D756D655D554D453D352D251D150D057C746C645C544C443C342C241C140C047B736B635B534B433B332B231B130B037A726A625A524A423A322A221A120A027971696159514941393129211911090178706860585048403830282018100800RAM位尋址區位地址表單片機原理及應用助記符格式機器碼(B)相應操作指令說明機器周期MOVC,bit10100010CYbit位傳送指令,結果影響CY標志2MOVbit,C10010010bitCY位傳送指令,結果不影響PSW2位置位和位清零指令助記符格式機器碼(B)相應操作指令說明機器周期CLRC11000011CY0位清0指令,結果影響CY標志1CLRbit11000010bitbit0位清0指令,結果不影響PSW1SETBC11010011CY1位置1指令,結果影響CY標志1SETBbitbit1位置1指令,結果不影響PSW111010010bit位傳送指令單片機原理及應用位運算指令助記符格式機器碼(B)相應操作指令說明機器周期ANLC,bit10000010bitCYCY∧bit位與指令2ANLC,/bit10110010bit位與指令2ORLC,bit01110010bitCYCY∨bit位或指令2ORLC,/bit10100010bit位或指令2CPLC10110011位取反指令2CPLbit10110010位取反指令,結果不影響CY2CYCY∧bitCYCY∨bitCYCYbitbit助記符格式機器碼(B)相應操作機器周期JBbit,rel00100000bitrel若bit=1,則PCPC+rel,否則順序執行2JNBbit,rel00110000bitrel若bit=0,則PCPC+rel,否則順序執行2JBCbit,rel00010000bitrel若bit=1,則PCPC+rel,bit0,否則順序執行2位轉移指令單片機原理及應用3.2.5調用返回指令

中斷返回指令: RETI在中斷子程序結尾,必須是此指令,才能從子程序中返回至主程序,并清除相應的中斷寄存器。3.2.6空操作指令

NOP3.2.7偽指令

ORG 定位偽指令 EQU 符號定義偽指令 END 匯編結束

DB 定義字節數據偽指令 DW 定義字數據偽指令 DS 定義空間偽指令單片機原理及應用例1:查表子程序:多字節十六進制數轉成ASCII碼入口:R0內裝有16進制數低位地址 R2內裝此多字節十六進制數的字節數出口:R1內裝有ASCII數低位地址HEXASC: MOVA,@R0 MOVCA,@A+PC ANLA,#0FH MOV@R1,A ADDA,#16 INCR0 MOVCA,@A+PC INCR1 MOV@R1,A DJNZR2,HEXASC INCR1 DECR1 MOVA,@R0 RET SWAPA ASCTAB:DB“0,1,2,3,4,5,6,7,8,9” ANLA,#0FH DB“A,B,C,D,E,F” ADDA,#07H單片機原理及應用例2:如果Xi均為單字節數,按順序存放于內RAM從50H開始的單元中,n存放于R2中,現求此n個數之和,放于R3R4中NSU: MOVR3,#0 INCR0 MOVR4,#0 DJNZR2,LOOP MOVR0,#50 RETLOOP:MOVA,R4 ADDA,@R0 MOVR4,A CLRA ADDCA,R3 MOVR3,A

思考,如果是8個單字節數,如何計算平均?單片機原理及應用例3:多重循環,50毫秒延時(12MHz晶振)最簡單的多重循環為由DJNZ指令構成的軟件延時程序DEL: MOVR7,#200 ;1DEL1: MOVR6,#125 ;1DEL2:DJNZR6,DEL2 ;2 DJNZR7,DEL1 ;2 RET 延時1+(1+2×R6+2)×R7+2=50,203uS注意:用軟件延時時,不允許有中斷,否則將嚴重的影響定時的準確性。改為:DEL: MOVR7,#200 ;1 DEL1:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論