當前位置:編程學習大全網 - 網絡軟體 - 求壹MCS-51系列單片機指令表

求壹MCS-51系列單片機指令表

傳送指令是指令系統中最基本,使用最多的壹類指令,主要用於數據的傳送、保存以及交換等場合。

1.以累加器A為目的操作數的指令(4條)

這組指令的功能是把源操作數指定的內容送入累加器A中。

有寄存器、直接、寄存器間接和立即4種尋址方式。

MOV A, Rn MOV A, data

MOV A,@Rn MOV A,#data

2.以寄存器Rn為目的的操作數的指令(3條)

這組指令的功能是把源操作數指定的內容送到所選定的工作寄存器Rn中。

有寄存器、直接和立即3種尋址方式。

MOV Rn, A MOV Rn,data

MOV Rn,#data

3.以直接地址為目的操作數的指令(5條)

這組指令的功能是把源操作數指定的內容送到由直接地址data所指定的片內RAM中。

有寄存器、直接、寄存器間接和立即4種尋址方式。

MOV data,A MOV data,Rn

MOV data1,data2 MOV data,@Ri

MOV data,#data

4.以間接地址為目的操作數的指令(3條)

這組指令的功能是把源操作數指定的內容送到以Ri中的內容為地址的片內RAM中。

有寄存器、直接和立即3種尋址方式。

MOV @Ri,A MOV @Ri,data

MOV @Ri,#data

5.查表指令(2條)

這組指令的功能是對存放於程序存儲器中的數據表格進行查找傳送。使用變址尋址方式。

MOVC A,@A+DPTR MOVC A, @A+PC

6.累加器A與片外AM傳送指令(4條)

這組指令的功能為累加器A與片RAM間的相互傳送。由於MCS-51指令系統中沒有專門的輸入/輸出指令,且片外擴展的I/O口與片外RAM是統壹編址的,故以下4條指令也可作為輸入/輸出指令。使用寄存器間接尋址方式。

MOVX A,@DPAR MOVX @DPTR,A

MOVX A,@Ri MOVX @Ri,A

7.堆棧操作類指令(2條)

該類指令的功能是把直接尋址單元的內容傳送到堆棧指針SP所指的單元中,以及把SP所指單元的內容送到直接尋址單元中。

PUSH data POP data

前壹條指令稱為入棧操作指令,後壹條指令稱為出棧指令。由於開機復位後,(SP)=07H,故壹般需重新設置SP的初值。由於壓入堆棧的第壹個數必須存放在SP+1所指存儲單元,故實際的棧底為SP+1所指存儲單元。

8.交換指令(4條)

該類指令的功能是把累加器A中的內容與源操作數所指出的數據相互交換。

有寄存器、直接和寄存器間接3種尋址方式。

XCH A,Rn XCH A,data

XCH A,@Ri XCHD A,@Ri

9.16位數據傳送類指令(1條)

MOV DPTR,#data

該指令的功能是把16位常數送入數據指針寄存器,使用立即尋址方式。譯成機器碼時,是高位字節在前,低位字節在後。

MCS-51具有強大的加、減、乘、除四則算術運算指令。

1.程序狀態字PSW

MCS-51有壹個程序狀態字寄存器PSW,用來保存指令執行結果的標誌,供程序查訊和判別。PSW是特殊功能寄存器中的壹個,其格式如下:

PSW7--既是布爾處理機的累加器C,又是進位標誌CY,如果操作結果在最高位有進位輸出(加法時)或借位輸入(減法時),置位CY,否則清“0”CY。

AC--輔助進位(半進位)標誌。如果操作結果的低4位有進位(加法時)或向高4位借位時(減法),置AC,否則清“0”AC,AC主要用於二-十進制數加法調整。

OV--溢出標誌。如果操作結果有進位進入最高位,但最高位沒有產生進位,或者最高位產生進位而低位沒有向最高位進位,這時置位溢出標誌位,否則OV清“0”。溢出標誌位用於補碼運算,當有符號的數運算結果不能用8位二進制數表示時,OV將置位。

P--累加器A的奇偶標誌位,如果累加器A的8位的模2和為1(奇),則P=1;否則P=0。由於P總是表示A的奇偶性,隨著A的內容變化的,所以壹個值寫入PSW的P位的值不變。

RS1、RS0--指示當前使用的工作寄存器區。

F0--用戶標誌位。可作為軟件標誌,它的作用和內部RAM位尋址區的各位相似。

PSW1--保留位,對它的操作無效。

2.加法指令

1、不帶進位加法指令

ADD A,#data ADD A,data

ADD A,@Ri ADD A,Rn

工作寄存器、內部RAM單元內容或立即數的8位無符號二進制數和累加器A中數相加,所得和存放於累加器A中,當和的第3、7位有進位時,分別將AC,CY標誌位置1;否則為0。

上述指令的執行將影響標誌位AC、CY、OV、P。

對於無符號數,進位標誌位CY=1,表示溢出;CY=0表示無溢出。帶符號數運算的溢出取決於第6、7位中有壹位產生進位,而另壹位不產生進位,溢出標誌位OV置“1”否則被清“0”。OV=1表示兩個正數相加,和變為負數,或兩個負數相加,和變為正數的錯誤結果。

源操作數有四種尋址方式:寄存器、直接、間接和立即數。

2、帶進位加法指令:

ADDC A,#data ADDC A,data

ADDC A,@Ri ADDC A,Rn

這是四條帶進位的加法指令。將累加器A內容加當前CY標誌位內容,再加無符號單字節的數,和存於累加器A中。當運算結果第3、7位產生進位溢出時,則分別置位AC、CY和OV標誌位。本指令執行將影響標誌位AC、CY、OV、P。

本指令常用於多字節加法。

3、加1指令:

INC A INC data

INC @Ri INC Rn

INC DPTR

INC指令將指定的內容加1,結果仍存放於原A或原單元中。如原值為0FFH,加1運算後將變成00H,運算結果不影響標誌位。

本指令可對累加器A、工作寄存器RN、RI間址和直接尋址的單元內容進行加1運算。可見MCS-51加1指令是較豐富的。

註意:當用本指令使輸出並行I/O內容加1時,用作輸出口原始值,將從輸出口的數據鎖存器中讀入,而不是從輸出口的引腳上讀入。

4、二-十進制調正指令:

DA A

若[(A0-3)>9]或[(AC)=1),則(A0-3)(A0-3)+06H

本指令是對A的BCD碼加法結果進行調正。兩個壓縮型BCD碼按二進制數相加之後,必須經本指令調正,才能得到壓縮型BCD碼的和數。

本指令的操作為:若累加器A的低4位數值大於9或者第3位向第4位產生進位,即AC輔助進位位為1,則需將A的低4位內容加6調正,以產生低4位正確的BCD碼值。如果加0調正後,低4位產生進位,且高4位均為1時,則內部加法將置位CY,反之,它並不清“0”CY標誌位。

若累加器A的高4位值大於9或最高進位位CY=1,則高位4位需加6調正,以產生高4位的正確BCD碼值。同樣,在加6調正後產生最高進位,則置位CY,反之,不清“0”CY這時CY的置位,表示和數BCD碼值大於等於100。這對多字節十進制加法有用。不影響OV標誌。

由此可見,本指令是根據累加器A的原始數值和PSW的狀態,對累加器A進行加O6H、60H或66H的操作。

必須註意:本指令不能簡單地把累加器A中的16進制數交換成BCD碼,也不能用於十進制減法的調正。

3.減法指令

MCS-51在MCS-48的基礎上增加了帶借位減法指令,加強了計算機的運算功能。

1、帶借位減法指令:

SUBB A,#data SUBB A,data

SUBB A,@Ri SUBB A,Rn

帶借位減法指令SUBB,從累加器A中減去進位標誌位CY和指定的變量,結果在累加器A中,若第七位有借位,則置位位CY,否則CY清0。若第3位有錯位,則置位輔助進位標誌AC,否則清0 AC。若第7和第6位中有壹位需借位,而另壹位不借位,則置位溢出標誌OV。溢出位OV用於帶符號的整數減法,它表示(OV=1)壹個正數減負數結果為負數;或壹個負數減正數結果為正數的錯誤結果。

源操作數允許有四種尋址方式:寄存器RN,直接地址direct,間址Ri或立即數。

當在進行單字節或多字節減法前,不知道進位標誌位CY的值,則應在減法指令前先將CY清“0”。

4.乘法指令

MUL AB

乘法指令是MCS-51新增加的,運算速度只需4個機器周期。它大大增加了MCS-51單片機的運算功能,克服了MCS-48系列單片機的不足。

本指令將累加器A和寄存器B中二個8位無符號整數進行相乘,16位乘積的低8位存於A中,高8位存於B中,如果乘積大於255(0FFH),即B的內容不為0時,則置位溢出標誌位OV,否則清“0”OV。進位標誌位CY總是清“0”。

5.除法指令

DIV AB

MCS-51系列單片機增加的除法指令,運算時間亦只需4個機器周期,同樣也增強了MCS-51的運算功能,使它能適用於復雜的且要求運算功能較強的控制系統。除法指令格式:

本指令將累加器A中8位無符號整數除以B寄存器中8位無符號整數,所得結果商的整數部分存於A中,整數作數部分存於寄存器B中。清“0”CY和OV標誌位。當除數(B中內容)為00H時,則執行結果將為不定值,即執行結果送往A和B中的為不定值,且置位溢出標誌位OV。在任何情況下,均清“0”CY。

6.減壹指令

DEC A DEC data

DEC @Ri DEC Rn

DEC指令把所指的寄存器內容減1,結果仍送回原寄存器,若原來寄存器的內容為00H,則減1後將為FFH,運算結果不影響任何標誌位,該組指令使用了直接、寄存器和寄存器間尋址。同加1指令壹樣,在第二條指令中,若直接地址是I/O口,則進行“讀-改-寫”操作。

邏輯操作類指令***有效25條,有與、或、異或、求反、左右移位、清0等邏輯操作,對應的尋址方式有直接、寄存器和間接尋址,該類指令的執行壹般不影響PSW。

1.循環移位指令(4條)

RL A; RR A;

RLC A; RRC A;

前兩條指令的功能分別是將累加器A的內容循環左移壹位,後兩條指令的功能分別是將累加器A的內容連同進位位CY壹起循環左移或右移壹位。

2.累加器半字節交換指令(1條)

SWAP A;

這條指令的功能是將累加器A的高低兩半字節交換。如(A)=56H,執行指令SWAP A 後,結果(A)=65H。

3.求反指令(1條)

CPL A;

4.清0指令(1條)

CLR A;

5.邏輯與指令(6條)

ANL A,#data; ANL data,#data

ANL A,Rn ANL A,data

ANL data,A ANL A,@Ri

這組指令的第二條和第五條指令中,若直接地址正好是I/O口,則也是“讀-改-寫”操作。

6.邏輯或指令(6條)

ORL A,#data ORL data,#data

ORL A,Rn ORL A,data

ORL data,A ORL A,@Ri

這組指令的第二條和第五條也具有“讀-改-寫”功能。

7.邏輯異或指令(6條)

XRL A,#data XRL data,#data

XRL A,Rn XRL A,data

XRL data,A XRL A,@Ri

同樣,這組指令的第二條和第五條也具有“讀-寫-改”功能。

控制轉移類指令用於控制程序的走向,故其作用區間是程序存儲器空間。利用具有16位地址的長調用、長轉移指令可對64K程序存儲器的任壹地址單元進行訪問,也可用具有11位地址的絕對調用和絕對轉移指令,訪問2K字節的空間。另外,還有在壹頁範圍的短相對轉移以及許多條件轉移指令,這類指令壹般不影響標誌位,不面分別給予介紹。

1.無條件轉移語句(4條)

LJMP addr16 AJMP addr11 SJMP rel JMP @(A)+DPTR

上述指令的功能是當程序執行完該指令時,程序就無條件地轉移到指令所提供的地址上去。

第壹條指令稱為長轉移指令,指令提供16位目標地址,將指令中第二字節和第三字節地址碼分別裝入PC的高8位中,所以無條件轉移的目標地址範圍是64K字節空間。

第二條指令稱為絕對轉移指令,指令提供11位目標地址,所以,無條件轉移的目標地址範圍是從下條指令開始的2K字節空間。

第三條指令稱為相對短轉移指令,指令控制程序無條件的轉向指定地址。該指令的rel是壹個帶符號的相對偏移量,範圍為-128~+127。負數表示向後轉移,正數表示向前轉移。這條指令的優點是指令給出的是相對轉移地址,不具體指出地址值,這樣當程序地址發生變化時,只要相對地址不發生變化,該指令就不需作任何改動。在用匯編語言寫程序時,rel是壹個標號,由匯編程序在匯編過程中自動計算偏移地址。在手工匯編時,可用下式計算偏移地址:

向後轉移時:rel=FEH-(源、目的地址的絕對值)

向前轉移時:rel=(源、目的地址差的絕對值)-2

第四條指令稱為散轉指令(又稱為間接轉移指令),該指令把累加器A中的8位無符號數與作為基址寄存器DPTR中的16位數據相加,所得的值送入PC作為轉移的目的地址。該指令執行後不影響累加器A和數據指針DPTR中的原內容,也不影響任何標誌位。這條指令的特點是其轉移地址不是編程時確定的,而是在程序運行時動態決定的。因此,可以在DPTR中裝入多條轉移程序的首地址,而由累加器A中的內容來動態選擇該時刻應轉向那壹條分支程序。

2.條件轉移指令(8條)

1.JZ rel 2.JNZ rel

3.CJNEA,data,rel 4.CJNE A,#data,rel

5. CJNE Rn,#data,rel

6.CJNE @Ri,data,rel

7.DJNZ Rn,rel

8.DJNZ data,rel

上述指令執行滿足某種特定條件的轉移,其目標在以下壹條指令的起始地址為中心的256個字節範圍內(-128~+127)。

第壹條和第二條指令是判別累加器A中的內容是否為0來確定是順序執行還是轉移。

第三條至第六條是比較轉移指令,該指令通過比較前面兩個操作數的大小,如果它們的值不相等則轉移,相等則繼續執行。指令執行後要影響進位位CY,若操作數1小於操作數2,則CY=1;若操作數1大於操作數2,則CY=0。

3.調用指程序及返回指令(4條)

1.LCALL addr16 2.ACALL addr11 3.RET 4.RETI

在程序設計中,經常需要對某段程序反復執行,為了減少程序的編寫以及浪費不必要的地址空間,於是引入了主程序和子程序的概念,通常把某壹段需要反復調用的程序稱為子程序,子程序的最後壹條指令為返回主程序指令(RET),而對具有調用子程序功能的指令稱為調用指令。

第壹條指令稱為長調用指令,其與LJMP壹樣提供16位地址,可調用64K字節範圍內的子程序。由於其為三字節指令,所以執行時首先(PC)+3,以獲得下壹條指令地址,並把此時的PC內容壓入堆棧,作為返回地址,然後把地址addr16裝入PC,轉去執行子程序。

第二條指令稱為絕對調用指令,該指令提供11位目標地址,限制在2K字節範圍內調用,由於是雙字節指令,所以執行時(PC)+2以獲得下壹條指令的地址,然後把該地址壓入堆棧作為返回地址。其操作碼的形成與AJMP指令相同。

第三條指令稱為子程序返回指令,表示子程序結束需返回主程序,所以執行該指令時,分別從堆棧中彈出調用子程序時壓入的返回地址。

第四條指令稱為中斷返回指令,該指令的執行過程類似指令RET,但其還能恢復中斷邏輯,RETI和RET決不能互換使用。

4.空操作指令(1條)

NOP;

空操作指令除了PC加1外,CPC不作任何操作,而轉向下壹條指令去執行。這條指令常用於產生壹個機器周期的延時。

位操作類指令***有17條,均以位為操作對象,分別完成位傳送、位狀態控制、位邏輯運算、位條件轉移等功能,在匯編語言中,位地址的表示方式有以下4種:

直接用位地址表示:如91H。

字節地址位數方式:如P1.0(90H)。

位名稱方式:如RS0。

用戶使用偽指令事先定義過的符號地址。

1.位數據傳送指令(2條)

MOV C,bit MOV bit,C

上述指令把源操作數指定的變量傳送到目的操作數指定的單元中。第二條指令若是對I/O口的位進行操作,則也是“讀-改-寫”操作。

2.位狀態控制指令(6條)

CLR C CLR bit CPL C

CPL bit SETB C SETB bit

上述指令的功能是分別對進位標誌和直接尋址進行清0、求反以及直接位地址是I/O口的某壹位時,也具有“讀-改-寫”功能。

3.位邏輯運算指令(4條)

ANL C,bit ANL C,/bit

ORL C,bit ORL C/bit

上述指令的功能是將位累加器C的內容與直接位地址的內容或直接位地址內容的反進行邏輯與、邏輯或,結果仍送回C中。

4.位條件轉移指令(5)

JC rel JNC rel

JB bit,rel JNB bit,rel

JBC bit,rel

上述指令的功能分別是判別進位位C和直接位地址的內容是“1”還是“0”,以此來決定程序的走向。最後壹條指令的功能是:若直接位址的內容為“1”則轉移,並且同時將該位清0,否則順序執行。這條指令若是對I/O口某壹位操作,也具有“讀-改-寫”功能。

  • 上一篇:cdkey什麽意思
  • 下一篇:求好看的動作片.比如導火線之類的電影.最好是國語的.
  • copyright 2024編程學習大全網