Ⅰ 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 條件匯編時,條件為假的不產生清單
Ⅱ 51單片機指令有哪些啊
MCS-51共有111條指令,可分為5類:
[1].數據傳送類指令(共29條)
[2].算數運算類指令(共24條)
[3].邏輯運算及移位類指令(共24條)
[4].控制轉移類指令(共17條)
[5].布爾變數操作類指令(共17條)
Ⅲ 8051單片機共有多少條指令這些指令按照功能分可分為幾類分別為多少條這些指令定址方式有哪幾種
果然這年頭懂匯編的人不多了啊。
8051單片機共有111條指令,按指令功能分,可分為
數據傳送類29條,算術運算類24條,邏輯運算類24條,位操作類12條,控制轉移類22條。
指令定址方式共7種,分別是:立即數定址,直接定址,寄存器定址,寄存器間接定址,變址定址,相對定址,位定址。
標准格式:
標號:操作碼
[(目的操作數),(源操作數)];注釋
注意:命令格式中所有的標點符號均為英文數字半形條件下的符號。
Ⅳ 請教8051匯編指令
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
Ⅳ 8051指令集 STC-Y5 什麼意思
這是STC公司自己設計單片機指令集,因為是1T單片機,指令周期縮短了,執行指令更快了。但是,不同系列的STC單片機的指令周期長短有所不同,STC-Y5相當於版本號。版本越高,指令周期越短,執行指令越快。
Ⅵ AT89S51單片機常用的指令究竟有多少條
都會用到,沒有無用的指令,共111條,很多指令其實都類似的,比如MOV Rn(n=0~7),A(#data,Reg等),就佔用了幾十條,呵呵。
當然下載到單片機ROM中數據是以二進制存儲的,你不要糾結十六進制的問題,十六進制只是一種表述方式,便於你閱讀和識別,比如A就是1010,F就是1111,所以說是十六進制也沒什麼不對的地方。
Ⅶ 51單片機用的是什麼指令集RISC還是CISC具體點是不是X86的
用的是RISC,精簡指令集。CISC是復雜型指令集,這個現在用的少。是x86的。望採納,謝謝。
Ⅷ 8051單片機的詳細資料
MCS-51單片機的引腳描述及片外匯流排結構
一、晶元的引腳描述
HMOS製造工藝的MCS-51單片機都採用40引腳的直插封裝(DIP方式),製造工藝為CHMOS的80C51/80C31晶元除採用DIP封裝方式外,還採用方型封裝工藝,引腳排列如圖。其中方型封裝的CHMOS晶元有44隻引腳,但其中4隻引腳(標有NC的引腳1、12、23、34)是不使用的。在以後的討論中,除有特殊說明以外,所述內容皆適用於CHMOS晶元。
如圖,是MCS-51的邏輯符號圖。在單片機的40條引腳中有2條專用於主電源的引腳,2條外接晶體的引腳,4條控制或與其它電源復用的引腳,32條輸入/輸出(I/O)引腳。
下面按其引腳功能分為四部分敘述這40條引腳的功能。
1、主電源引腳VCC和VSS
VCC——(40腳)接+5V電壓;
VSS——(20腳)接地。
2、外接晶體引腳XTAL1和XTAL2
XTAL1(19腳)接外部晶體的一個引腳。在單片機內部,它是一個反相放大器的輸入端,這個放大器構成了片內振盪器。當採用外部振盪器時,對HMOS單片機,此引腳應接地;對CHMOS單片機,此引腳作為驅動端。
XTAL2(18腳)接外晶體的另一端。在單片機內部,接至上述振盪器的反相放大器的輸出端。採用外部振盪器時,對HMOS單片機,該引腳接外部振盪器的信號,即把外部振盪器的信號直接接到內部時鍾發生器的輸入端;對XHMOS,此引腳應懸浮。
3、控制或與其它電源復用引腳RST/VPD、ALE/PROG、PSEN和EA/VPP
①RST/VPD(9腳)當振盪器運行時,在此腳上出現兩個機器周期的高電平將使單片機復位。推薦在此引腳與VSS引腳之間連接一個約8.2k的下拉電阻,與VCC引腳之間連接一個約10μF的電容,以保證可靠地復位。
VCC掉電期間,此引腳可接上備用電源,以保證內部RAM的數據不丟失。當VCC主電源下掉到低於規定的電平,而VPD在其規定的電壓范圍(5±0.5V)內,VPD就向內部RAM提供備用電源。
②ALE/PROG(30腳):當訪問外部存貯器時,ALE(允許地址鎖存)的輸出用於鎖存地址的低位位元組。即使不訪問外部存儲器,ALE端仍以不變的頻率周期性地出現正脈沖信號,此頻率為振盪器頻率的1/6。因此,它可用作對外輸出的時鍾,或用於定時目的。然而要注意的是,每當訪問外部數據存儲器時,將跳過一個ALE脈沖。ALE端可以驅動(吸收或輸出電流)8個LS型的TTL輸入電路。
對於EPROM單片機(如8751),在EPROM編程期間,此引腳用於輸入編程脈沖(PROG)。
③PSEN(29腳):此腳的輸出是外部程序存儲器的讀選通信號。在從外部程序存儲器取指令(或常數)期間,每個機器周期兩次PSEN有效。但在此期間,每當訪問外部數據存儲器時,這兩次有效的PSEN信號將不出現。PSEN同樣可以驅動(吸收或輸出)8個LS型的TTL輸入。
④EA/VPP(引腳):當EA端保持高電平時,訪問內部程序存儲器,但在PC(程序計數器)值超過0FFFH(對851/8751/80C51)或1FFFH(對8052)時,將自動轉向執行外部程序存儲器內的程序。當EA保持低電平時,則只訪問外部程序存儲器,不管是否有內部程序存儲器。對於常用的8031來說,無內部程序存儲器,所以EA腳必須常接地,這樣才能只選擇外部程序存儲器。
對於EPROM型的單片機(如8751),在EPROM編程期間,此引腳也用於施加21V的編程電源(VPP)。
4、輸入/輸出(I/O)引腳P0、P1、P2、P3(共32根)
①P0口(39腳至32腳):是雙向8位三態I/O口,在外接存儲器時,與地址匯流排的低8位及數據匯流排復用,能以吸收電流的方式驅動8個LS型的TTL負載。
②P1口(1腳至8腳):是准雙向8位I/O口。由於這種介面輸出沒有高阻狀態,輸入也不能鎖存,故不是真正的雙向I/O口。P1口能驅動(吸收或輸出電流)4個LS型的TTL負載。對8052、8032,P1.0引腳的第二功能為T2定時/計數器的外部輸入,P1.1引腳的第二功能為T2EX捕捉、重裝觸發,即T2的外部控制端。對EPROM編程和程序驗證時,它接收低8位地址。
③P2口(21腳至28腳):是准雙向8位I/O口。在訪問外部存儲器時,它可以作為擴展電路高8位地址匯流排送出高8位地址。在對EPROM編程和程序驗證期間,它接收高8位地址。P2可以驅動(吸收或輸出電流)4個LS型的TTL負載。
④P3口(10腳至17腳):是准雙向8位I/O口,在MCS-51中,這8個引腳還用於專門功能,是復用雙功能口。P3能驅動(吸收或輸出電流)4個LS型的TTL負載。
作為第一功能使用時,就作為普通I/O口用,功能和操作方法與P1口相同。
作為第二功能使用時,各引腳的定義如表所示。
值得強調的是,P3口的每一條引腳均可獨立定義為第一功能的輸入輸出或第二功能。
表 P3各口線的第二功能定義
口線 引腳 第二功能
P3.0 10 RXD(串列輸入口)
P3.1 11 TXD(串列輸出口)
P3.2 12 INT0(外部中斷0)
P3.3 13 INT1(外部中斷1)
P3.4 14 T0(定時器0外部輸入)
P3.5 15 T1(定時器1外部輸入)
P3.6 16 WR(外部數據存儲器寫脈沖)
P3.7 17 RD(外部數據存儲器讀脈沖)
二、MCS-51單片機的片外匯流排結構
綜合上面的描述可知,I/O口線都不能當作用戶I/O口線。除8051/8751外真正可完全為用戶使用的I/O口線只有P1口,以及部分作為第一功能使用時的P3口。如圖,是MCS-51單片機按引腳功能分類的片外匯流排結構圖。
由圖我們可以看到,單片機的引腳除了電源、復位、時鍾接入,用戶I/O口外,其餘管腳是為實現系統擴展而設置的。這些引腳構成MCS-51單片機片外三匯流排結構,即:
①地址匯流排(AB):地址匯流排寬為16位,因此,其外部存儲器直接定址為64K位元組,16位地址匯流排由P0口經地址鎖存器提供8位地址(A0至A7);P2口直接提供8位地址(A8至A15)。
②數據匯流排(DB):數據匯流排寬度為8位,由P0提供。
③控制匯流排(CB):由P3口的第二功能狀態和4根獨立控制線RESET、EA、ALE、PSEN組成。
下表列出各個子系列的配製情況供讀則參考。
晶元種類 片內存儲器 中斷源 定時/計數器 串列口 電源消耗(mA) 製造工藝
ROM/EPROM RAM
8051(8751,8031) 4K 128 5 2 同、非同步方式,8位或10位可程序控制 125 HMOS
8052(8752,8032) 8K 256 6 3 同、非同步方式,8位或10位可程序控制 100 HMOS
80C51(87C51,80C31) 4K 128 5 2 同、非同步方式,8位或10位可程序控制 24 CHMOS
80C52(87C52,80C32) 8K 256 7 3 同、非同步方式,8位或10位可程序控制 24 CHMOS
8044(8744,8344) 4K 192 5 2 S.L.U 200 HMOS
MSC-51單片機中央處理器
中央處理器是單片機內部的核心部件,它決定了單片機的主要功能特性。中央處理器主要由運算部件和控制部件組成。下面我們把中央處理器功能模塊和有關的控制信號線聯系起來加以討論,並涉及相關的硬體設備(如振盪電路和時鍾電路)。
1、運算部件:它包括算術、邏輯部件ALU、布爾處理器、累加器ACC、寄存器B、暫存器TMP1和TMP2、程序狀態字寄存器PSW以及十進制調整電路等。運算部件的功能是實現數據的算術邏輯運算、位變址處理和數據傳送操作。
MCS-51單片機的ALU功能十分強,它不僅可對8位變數進行邏輯「與」、「或」、「異或」、循環、求補、清零等基本操作,還可以進行加、減、乘、除等基本運算。為了乘除運算的需要,設置了B寄存器。在執行乘法運算指令時,用來存放其中一個乘數和乘積的高8位數;在執行除法運算指令時,B中存入除數及余數。MCS-51單片機的ALU還具有一般微機ALU,如Z80、MCS-48所不具備的功能,即布爾處理功能。單片機指令系統中的布爾指令集、存儲器中的位地址空間與CPU中的位操作構成了片內的布爾功能系統,它可對位(bit)變數進行布爾處理,如置位、清零、求補、測試轉移及邏輯「與」、「或」等操作。在實現位操作時,借用了程序狀態標志器(PSW)中的進位標志Cy作為位操作的「累加器」。
運算部件中的累加器ACC是一個8位的累加器(ACC也可簡寫為A)。從功能上看,它與一般微機的累加器相比沒有什麼特別之處,但需要說明的是ACC的進位標志Cy就是布爾處理器進行位操作的一個累加器。
MCS-51單片機的程序狀態PSW,是一個8位寄存器,它包含了程序的狀態信息。
2、控制部件
控制部件是單片機的神經中樞,它包括時鍾電路、復位電路、指令寄存器、解碼以及信息傳送控制部件。它以主振頻率為基準發出CPU的時序,對指令進行解碼,然後發出各種控制信號,完成一系列定時控制的微操作,用來控制單片機各部分的運行。其中有一些控制信號線能簡化應用系統外圍控制邏輯,如控制地址鎖存的地址鎖存信號ALE,控製片外程序存儲器運行的片內外存儲器選擇信號EA,以及片外取指信號PSEN。
參考資料:http://www.ieechina.com/Upload/Tech/538.htm
Ⅸ 什麼是8051
8051單片微型計算機簡稱為單片機,有稱為微型控制器,是微型計算機的一個重
要分支。單片機是70年代中期發展起來的一種大規模集成電路晶元,是CPU、RAM、ROM、I/O介面和中斷系統於同一矽片的器件。80年代以來,單片機發展迅速,各類新產品不斷涌現,出現了許多高性能新型機種,現已逐漸成為工廠自動化和各控制領域的支柱產業之一。
引腳功能:
MCS-51是標準的40引腳雙列直插式集成電路晶元,引腳分布請參照----單片機引腳圖:
l P0.0~P0.7 P0口8位雙向口線(在引腳的39~32號端子)。
l P1.0~P1.7 P1口8位雙向口線(在引腳的1~8號端子)。
l P2.0~P2.7 P2口8位雙向口線(在引腳的21~28號端子)。
l P3.0~P3.7 P2口8位雙向口線(在引腳的10~17號端子)。
這4個I/O口具有不完全相同的功能,大家可得學好了,其它書本里雖然有,但寫的太深,初學者很難理解,這里都是按我自已的表達方式來寫的,相信你也能夠理解。
P0口有三個功能:
1、外部擴展存儲器時,當做數據匯流排(如圖1中的D0~D7為數據匯流排介面)
2、外部擴展存儲器時,當作地址匯流排(如圖1中的A0~A7為地址匯流排介面)
3、不擴展時,可做一般的I/O使用,但內部無上拉電阻,作為輸入或輸出時應在外部接上拉電阻。
P1口只做I/O口使用:其內部有上拉電阻。
P2口有兩個功能:
1、擴展外部存儲器時,當作地址匯流排使用
2、做一般I/O口使用,其內部有上拉電阻;
P3口有兩個功能:
除了作為I/O使用外(其內部有上拉電阻),還有一些特殊功能,由特殊寄存器來設置,具體功能請參考我們後面的引腳說明。
有內部EPROM的單片機晶元(例如8751),為寫入程序需提供專門的編程脈沖和編程電源,這些信號也是由信號引腳的形式提供的,
即:編程脈沖:30腳(ALE/PROG)
編程電壓(25V):31腳(EA/Vpp)
接觸過工業設備的兄弟可能會看到有些印刷線路板上會有一個電池,這個電池是干什麼用的呢?這就是單片機的備用電源,當外接電源下降到下限值時,備用電源就會經第二功能的方式由第9腳(即RST/VPD)引入,以保護內部RAM中的信息不會丟失。
(註:這些引腳的功能應用,除9腳的第二功能外,在「新動力2004版」學習套件中都有應用到。)
在介紹這四個I/O口時提到了一個「上拉電阻」那麼上拉電阻又是一個什麼東東呢?他起什麼作用呢?都說了是電阻那當然就是一個電阻啦,當作為輸入時,上拉電阻將其電位拉高,若輸入為低電平則可提供電流源;所以如果P0口如果作為輸入時,處在高阻抗狀態,只有外接一個上拉電阻才能有效。
ALE/PROG 地址鎖存控制信號:在系統擴展時,ALE用於控制把P0口的輸出低8位地址送鎖存器鎖存起來,以實現低位地址和數據的隔離。(在後面關於擴展的課程中我們就會看到8051擴展 EEPROM電路,在圖中ALE與74LS373鎖存器的G相連接,當CPU對外部進行存取時,用以鎖住地址的低位地址,即P0口輸出。ALE有可能是高電平也有可能是低電平,當ALE是高電平時,允許地址鎖存信號,當訪問外部存儲器時,ALE信號負跳變(即由正變負)將P0口上低8位地址信號送入鎖存器。當ALE是低電平時,P0口上的內容和鎖存器輸出一致。關於鎖存器的內容,我們稍後也會介紹。
在沒有訪問外部存儲器期間,ALE以1/6振盪周期頻率輸出(即6分頻),當訪問外部存儲器以1/12振盪周期輸出(12分頻)。從這里我們可以看到,當系統沒有進行擴展時ALE會以1/6振盪周期的固定頻率輸出,因此可以做為外部時鍾,或者外部定時脈沖使用。
PORG為編程脈沖的輸入端:在第五課 單片機的內部結構及其組成中,我們已知道,在8051單片機內部有一個4KB或8KB的程序存儲器(ROM),ROM的作用就是用來存放用戶需要執行的程序的,那麼我們是怎樣把編寫好的程序存入進這個ROM中的呢?實際上是通過編程脈沖輸入才能寫進去的,這個脈沖的輸入埠就是PROG。
PSEN 外部程序存儲器讀選通信號:在讀外部ROM時PSEN低電平有效,以實現外部ROM單元的讀操作。
1、內部ROM讀取時,PSEN不動作;
2、外部ROM讀取時,在每個機器周期會動作兩次;
3、外部RAM讀取時,兩個PSEN脈沖被跳過不會輸出;
4、外接ROM時,與ROM的OE腳相接。
參見圖2—(8051擴展2KB EEPROM電路,在圖中PSEN與擴展ROM的OE腳相接)
EA/VPP 訪問和序存儲器控制信號
1、接高電平時:
CPU讀取內部程序存儲器(ROM)
擴展外部ROM:當讀取內部程序存儲器超過0FFFH(8051)1FFFH(8052)時自動讀取外部ROM。
2、接低電平時:CPU讀取外部程序存儲器(ROM)。 在前面的學習中我們已知道,8031單片機內部是沒有ROM的,那麼在應用8031單片機時,這個腳是一直接低電平的。
3、8751燒寫內部EPROM時,利用此腳輸入21V的燒寫電壓。
RST 復位信號:當輸入的信號連續2個機器周期以上高電平時即為有效,用以完成單片機的復位初始化操作,當復位後程序計數器PC=0000H,即復位後將從程序存儲器的0000H單元讀取第一條指令碼。
XTAL1和XTAL2 外接晶振引腳。當使用晶元內部時鍾時,此二引腳用於外接石英晶體和微調電容;當使用外部時鍾時,用於接外部時鍾脈沖信號。
VCC:電源+5V輸入
VSS:GND接地。
AVR和pic都是跟8051結構不同的8位單片機,因為結構不同,所以匯編指令也有所不同,而且區別於使用CISC指令集的8051,他們都是RISC指令集的,只有幾十條指令,大部分指令都是單指令周期的指令,所以在同樣晶振頻率下,較8051速度要快。另PIC的8位單片機前幾年是世界上出貨量最大的單片機,飛思卡爾的單片機緊隨其後。
ARM實際上就是32位的單片機,它的內部資源(寄存器和外設功能)較8051和PIC、AVR都要多得多,跟計算機的CPU晶元很接近了。常用於手機、路由器等等。
DSP其實也是一種特殊的單片機,它從8位到32位的都有。它是專門用來計算數字信號的。在某些公式運算上,它比現行家用計算機的最快的CPU還要快。比如說一般32位的DSP能在一個指令周期內運算完一個32位數乘32位數積再加一個32位數。應用於某些對實時處理要求較高的場合
Ⅹ 8051單片機的指令集有多少種多少條在指令集里有定址方式有多少種
分有5種指令,有111條
7種定址方式,
寄存器定址、直接定址、寄存器間接定址、變址定址、相對定址和位定址