『壹』 MCS-51系列單片機指令系統共有111條指令,誰能具體的列出這111條指令
MCS-51數據傳送指令
數據傳送指令共有29條,數據傳送指令一般的操作是把源操作數傳送到目的操作數,指令執行完成後,源操作數不變,目的操作數等於源操作數。如果要求在進行數據傳送時,目的操作數不丟失,則不能用直接傳送指令,而採用交換型的數據傳送指令,數據傳送指令不影響標志C,AC和OV,但可能會對奇偶標志P有影響。
[1]. 以累加器A為目的操作數類指令(4條)
這4條指令的作用是把源操作數指向的內容送到累加器A。有直接、立即數、寄存器和寄存器間接定址方式:
MOV A,data ;(data)→(A) 直接單元地址中的內容送到累加器A
MOV A,#data ;#data→(A) 立即數送到累加器A中
MOV A,Rn ;(Rn)→(A) Rn中的內容送到累加器A中
MOV A,@Ri ;((Ri))→(A) Ri內容指向的地址單元中的內容送到累加器A
[2]. 以寄存器Rn為目的操作數的指令(3條)
這3條指令的功能是把源操作數指定的內容送到所選定的工作寄存器Rn中。有直接、立即和寄存器定址方式:
MOV Rn,data ;(data)→(Rn) 直接定址單元中的內容送到寄存器Rn中
MOV Rn,#data ;#data→(Rn) 立即數直接送到寄存器Rn中
MOV Rn,A ;(A)→(Rn) 累加器A中的內容送到寄存器Rn中
[3]. 以直接地址為目的操作數的指令(5條)
這組指令的功能是把源操作數指定的內容送到由直接地址data所選定的片內RAM中。有直接、立即、寄存器和寄存器間接4種定址方式:
MOV data,data ;(data)→(data) 直接地址單元中的內容送到直接地址單元
MOV data,#data ;#data→(data) 立即數送到直接地址單元
MOV data,A ;(A)→(data) 累加器A中的內容送到直接地址單元
MOV data,Rn ;(Rn)→(data) 寄存器Rn中的內容送到直接地址單元
MOV data,@Ri ;((Ri))→(data) 寄存器Ri中的內容指定的地址單元中數據送到直接地址單元
[4]. 以間接地址為目的操作數的指令(3條)
這組指令的功能是把源操作數指定的內容送到以Ri中的內容為地址的片內RAM中。有直接、立即和寄存器3種定址方式:
MOV @Ri,data ;(data)→((Ri)) 直接地址單元中的內容送到以Ri中的內容為地址的RAM單元
MOV @Ri,#data ;#data→((Ri)) 立即數送到以Ri中的內容為地址的RAM單元
MOV @Ri,A ;(A)→((Ri)) 累加器A中的內容送到以Ri中的內容為地址的RAM單元
[5]. 查表指令(2條)
這組指令的功能是對存放於程序存儲器中的數據表格進行查找傳送,使用變址定址方式:
MOVC A,@A+DPTR ;((A))+(DPTR)→(A) 表格地址單元中的內容送到累加器A中
MOVC A,@A+PC ;((PC))+1→(A),((A))+(PC)→(A) 表格地址單元中的內容送到累加器A中
[6]. 累加器A與片外數據存儲器RAM傳送指令(4條)
這4條指令的作用是累加器A與片外RAM間的數據傳送。使用寄存器定址方式:
MOVX @DPTR,A ;(A)→((DPTR)) 累加器中的內容送到數據指針指向片外RAM地址中
MOVX A, @DPTR ;((DPTR))→(A) 數據指針指向片外RAM地址中的內容送到累加器A中
MOVX A, @Ri ;((Ri))→(A) 寄存器Ri指向片外RAM地址中的內容送到累加器A中
MOVX @Ri,A ;(A)→((Ri)) 累加器中的內容送到寄存器Ri指向片外RAM地址中
[7]. 堆棧操作類指令(2條)
這4類指令的作用是把直接定址單元的內容傳送到堆棧指針SP所指的單元中,以及把SP所指單元的內容送到直接定址單元中。這類指令只有兩條,下述的第一條常稱為入棧操作指令,第二條稱為出棧操作指令。需要指出的是,單片機開機復位後,(SP)默認為07H,但一般都需要重新賦值,設置新的SP首址。入棧的第一個數據必須存放於SP+1所指存儲單元,故實際的堆棧底為SP+1所指的存儲單元。
PUSH data ;(SP)+1→(SP),(data)→(SP) 堆棧指針首先加1,直接定址單元中的數據送到堆棧指針SP所指的單元中
POP data ;(SP)→(data)(SP)-1→(SP), 堆棧指針SP所指的單元數據送到直接定址單元中,堆棧指針SP再進行減1操作
[8]. 交換指令(5條)
這5條指令的功能是把累加器A中的內容與源操作數所指的數據相互交換。
XCH A,Rn ;(A)←→(Rn)累加器與工作寄存器Rn中的內容互換
XCH A,@Ri ;(A)←→((Ri))累加器與工作寄存器Ri所指的存儲單元中的內容互換
XCH A,data ;(A)←→(data)累加器與直接地址單元中的內容互換
XCHD A,@Ri ;(A 3-0 )←→((Ri) 3-0 )累加器與工作寄存器Ri所指的存儲單元中的內容低半位元組互換
SWAP A ;(A 3-0 )←→(A 7-4 )累加器中的內容高低半位元組互換
[9]. 16位數據傳送指令(1條)
這條指令的功能是把16位常數送入數據指針寄存器。
MOV DPTR,#data16 ;#dataH→(DPH),#dataL→(DPL)16位常數的高8位送到DPH,低8位送到DPL
MCS-51算術運算指令
算術運算指令共有24條,算術運算主要是執行加、減、乘、除法四則運算。另外MCS-51指令系統中有相當一部分是進行加、減1操作,BCD碼的運算和調整,我們都歸類為運算指令。雖然MCS-51單片機的算術邏輯單元ALU僅能對8位無符號整數進行運算,但利用進位標志C,則可進行多位元組無符號整數的運算。同時利用溢出標志,還可以對帶符號數進行補碼運算。需要指出的是,除加、減1指令外,這類指令大多數都會對PSW(程序狀態字)有影響。這在使用中應特別注意。
[1]. 加法指令(4條)
這4條指令的作用是把立即數,直接地址、工作寄存器及間接地址內容與累加器A的內容相加,運算結果存在A中。
ADD A,#data ;(A)+#data→(A) 累加器A中的內容與立即數#data相加,結果存在A中
ADD A,data ;(A)+(data)→(A) 累加器A中的內容與直接地址單元中的內容相加,結果存在A中
ADD A,Rn ;(A)+(Rn)→(A) 累加器A中的內容與工作寄存器Rn中的內容相加,結果存在A中
ADD A,@Ri ;(A)+((Ri))→(A) 累加器A中的內容與工作寄存器Ri所指向地址單元中的內容相加,結果存在A中
[2]. 帶進位加法指令(4條)
這4條指令除與[1]功能相同外,在進行加法運算時還需考慮進位問題。
ADDC A,data ;(A)+(data)+(C)→(A) 累加器A中的內容與直接地址單元的內容連同進位位相加,結果存在A中
ADDC A,#data ;(A)+#data +(C)→(A) 累加器A中的內容與立即數連同進位位相加,結果存在A中
ADDC A,Rn ;(A)+Rn+(C)→(A) 累加器A中的內容與工作寄存器Rn中的內容、連同進位位相加,結果存在A中
ADDC A,@Ri ;(A)+((Ri))+(C)→(A) 累加器A中的內容與工作寄存器Ri指向地址單元中的內容、連同進位位相加,結果存在A中
[3]. 帶借位減法指令(4條)
這組指令包含立即數、直接地址、間接地址及工作寄存器與累加器A連同借位位C內容相減,結果送回累加器A中。
這里我們對借位位C的狀態作出說明,在進行減法運算中,CY=1表示有借位,CY=0則無借位。OV=1聲明帶符號數相減時,從一個正數減去一個負數結果為負數,或者從一個負數中減去一個正數結果為正數的錯誤情況。在進行減法運算前,如果不知道借位標志位C的狀態,則應先對CY進行清零操作。
SUBB A,data ;(A)-(data) - (C)→(A) 累加器A中的內容與直接地址單元中的內容、連同借位位相減,結果存在A中
SUBB A,#data ;(A)-#data -(C)→(A) 累加器A中的內容與立即數、連同借位位相減,結果存在A中
SUBB A,Rn ;(A)-(Rn) -(C)→(A) 累加器A中的內容與工作寄存器中的內容、連同借位位相減,結果存在A中
SUBB A,@Ri ;(A)-((Ri)) -(C)→(A) 累加器A中的內容與工作寄存器Ri指向的地址單元中的內容、連同借位位相減,結果存在A中
[4]. 乘法指令(1條)
這個指令的作用是把累加器A和寄存器B中的8位無符號數相乘,所得到的是16位乘積,這個結果低8位存在累加器A,而高8位存在寄存器B中。如果OV=1,說明乘積大於FFH,否則OV=0,但進位標志位CY總是等於0。
MUL AB ;(A)×(B)→(A)和(B) 累加器A中的內容與寄存器B中的內容相乘,結果存在A、B中
[5]. 除法指令(1條)
這個指令的作用是把累加器A的8位無符號整數除以寄存器B中的8位無符號整數,所得到的商存在累加器A,而余數存在寄存器B中。除法運算總是使OV和進位標志位CY等於0。如果OV=1,表明寄存器B中的內容為00H,那麼執行結果為不確定值,表示除法有溢出。
DIV AB ;(A)÷(B)→(A)和(B) 累加器A中的內容除以寄存器B中的內容,所得到的商存在累加器A,而余數存在寄存器B中。
[6]. 加1指令(5條)
這5條指令的的功能均為原寄存器的內容加1,結果送回原寄存器。上述提到,加1指令不會對任何標志有影響,如果原寄存器的內容為FFH,執行加1後,結果就會是00H。這組指令共有直接、寄存器、寄存器減間址等定址方式:
INC A ;(A)+1→(A) 累加器A中的內容加1,結果存在A中
INC data ;(data)+1→(data) 直接地址單元中的內容加1,結果送回原地址單元中
INC @Ri ;((Ri))+1→((Ri)) 寄存器的內容指向的地址單元中的內容加1,結果送回原地址單元中
INC Rn ;(Rn)+1→(Rn)寄存器Rn的內容加1,結果送回原地址單元中
INC DPTR ;(DPTR)+1→(DPTR)數據指針的內容加1,結果送回數據指針中
在INC data這條指令中,如果直接地址是I/O,其功能是先讀入I/O鎖存器的內容,然後在CPU進行加1操作,再輸出到I/O上,這就是「讀—修改—寫」操作。
[7]. 減1指令(4條)
這組指令的作用是把所指的寄存器內容減1,結果送回原寄存器,若原寄存器的內容為00H,減1後即為FFH,運算結果不影響任何標志位,這組指令共有直接、寄存器、寄存器間址等定址方式,當直接地址是I/O口鎖存器時,「讀—修改—寫」操作與加1指令類似。
DEC A ;(A)-1→(A)累加器A中的內容減1,結果送回累加器A中
DEC data ;(data)-1→(data)直接地址單元中的內容減1,結果送回直接地址單元中
DEC @Ri ;((Ri))-1→((Ri))寄存器Ri指向的地址單元中的內容減1,結果送回原地址單元中
DEC Rn ;(Rn)-1→(Rn)寄存器Rn中的內容減1,結果送回寄存器Rn中
[8]. 十進制調整指令(1條)
在進行BCD碼運算時,這條指令總是跟在ADD或ADDC指令之後,其功能是將執行加法運算後存於累加器A中的結果進行調整和修正。
DA A
MCS-51邏輯運算及移位指令
邏輯運算和移位指令共有25條,有與、或、異或、求反、左右移位、清0等邏輯操作,有直接、寄存器和寄存器間址等定址方式。這類指令一般不影響程序狀態字(PSW)標志。
[1]. 循環移位指令(4條)
這4條指令的作用是將累加器中的內容循環左或右移一位,後兩條指令是連同進位位CY一起移位。
RL A ;累加器A中的內容左移一位
RR A ;累加器A中的內容右移一位
RLC A ;累加器A中的內容連同進位位CY左移一位
RRC A ;累加器A中的內容連同進位位CY右移一位
[2]. 累加器半位元組交換指令(1條)
這條指令是將累加器中的內容高低半位元組互換,這在上一節中內容已有介紹。
SWAP A ; 累加器中的內容高低半位元組互換
[3]. 求反指令(1條)
這條指令將累加器中的內容按位取反。
CPL A ; 累加器中的內容按位取反
[4]. 清零指令(1條)
這條指令將累加器中的內容清0。
CLR A ; 0→(A),累加器中的內容清0
[5]. 邏輯與操作指令(6條)
這組指令的作用是將兩個單元中的內容執行邏輯與操作。如果直接地址是I/O地址,則為「讀—修改—寫」操作。
ANL A,data ;累加器A中的內容和直接地址單元中的內容執行與邏輯操作。結果存在寄存器A中。
ANL data,#data ;直接地址單元中的內容和立即數執行與邏輯操作。結果存在直接地址單元中。
ANL A,#data ;累加器A的內容和立即數執行與邏輯操作。結果存在累加器A中。
ANL A,Rn ;累加器A的內容和寄存器Rn中的內容執行與邏輯操作。結果存在累加器A中。
ANL data,A ;直接地址單元中的內容和累加器A的內容執行與邏輯操作。結果存在直接地址單元中。
ANL A,@Ri ;累加器A的內容和工作寄存器Ri指向的地址單元中的內容執行與邏輯操作。結果存在累加器A中。
[6]. 邏輯或操作指令(6條)
這組指令的作用是將兩個單元中的內容執行邏輯或操作。如果直接地址是I/O地址,則為「讀—修改—寫」操作。
ORL A,data ;累加器A中的內容和直接地址單元中的內容執行邏輯或操作。結果存在寄存器A中。
ORL data,#data ;直接地址單元中的內容和立即數執行邏輯或操作。結果存在直接地址單元中。
ORL A,#data ;累加器A的內容和立即數執行邏輯或操作。結果存在累加器A中。
ORL A,Rn ;累加器A的內容和寄存器Rn中的內容執行邏輯或操作。結果存在累加器A中。
ORL data,A ;直接地址單元中的內容和累加器A的內容執行邏輯或操作。結果存在直接地址單元中。
ORL A,@Ri ;累加器A的內容和工作寄存器Ri指向的地址單元中的內容執行邏輯或操作。結果存在累加器A中。
[7]. 邏輯異或操作指令(6條)
這組指令的作用是將兩個單元中的內容執行邏輯異或操作。如果直接地址是I/O地址,則為「讀—修改—寫」操作。
XRL A,data ;累加器A中的內容和直接地址單元中的內容執行邏輯異或操作。結果存在寄存器A中。
XRL data,#data ;直接地址單元中的內容和立即數執行邏輯異或操作。結果存在直接地址單元中。
XRL A,#data ;累加器A的內容和立即數執行邏輯異或操作。結果存在累加器A中。
XRL A,Rn ;累加器A的內容和寄存器Rn中的內容執行邏輯異或操作。結果存在累加器A中。
XRL data,A ;直接地址單元中的內容和累加器A的內容執行邏輯異或操作。結果存在直接地址單元中。
XRL A,@Ri ;累加器A的內容和工作寄存器Ri指向的地址單元中的內容執行邏輯異或操作。結果存在累加器A中。
MCS-51控制轉移指令
控制轉移指令用於控製程序的流向,所控制的范圍即為程序存儲器區間,MCS-51系列單片機的控制轉移指令相對豐富,有可對64kB程序空間地址單元進行訪問的長調用、長轉移指令,也有可對2kB位元組進行訪問的絕對調用和絕對轉移指令,還有在一頁范圍內短相對轉移及其它無條件轉移指令,這些指令的執行一般都不會對標志位有影響。
[1]. 無條件轉移指令(4條)
這組指令執行完後,程序就會無條件轉移到指令所指向的地址上去。長轉移指令訪問的程序存儲器空間為16地址64kB,絕對轉移指令訪問的程序存儲器空間為11位地址2kB空間。
LJMP addr16 ;addr16→(PC),給程序計數器賦予新值(16位地址)
AJMP addr11 ;(PC)+2→(PC),addr11→(PC 10-0 )程序計數器賦予新值(11位地址),(PC 15-11 )不改變
SJMP rel ;(PC)+ 2 + rel→(PC)當前程序計數器先加上2再加上偏移量給程序計數器賦予新值
JMP @A+DPTR ;(A)+ (DPTR)→(PC),累加器所指向地址單元的值加上數據指針的值給程序計數器賦予新值
[2]. 條件轉移指令(8條)
程序可利用這組豐富的指令根據當前的條件進行判斷,看是否滿足某種特定的條件,從而控製程序的轉向。
JZ rel ; A=0,(PC)+ 2 + rel→(PC),累加器中的內容為0,則轉移到偏移量所指向的地址,否則程序往下執行
JNZ rel ; A≠0,(PC)+ 2 + rel→(PC),累加器中的內容不為0,則轉移到偏移量所指向的地址,否則程序往下執行
CJNE A, data, rel ; A≠(data),(PC)+ 3 + rel→(PC),累加器中的內容不等於直接地址單元的內容,則轉移到偏移量所指向的地址,否則程序往下執行
CJNE A, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),累加器中的內容不等於立即數,則轉移到偏移量所指向的地址,否則程序往下執行
CJNE Rn, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Rn中的內容不等於立即數,則轉移到偏移量所指向的地址,否則程序往下執行
CJNE @Ri, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Ri指向地址單元中的內容不等於立即數,則轉移到偏移量所指向的地址,否則程序往下執行
DJNZ Rn, rel ; (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC)工作寄存器Rn減1不等於0,則轉移到偏移量所指向的地址,否則程序往下執行
DJNZ data, rel ; (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC)直接地址單元中的內容減1不等於0,則轉移到偏移量所指向的地址,否則程序往下執行
[3]. 子程序調用指令(1條)
子程序是為了便於程序編寫,減少那些需反復執行的程序佔用多餘的地址空間而引入的程序分支,從而有了主程序和子程序的概念,需要反復執行的一些程序,我們在編程時一般都把它們編寫成子程序,當需要用它們時,就用一個調用命令使程序按調用的地址去執行,這就需要子程序的調用指令和返回指令。
LCALL addr16 ; 長調用指令,可在64kB空間調用子程序。此時(PC)+ 3→(PC),(SP)+ 1→(SP),(PC 7-0 )→(SP),(SP)+ 1→(SP),(PC 15-8 )→(SP),addr16→(PC),即分別從堆棧中彈出調用子程序時壓入的返回地址
ACALL addr11 ; 絕對調用指令,可在2kB空間調用子程序,此時(PC)+ 2→(PC),(SP)+ 1→(SP),(PC 7-0 )→(SP),(SP)+ 1→(SP),(PC 15-8 )→(SP),addr11→(PC 10-0 )
RET ; 子程序返回指令。此時(SP)→(PC 15-8 ),(SP)- 1→(SP),(SP)→(PC 7-0 ),(SP)- 1→(SP)
RETI ; 中斷返回指令,除具有RET功能外,還具有恢復中斷邏輯的功能,需注意的是,RETI指令不能用RET代替
[4]. 空操作指令(1條)
這條指令將累加器中的內容清0。
NOP ; 這條指令除了使PC加1,消耗一個機器周期外,沒有執行任何操作。可用於短時間的延時
MCS-51布爾變數操作指令
布爾處理功能是MCS-51系列單片機的一個重要特徵,這是出於實際應用需要而設置的。布爾變數也即開關變數,它是以位(bit)為單位進行操作的。
在物理結構上,MCS-51單片機有一個布爾處理機,它以進位標志做為累加位,以內部RAM可定址的128個為存儲位。
既然有布爾處理機功能,所以也就有相應的布爾操作指令集,下面我們分別談論。
[1]. 位傳送指令(2條)
位傳送指令就是可定址位與累加位CY之間的傳送,指令有兩條。
MOV C,bit ;bit→CY,某位數據送CY
MOV bit,C ;CY→bit,CY數據送某位
[2]. 位置位復位指令(4條)
這些指令對CY及可定址位進行置位或復位操作,共有四條指令。
CLR C ; 0→CY,清CY
CLR bit ; 0→bit,清某一位
SETB C ; 1→CY,置位CY
SETB bit ; 1→bit,置位某一位
[3]. 位運算指令(6條)
位運算都是邏輯運算,有與、或、非三種指令,共六條。
ANL C,bit ;(CY)∧(bit)→CY
ANL C,/bit ;(CY)∧( )→CY
ORL C,bit ;(CY)∨(bit)→CY
ORL C,/bit ;(CY)∧( )→CY
CPL C ;( )→CY
CPL bit ;( )→bir
[4]. 位控制轉移指令(5)
位控制轉移指令是以位的狀態作為實現程序轉移的判斷條件,介紹如下:
JC rel ; (CY)=1轉移,(PC)+2+rel→PC,否則程序往下執行,(PC)+2→PC。
JNC rel ; (CY)=0轉移,(PC)+2+rel→PC,否則程序往下執行,(PC)+2→PC。
JB bit, rel ; 位狀態為1轉移。
JNB bit, rel ; 位狀態為0轉移。
JBC bit, rel ; 位狀態為1轉移,並使該位清「0」。
後三條指令都是三位元組指令,如果條件滿足,(PC)+3+rel→PC,否則程序往下執行,(PC)+3→PC
『貳』 51單片機共有多少指令
MCS-51單片機的指令集
1、數據傳送類指令
助記符 功能說明 位元組數 振盪周期
MOV A,Rn 寄存器內容送入累加器 1 12
MOV A,direct 直接地址單元中的數據送入累加器 2 12
MOV A,@Ri 間接RAM中的數據送入累加器 1 12
MOV A,#data8 8位立即數送入累加器 2 12
MOV Rn,A 累加器內容送入寄存器 1 12
MOV Rn,direct 直接地址單元中的數據送入寄存器 2 24
MOV Rn,#data8 8位立即數送入寄存器 2 12
MOV direct,A 累加器內容送入直接地址單元 2 12
MOV direct,Rn 寄存器內容送入直接地址單元 2 24
MOV direct,direct 直接地址單元中的數據送入直接地址單元 3 24
MOV direct,@Ri 間接RAM中的數據送入直接地址單元 2 24
MOV direct,#data8 8位立即數送入直接地址單元 3 24
MOV @Ri,A 累加器內容送入間接RAM單元 1 12
MOV @Ri,direct 直接地址單元中的數據送入間接RAM單元 2 24
MOV @Ri,#data8 8位立即數送入間接RAM單元 2 12
MOV DPTR,#data16 16位立即數地址送入地址寄存器 3 24
MOVC A,@A+DPTR 以DPTR為基地址變址定址單元中的數據送入累加器 1 24
MOVC A,@A+PC 以PC為基地址變址定址單元中的數據送入累加器 1 24
MOVX A,@Ri 外部RAM(8位地址)送入累加器 1 24
MOVX A,@DPTR 外部RAM(16位地址)送入累加器 1 24
MOVX @Ri,A 累加器送入外部RAM(8位地址) 1 24
MOVX @DPTR,A 累加器送入外部RAM(16位地址) 1 24
PUSH direct 直接地址單元中的數據壓入堆棧 2 24
POP DIRECT 堆棧中的數據彈出到直接地址單元 2 24
XCH A,Rn 寄存器與累加器交換 1 12
XCH A,direct 直接地址單元與累加器交換 2 12
XCH A,@Ri 間接RAM與累加器交換 1 12
XCHD A,@Ri 間接RAM與累加器進行低半位元組交換 1 12
2、算術操作類指令
助記符 功能說明 位元組數 振盪周期
ADD A,Rn 寄存器內容加到累加器 1 12
ADD A,direct 直接地址單元加到累加器 2 12
ADD A,@Ri 間接RAM內容加到累加器 1 12
ADD A,#data8 8位立即數加到累加器 2 12
ADDC A,Rn 寄存器內容帶進位加到累加器 1 12
ADDC A,dirct 直接地址單元帶進位加到累加器 2 12
ADDC A,@Ri 間接RAM內容帶進位加到累加器 1 12
ADDC A,#data8 8位立即數帶進位加到累加器 2 12
SUBB A,Rn 累加器帶借位減寄存器內容 1 12
SUBB A,dirct 累加器帶借位減直接地址單元 2 12
SUBB A,@Ri 累加器帶借位減間接RAM內容 1 12
SUBB A,#data8 累加器帶借位減8位立即數 2 12
INC A 累加器加1 1 12
INC Rn 寄存器加1 1 12
INC direct 直接地址單元內容加1 2 12
INC @Ri 間接RAM內容加1 1 12
INC DPTR DPTR加1 1 24
DEC A 累加器減1 1 12
DEC Rn 寄存器減1 1 12
DEC direct 直接地址單元內容減1 2 12
DEC @Ri 間接RAM內容減1 1 12
MUL A,B A乘以B 1 48
DIV A,B A除以B 1 48
DA A 累加器進行十進制轉換 1 12
3、邏輯操作類指令
助記符 功能說明 位元組數 振盪周期
ANL A,Rn 累加器與寄存器相「與」 1 12
ANL A,direct 累加器與直接地址單元相「與」 2 12
ANL A,@Ri 累加器與間接RAM內容相「與」 1 12
ANL A,#data8 累加器與8位立即數相「與」 2 12
ANL direct,A 直接地址單元與累加器相「與」 2 12
ANL direct,#data8 直接地址單元與8位立即數相「與」 3 24
ORL A,Rn 累加器與寄存器相「或」 1 12
ORL A,direct 累加器與直接地址單元相「或」 2 12
ORL A,@Ri 累加器與間接RAM內容相「或」 1 12
ORL A,#data8 累加器與8位立即數相「或」 2 12
ORL direct,A 直接地址單元與累加器相「或」 2 12
ORL direct,#data8 直接地址單元與8位立即數相「或」 3 24
XRL A,Rn 累加器與寄存器相「異或」 1 12
XRL A,direct 累加器與直接地址單元相「異或」 2 12
XRL A,@Ri 累加器與間接RAM內容相「異或」 1 12
XRL A,#data8 累加器與8位立即數相「異或」 2 12
XRL direct,A 直接地址單元與累加器相「異或」 2 12
XRL direct,#data8 直接地址單元與8位立即數相「異或」 3 24
CLR A 累加器清0 1 12
CPL A 累加器求反 1 12
RL A 累加器循環左移 1 12
RLC A 累加器帶進位循環左移 1 12
RR A 累加器循環右移 1 12
RRC A 累加器帶進位循環右移 1 12
SWAP A 累加器半位元組交換 1 12
4、控制轉移類指令
助記符 功能說明 位元組數 振盪周期
ACALL addr11 絕對短調用子程序 2 24
LACLL addr16 長調用子程序 3 24
RET 子程序返回 1 24
RETI 中斷返回 1 24
AJMP addr11 絕對短轉移 2 24
LJMP addr16 長轉移 3 24
SJMP rel 相對轉移 2 24
JMP @A+DPTR 相對於DPTR的間接轉移 1 24
JZ rel 累加器為零轉移 2 24
JNZ rel 累加器非零轉移 2 24
CJNE A,direct,rel 累加器與直接地址單元比較,不等則轉移 3 24
CJNE A,#data8,rel 累加器與8位立即數比較,不等則轉移 3 24
CJNE Rn,#data8,rel 寄存器與8位立即數比較,不等則轉移 3 24
(相等則執行本指令的下一條)
CJNE @Ri,#data8,rel 間接RAM單元,不等則轉移 3 24
(但有時還想得知兩數比較之後哪個大,哪個小,
本條指令也具有這樣的功能,如果兩數不相等,
則CPU還會反映出哪個數大,哪個數小,
這是用CY(進位標志位)來實現的。
如果左邊的數(A,Rn,@Ri)大或者等於右邊的數(direct,#date8),則CY=0;否則CY=1)
DJNZ Rn,rel 寄存器減1,非零轉移 3 24
DJNZ direct,rel 直接地址單元減1,非零轉移 3 24
NOP 空操作 1 12
控制轉移指令共有17條,可分為「無條件轉移指令」 「有條件轉移指令」 「子程序調用指令」 及 「返回指令」。
5、布爾變數操作類指令
助記符 功能說明 位元組數 振盪周期
CLR C 清進位位 1 12
CLR bit 清直接地址位 2 12
SETB C 置進位位 1 12
SETB bit 置直接地址位 2 12
CPL C 進位位求反 1 12
CPL bit 直接地址位求反 2 12
ANL C,bit 進位位和直接地址位相「與」 2 24
ANL C,/bit 進位位和直接地址位的反碼相「與」 2 24
ORL C,bit 進位位和直接地址位相「或」 2 24
ORL C,/bit 進位位和直接地址位的反碼相「或」 2 24
MOV C,bit 直接地址位送入進位位 2 12
MOV bit,C 進位位送入直接地址位 2 24
JC rel 進位位為1則轉移(CY=O不轉移,=1轉移) 2 24
JNC rel 進位位為0則轉移(和上面相反) 2 24
JB bit,rel 直接地址位為1則轉移 3 24
JNB bit,rel 直接地址位為0則轉移 3 24
JBC bit,rel 直接地址位為1則轉移,該位清零 3 24
偽指令
助記符 功能說明
ORG 設置程序起始地址
END 標志源代碼結束
EQU 定義常數
SET 定義整型數
DATA 給位元組類型符號定值
BYTE 給位元組類型符號定值
WROD 給字類型符號定值
BIT 給位地址取名
ALTNAME 用自定義名取代保留字
DB 給一塊連續的存儲區裝載位元組型數據
DW 給一塊連續的存儲區裝載字型數據
DS 預留一個連續的存儲區或裝入指定位元組。
INCLUDE 將一個源文件插入程序中
TITLE 列表文件中加入標題行
NOLIST 匯編時不產生列表文件
NOCODE 條件匯編時,條件為假的不產生清單
『叄』 單片機的一條指令: SJMP $ 是啥意思
SJMP $意味著跳轉到該指令的開頭以開始執行,因此它變為循環執行,就地跳轉,通常用於等待中斷。
但是本指令也不宜濫用。這是一條死循環指令,如果系統的中斷是開放的,那麼SJMP $指令實際上是在等待中斷,當有中斷申請後,CPU 轉至執行中斷服務程序。
中斷返回時,仍然返回到這條死循環指令,繼續等待中斷,而不是返回到該指令的下一條指令。這是因為執行SJMP $後,PC 仍指向這條指令,中斷的斷點就是[3]這條指令的首位元組地址。
1)在51中,與外部存儲器RAM打交道的只可以是A累加器。所有需要送入外部RAM的數據必需要通過A送去,而所有要讀入的外部RAM中的數據也必需通過A讀入。
在此我們可以看出內外部RAM的區別了,內部RAM間可以直接進行數據的傳遞,而外部則不行,比如,要將外部RAM中某一單元(設為0100H單元的數據)送入另一個單元(設為0200H單元),也必須先將0100H單元中的內容讀入A,然後再送到0200H單元中去。
2)要讀或寫外部的RAM,當然也必須要知道RAM的地址,在後兩條指令中,地址是被直接放在DPTR中的。而前兩條指令,由於Ri(即R0或R1)只是一個8位的寄存器,所以只提供低8位地址。因為有時擴展的外部RAM的數量比較少,少於或等於256個,就只需要提供8位地址就夠了。
3)使用時應當首先將要讀或寫的地址送入DPTR或Ri中,然後再用讀寫命令。
『肆』 MCS-51設有4個8位並行埠,在實際應用中8位數據信息由哪個埠傳送16位地址線怎樣形成P3口有何功能
實際意義上真正的數據埠只有P1口。
單片機指令系統的概述:總共111條指令;(單位元組指令49條,雙位元組指令45條,三位元組指令17條)(一個機器周期、12個時鍾震盪周期指令64條,兩個機器周期、24個時鍾震盪周期指令45條、乘除兩條指令位4個機器周期)。
(12MHZ晶振:機器周期位1us);51指令不區分大小寫;指令格式:操作碼+操作數。
P3口的功能:P3.0(TXD串列口數據發送口);P3.1(RXD串列口數據接收端);P3.2(/INT0外部中斷0接入端);P3.3(/INT1外部中斷1接入端);P3.4(T0計數器0入口段);P3.5(T1計數器1入口端);P3.6(RD外不允許讀);P3.7(/WR外不允許寫)。
單片機的特點:集成度高,體積小,抗干擾能力強,可靠性高。開發性能好,開發周期短,控制功能強。低功耗、低電壓、具有掉電保護功能,廣泛應用於各類智能儀器儀表中。通用性和靈活性好。具有良好的性能價格比。
系統復位後,PC的內容會被自動賦為0000H,這表明復位後CPU將程序存儲器的0000H地址處的指令開始運行。
(4)單片機111條指令擴展閱讀:
16位的專用寄存器,其中存放著下一條要執行的指令的首地址,即PC內容決定著程序的運行軌跡。當CPU要取指令時,PC的內容就會出現在地址匯流排上;取出指令後,PC內容可自動加1,以保證程序順序執行。
單片機的體積比較小,內部晶元作為計算機系統,其結構簡單,但是功能完善,使用起來十分方便,可以模塊化應用。
單片機有著較高的集成度,可靠性比較強,即使單片機處於長時間的工作也不會存在故障問題。單片機在應用時低電壓、低能耗,是人們在日常生活中的首要選擇,為生產與研發提供便利。
『伍』 單片機編程中都有什麼指令,,代表什麼意思
不知道你指的是哪一類單片機,最常用的89C51系列單片機匯編語言共有111條指令,可分為5類:
[1].數據傳送類指令(共29條)
[2].算數運算類指令(共24條)
[3].邏輯運算及移位類指令(共24條)
[4].控制轉移類指令(共17條)
[5].布爾變數操作類指令(共17條)
jz 指令屬於第4類"控制轉移類"里的條件轉移指令,具體格式和作用是:
JZ rel ; A=0,(PC)+ 2 + rel→(PC),累加器中的內容為0,
則轉移到偏移量所指向的地址,否則程序往下執行。
jb 是屬於第5類"布爾變數操作類"指令,其格式和作用如下:
JB bit, rel ; 位狀態為1轉移。
『陸』 SST89E58單片機共有多少種指令
51單片機有111條指令,雖然SST89E58特殊功能寄存器比普通51單片機多,但其指令不一定多,一條指令實際上是很多條,例如 MOV R1,#95 和MOV R1,#100隻能算一條指令,只不過是操作數不同。