1. 單片機指令問題!
MCS-51系列單片機指令以A開頭的指令有18條,分別為:篇幅不夠,只是一半!
1、ACALL addr11
指令名稱:絕對調用指令
指令代碼:{A10,A9,A8,10001},A[7:0]
指令功能:構造目的地址,進行子程序調用。其方法是以指令提供的11位地址(al0~a0),取代PC的低11位,PC的高5位不變。
操作內容:
PC<-(PC)+2
SP<-(SP)+1
(SP)<-(PC)7~0
SP<-(SP)+1
(SP)<-(PC)15~8
PC10~0<-addrl0~0
位元組數: 2
機器周期:2
使用說明:由於指令只給出子程序入口地址的低11位,因此調用范圍是2KB。
2、ADD A,Rn
指令名稱:寄存器加法指令
指令代碼:28H~2FH
指令功能:累加器內容與寄存器內容相加
操作內容:A<-(A)+(Rn), n=0~7
位元組數: 1
機器周期;1
影響標志位:C,AC,OV
3、ADD A,direct
指令名稱:直接定址加法指令
指令代碼:25H
指令功能:累加器內容與內部RAM單元或專用寄存器內容相加
操作內容:A<-(A)+(direct)
位元組數: 2
機器周期:1
影響標志位:C,AC,OV
4、ADD A,@Ri
指令名稱:間接定址加法指令
指令代碼:26H~27H
指令功能:累加器內容與內部RAM低128單元內容相加
操作內容:A<-(A)+((Ri)), i=0,1
位元組數: 1
機器周期:1
影響標志位:C,AC,OV
5、ADD A,#data
指令名稱:立即數加法指令
指令代碼:24H
指令功能:累加器內容與立即數相加
操作內容:A<-(A)+data
位元組數: 2
機器周期:1
影響標志位:C,AC,OV
6、ADDC A,Rn
指令名稱:寄存器帶進位加法指令
指令代碼:38H~3FH
指令功能:累加器內容、寄存器內容和進位位相加
操作內容:A<-(A)+(Rn)+(C), n=0~7
位元組數: 1
機器周期:1
影響標志位:C,AC,OV
7、ADDC A,direct
指令名稱:直接定址帶進位加法指令
指令代碼:35H
指令功能:累加器內容、內部RAM低128單元或專用寄存器內容與進位位加
操作內容:A<-(A)+(direct)+(C)
位元組數: 2
機器周期:1
影響標志位:C,AC,OV
8、ADDC A,@Ri
指令名稱:間接定址帶進位加法指令
指令代碼:36H~37H
指令功能:累加器內容、內部RAM低128單元內容及進位位相加
操作內容:A<-(A)+((Ri))+(C), i=0,1
位元組數: 1
機器周期:1
影響標志位:C,AC,OV
9、ADDC A,#data
指令名稱:立即數帶進位加法指令
指令代碼:34H
指令功能:累加器內容、立即數及進位位相加
操作內容:A<-(A)+data+(C)
位元組數: 2
機器周期:1
影響標志位:C,AC,OV
10、AJMP addr11
指令名稱:絕對轉移指令
指令代碼:{A10,A9,A8,00001},A[7:0]
指令功能:構造目的地址,實現程序轉移。其方法是以指令提供的11位地址,取代PC的低11位,.而PC的高5位保持不變。
操作內容:PC<-(PC)+2
PCl0~0<-addrll
位元組數: 2
機器周期:2
使用說明:由於addrll的最小值是000H,最大值是7FFH,因此地址轉移范圍是2KB。
11、ANL A,Rn
指令名稱:寄存器邏輯與指令
指令代碼:58H~5FH
指令功能:累加器內容邏輯與寄存器內容
操作內容:A<-(A)^(Rn), n=0~7
位元組數: 1
機器周期:1
12、ANL A,direct
指令名稱:直接定址邏輯與指令
指令代碼:55H
指令功能:累加器內容邏輯與內部RAM低128單元或專用寄存器內容
操作內容:A<-(A)^(diret)
位元組數: 2
機器周期:1
13、ANL A,@Ri
指令名稱:間接定址邏輯與指令
指令代碼:56H~57H
指令功能:累加器內容邏輯與內部RAM低128單元內容
操作內容:A<-(A)^((Ri)) i=0,1
位元組數: 1
機器周期:1
14、ANL A,#data
指令名稱:立即數邏輯與指令
指令代碼:54H
指令功能:累加器內容邏輯與立即數
操作內容:A<-(A)^data
位元組數: 2
機器周期:1
15、ANL direct,A
指令名稱:累加器邏輯與指令
指令代碼:52H
指令功能:內部RAM低128單元或專用寄存器內容邏輯與累加器內容
操作內容:direct<-(A)^(direct)
位元組數: 2
機器周期:1
16、ANL direct, #data
指令名稱:邏輯與指令
指令代碼:53H
指令功能:內部RAM低128單元或專用寄存器內容邏輯與立即數
操作內容:direct<-(direct)^data
位元組數: 3
機器周期:2
17、ANL C,bit
指令名稱:位邏輯與指令
指令代碼:82H
指令功能:進位標志邏輯與直接定址位
操作內容:C<-(C)^(bit)
位元組數: 2
機器周期:2
18、ANL C,/bit
指令名稱:位邏輯與指令
指令代碼:B0H
指令功能:進位標志邏輯與直接定址位的反
操作內容:C<-(C)^(bit)
位元組數: 2
以C開頭的指令有10條,分別為:
1、CJNE A,dircet,rel
指令名稱:數值比較轉移指令
指令代碼:B5H
指令功能:累加器內容與內部RAM低128位元組或專用寄存器內容比較,不等則轉移。
操作內容:若(A)=(direct),則PC<-(PC)+3,C<-0
若(A)>(direct),則PC<-(PC)+3+rel,C<-0
若(A)<(direct),則PC<-(PC)+3+rel,C<-1
位元組數: 3
機器周期:2
2、CJNE A,#data,rel
指令名稱:數值比較轉移指令
指令代碼:B4H
指令功能:累加器內容與立即數比較,不等則轉移。
操作內容:若(A)=data,則PC<-(PC)+3,C<-0
若(A)>data,則PC<-(PC)+3+rel,C<-0
若(A)<data,則PC<-(PC)+3+rel,C<-1
位元組數: 3
機器周期:2
3、CJNE Rn,#data,rel
指令名稱:數值比較轉移指令
指令代碼:B8H~BFH
指令功能:寄存器內容與立即數比較,不等則轉移。
操作內容:若(Rn)=data,則PC<-(PC)+3,C<-0
若(Rn)>data,則PC<-(PC)+3+rel,C<-0
若(Rn)<data,則PC<-(PC)+3+rel,C<-1
位元組數: 3
機器周期:2
4、CJNE @Ri,#data,rel
指令名稱:數值比較轉移指令
指令代碼:B6H~B7H
指令功能:內部RAM低128單元內容與立即數比較,不等則轉移。
操作內容:若((Ri))=data,則PC<-(PC)+3,C<-0
若((Ri))>data,則PC<-(PC)+3+rel,C<-0
若((Ri))<data,則PC<-(PC)+3+rel,C<-1
位元組數: 3
機器周期:2
5、CLR A
指令名稱:累加器清0指令
指令代碼:E4H
指令功能:累加器清0
操作內容:A<-0
位元組數: 1
機器周期:1
6、CLR C
指令名稱:進位標志清0指令
指令代碼:C3H
指令功能:進位位清0
操作內容:C<-0
位元組數: 1
機器周期:1
7、CLR bit
指令名稱:直接定址位清0指令
指令代碼:C2H
指令功能:直接定址位清0
操作內容:bit<-0
位元組數: 2
機器周期:1
8、CPL A
指令名稱:累加器取反指令
指令代碼:F4H
指令功能:累加器取反
操作內容:A<-(A)
位元組數: 1
機器周期:1
9、CPL C
指令名稱:進位標志取反指令
指令代碼:B3H
指令功能:進位標志位狀態取反
操作內容:C<-(c取反)
位元組數: 1
機器周期:1
10、 CPL bit
指令名稱:直接定址位取反指令
指令代碼:B2H
指令功能:直接定址位取反
操作內容:bit<-(bit取反)
位元組數: 2
機器周期:1
以D開頭的指令有8條,分別為:
1、DA A
指令名稱:十進制調整指令
指令代碼:D4H
指令功能:對BCD碼加法運算的結果進行有條件的修正
操作內容:若(A)3~0>9|(AC)=1,則A3~0<-(A)3~0+6
若(A)7~4>9|(C)=1,則A7~4<-(A)7~4+6
若(A)7~4=9^(A)3~0>9,則A7~4<-(A)7~4+6
位元組數: 1
機器周期:1
使用說明:DA指令不影響溢出標志
2、DEC A
指令名稱:累加器減1指令
指令代碼:14H
指令功能:累加器內容減1
操作內容:A<-(A)-1
位元組數: 1
機器周期:1
3、DEC Rn
指令名稱:寄存器減1指令
指令代碼:18H~1FH
指令功能:寄存器內容減1
操作內容:Rn<-(Rn)-1,n=0~7
位元組數: 1
機器周期:1
4、DEC direct
指令名稱:直接定址減1指令
指令代碼:15H
指令功能:內部RAM低128單元及專用寄存器內容減1
操作內容:direct<-(direct)-1
位元組數: 2
機器周期:1
5、DEC @Ri
指令名稱:間接定址減1指令
指令代碼:16H~17H
指令功能:內部RAM低128單元內容減1
操作內容:(Ri)<-((Ri))-1, i=0,1
位元組數: 1
機器周期:1
6、DIV AB
指令名稱:無符號數除法指令;
指令代碼:84H
指令功能:A的內容被B的內容除。指令執行後,商存於A中,余數存於B中。
操作內容:A<-(A)/(B)的商
B<-(A)/(B)的余數
位元組數: 1
機器周期:4
影響標志位:C被清0;若B=00H,除法無法進行,並使OV=1;否則OV=0。
7、DJNZ Rn,rel
指令名稱:寄存器減1條件轉移指令
指令代碼:D8H~DFH
指令功能:寄存器內容減1。不為0轉移;為0順序執行。
操作內容:Rn<-(Rn)-l,n=0~7
若(Rn)≠0,則PC<-(PC)+2+rel
若(Rn)=0,則PC<-(PC)+2
位元組數: 2
機器周期:2
8、DJNZ direct,rel
指令名稱:直接定址單元減1條件轉移指令
指令代碼:D5H
指令功能:內部RAM低128單元內容減1。不為0轉移;為0順序執行。
操作內容:direct<-(direct)-1
若(direct)≠0,則PC<-(PC)+3+rel
若(direct)=0,則PC<-(PC)+3
位元組數: 3
機器周期:2
以I開頭的指令有5條,分別為:
1、INC A
指令名稱:累加器加1指令
指令代碼:04H
指令功能:累加器內容加1
操作內容:A<-(A)+1
位元組數: 1
機器周期:1
2、INC Rn
指令名稱:寄存器加1指令
指令代碼:08H~0FH
指令功能:寄存器內容加1
操作內容:Rn<-(Rn)+1,n=0~7
位元組數: 1
機器周期:1
3、INC direct
指令名稱:直接定址單元加1指令
指令代碼:05H
指令功能:內部BAM低128單元或專用寄存器內容加1
操作內容:direct<-(direct)+1
位元組數: 2
機器周期:1
4、INC @Ri
指令名稱:間接定址單元加1指令
指令代碼:06H~07H
指令功能:內部RAM低128單元內容加1
操作內容:(Ri)<-((Ri))+1;i=0,l
位元組數: 1
機器周期:1
5、INC DPTR
指令名稱:16位數據指針加1指令
指令代碼:A3H
指令功能:數據指針寄存器DPTR內容加1
操作內容:DPTR<-(DPTR)+1
位元組數: 1
機器周期:2
以J開頭的指令有8條,分別為:
1、JB bit,rel
指令名稱:位條件轉移指令。
指令代碼:20H
指令功能:根據指定位的狀態,決定程序是否轉移。若為1則轉移;否則順序執行。
操作內容:若(bit)=1,則PC<-(PC)+3+rel
若(bit)≠1,則PC<-(PC)+3
位元組數: 3
機器周期:2
2、JBC bit,rel
指令名稱:位條件轉移清0指令
指令代碼:10H
指令功能:對指定位的狀態進行測試。若為1,則把該位清0並進行轉移;否則程序順序執行。
操作內容:若(bit)=1,則PC<-(PC)+3+rel,bit<-0
若(bit)≠1,則PC<-(PC)+3
位元組數: 3
機器周期:2
3、JC rel
指令名稱:累加位條件轉移指令
指令代碼:40H
指令功能:根據累加位(C)的狀態決定程序是否轉移,若為1則轉移,否則順序執行。
操作內容:若(C)=1,則PC<-(PC)+2+rel
若(C)≠1,則PC<-(PC)+2
位元組數: 2
機器周期:2
4、JMP @A+DPTR
指令名稱:無條件間接轉移指令
指令代碼:72H
指令功能:A內容與DPTR內容相加作為轉移目的地址,進行程序轉移。
操作內容:PC<-(A)+(DPTR)
位元組數: 1
機器周期;2
5、JNB bit,rel
指令名稱:位條件轉移指令
指令代碼:30H
指令功能:根據指定位的狀態,決定程序是否轉移。若為0則轉移;否則順序執行。
操作內容:若(bit)=0,則PC<-(PC)+3+rel
若(bit)≠0,則PC<-(PC)+3
位元組數: 3
機器周期:2
6、JNC rel
指令名稱:累加位條件轉移指令
指令代碼:50H
指令功能:根據累加位(C)的狀態決定程序是否轉移。若為o則轉移;否則順序執行。
操作內容:若(C)=0,則PC<-(PC)+2+rel
若(C)≠0,則PC<-(PC)+2
位元組數: 2
機器周期:2
7、JNZ rel
指令名稱:判0轉移指令
指令代碼:70H
指令功能:累加位(A)的內容不為0,則程序轉移;否則程序順序執行。
操作內容:若(A)≠0,則PC<-(PC)+2+rel
若(A)=0,則PC<-(PC)+2
位元組數: 2
機器周期:2
8、JZ rel
指令名稱:判0轉移指令
指令代碼:60H
指令功能:累加位(A)的內容為o,則程序轉移;否則程序順序執行。
操作內容:若(A)=0,則PC<-(PC)+2+rel
若(A)≠0,則PC<-(PC)+2
位元組數: 2
機器周期:2
以L開頭的指令就2條,分別為:
1、LCALL addr16
指令名稱:長調用指令
指令代碼:12H
指令功能:按指令給定地址進行子程序調用
操作內容:PC<-(PC)+3
SP<-(SP)+1
(SP)<-(PC)7~0
SP<-(SP)+1
(SP)<-(PC)15~8
PC<-addrl6
位元組數: 3
機器周期:2
使用說明:在64KB的范圍內調用子程序
2、LJMP addrl6
指令名稱:長轉移指令
指令代碼:02H
指令功能:使程序按指定地址進行無條件轉移
操作內容:PC<-addrl6
位元組數: 3
機器周期:2
2. 單片機的基本指令有哪些
不知道你是問的哪種單片機下面給你的是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
3. 單片機 TCON 每一位:TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 表示什麼意思0或1代表什麼謝謝,百度百科都沒
這里TF、TR、IE、IT後面跟的0和1是對單片機寄存器中位的命名,因為有兩個定時/計數器、兩個中斷,所以用0、1來區分。
各位的定義如下:
TF1、TF0:分別是定時器1、定時器0的溢出標志位。當定時器x計滿溢出時,由硬體使TFx位置「1」,並申請中斷。進入中斷服務程序後,由硬體自動清「0」,在查詢方式下用軟體清「0」。
TR1、TR0:分別是定時器1、定時器0的運行控制位。由軟體清「0」關閉定時器。當GATE=1,且INTx為高電平時,TR置「1」啟動定時器;當GATE=0,TRx置「1」啟動定時器。
IE1、IE0:分別為外部中斷1、外部中斷0的請求標志位。
IT1、IT0:分別為外部中斷1、外部中斷0的觸發方式選擇位。當ITx=0,為低電平觸發方式;當ITx=1,為下降沿觸發方式。
(3)單片機寄存器內0減1擴展閱讀:
TCON初始化:
1、確定工作方式(即對TMOD賦值);
2、預置定時或計數的初值(可直接將初值寫入TH0、TL0或TH1、TL1);
3、根據需要開放定時器/計數器的中斷(直接對IE位賦值);
4、啟動定時器/計數器(若已規定用軟體啟動,則可把TR0或TR1置「1」;若已規定由外中斷引腳電平啟動,則需給外引腳加啟動電平。當實現了啟動要求後,定時器即按規定的工作方式和初值開始計數或定時)。
4. 51單片機利用外部中斷INT0和INT1實現編碼器雙向計數功能
分數給的太少了。我只能給你提供一個思路,然後你自已寫程序:
int0和int1分別對應單片機兩個不同的引腳,你要先在單片機復位時在特殊功能寄存器中來配置這兩個引腳的功能,int0和int1的中斷都分別有兩個功能,一個是計數器工作方式,一個是外部中斷工作方式。
你的這個要求是不能用int0和int1兩個引腳的計數器功能的,你只能用外部中斷功能。
然後定義好int0和int1分別在中斷時的跳轉地址,在程序進入中斷之後,分別在不同的中斷程序中對一個寄存器表示的計數器進行加1或者減1操作。
一定記得在處理中斷的時候,要把中斷使能的寄存器標置位關掉,以避免中斷重復執行和錯誤。
5. 單片機:採用外部中斷0和1,控制兩位數碼管進行00~99的計數,其中外部中斷0控制進行減1計數,外部中斷1進
這好辦!定義一個寄存器num,若是外中斷0,則num--;若是外中斷1,則num++;然後讓num顯示即可。