導航:首頁 > 操作系統 > 單片機與指令

單片機與指令

發布時間:2024-12-15 19:53:39

單片機-指令系統-

1)MOV 28H,@R2 錯(單片機內部硬體決定的)
2)DEC DPTR 對
3)INC DPTR 對
4)CLR R0 錯(CLR只有三條指令CLR A;CLR C;CLR bit)
5)CPL R5 錯
6)MOV R0,R1 錯(單片機內部硬體決定的)
7)PUSH DPTR 錯(DPTR【16位】是由兩個8位寄存器組成的,單片機只能對8位的數據操作)
8)MOV F0,C 對(C相當於位操作的累加器「A」)
9)MOV F0,ACC.3 錯(單片機內部硬體決定的)
10)MOVX A,@R1 對
11)MOV C,30H 錯(因為RAM中20H-2FH是位定址區,30H不是位定址區不能位定址)
12)RLC R0 錯(只有RL A;RLC A兩條指令,其它都是錯的)

⑵ 單片機系統指令的功能指令

一、位元組交換指令
XCH A, Rn
若(A)=80H,(R7)=08H,執行後(A)=08H,(R7)=80H
XCH A, direct
若(A)=80H,(40H)=F0H,執行後(A)=F0H ,(40H)= 80H
XCH A, @Ri
若(A)=80H , (R0)=6AH, (6AH)=0FH ,
執行後(A)=0FH,(6AH)=80H
二、半位元組交換指令
XCHD A, @Ri 累加器的低4位與內部RAM低4位交換
三、累加器半位元組交換指令
SWAP A
將累加器A的高半位元組和低半位元組互換。
四、算術運算指令
加、減、乘、除指令,都是針對8位二進制無符號數。執行
的結果對Cy、Ac、OV等標志位有影響,但增1和減1指令不影
響上述標志。
1、加法指令,目的操作數均為ACC。
ADD A, Rn ;(A)+(Rn)→A,n=0~7
ADD A, direct ;(A)+(direct)→A
ADD A, @Ri ;(A)+((Ri))→A,i=0,1
ADD A, #data ;(A)+#data→A
注意運算結果對各個標志位的影響:
(1)、如果位7有進位,則進位標志Cy置「1」,否則清0;
(2)、如果位3有進位,則輔助進位標志Ac置「1」,否則清0;
(3)、溢出標志位OV:
如果位6有進位,而位7沒有進位;或者位7有進位,而位6 沒有,則溢出標志位OV置「1」,否則清0。
OV狀態,只有在帶符號數加法運算時才有意義。
當兩個帶符號數相加時,OV=1,表示加法運算超出了累加器A所能表示的帶符號數的有效范圍。
2、帶進位加法指令
標志位Cy參加運算,因此是三個數相加。共4條:
ADDC A, Rn ;(A)+(Rn)+C→A,n=0~7 ADDC A, direct ;(A)+(direct)+C→A
ADDC A, @Ri ;(A)+(Ri)+C→A,i=0,1
ADDC A, #data ;(A)+#data+C→A
3、增1(加1)指令(C語言的++ )
INC A
INC Rn ;n=0~7
INC direct
INC @Ri ;i=0,1
INC DPTR (除立即數以外)
(1)、不影響PSW中的任何標志局碼(除了INC A 外)。
(2)、INC DPTR
該指令是16位數增1指令。指令首先對低8位指針DPL的內容執行加1的操作,當產生溢出時,就對DPH的內容進行加1操作,不影響標志Cy的狀態。
4、DA A,十進制調整指令
用於對BCD碼加法運算結果的修正。
兩個BCD碼按二進制相加之後,必須經本指令的調整才能
得到正確的壓縮BCD碼的和數。
調整方法:十進制調和臘讓整修正,即結果加6調整。具體為:
a) 累加器低4位大於9或輔助進位位Ac=1,則進行低4位加6修正;
b) 累加器高4位大於9或進位位Cy=1,則進行高4位加6修正;
c) 累加器高4位大於9, 低4位大於9, 則高4位和低4位分別加6修正;是否加6是通過執行指令 DA A 來自動實現的。
5、帶借位的減法指令(注意:減法只有帶借位的)
SUBB A, Rn ;(A)-(Rn)- Cy→A,n=0~7
SUBB A, direct ; (A)-(direct)- Cy→A
SUBB A, @Ri ;(A)-((Ri))- Cy→A, i=0,1
SUBB A, #data ;(A)-#data - Cy→A
A的內容減去源操作數和進位標志Cy的值,結果存在A中。
1、如果位7需借位,則Cy置1,否則清0;
2、如果位3需借位,則Ac置1 ,否則清0;
3、如果位6需借位而位7不需要借位,或者位7需借位,位6
不需借位,則溢出標志位OV置1,否則清0。
6、減1指令(C語言的--)
DEC A ;(A)-1→A
DEC Rn ;(Rn)-1→Rn,n=0~7
DEC direct ;喚局(direct)-1→direct
DEC @Ri ;((Ri))-1→(Ri),i=0,1
1、減1指令不影響標志位。
2、增1/加1指令有INC DPTR,減1無DEC DPTR指令。
7、乘法指令
MUL AB ;A×B→BA
1、積的高位元組在B中,低位元組在A中;
2、如果積大於255,則置「1」溢出標志位OV
8、除法指令
DIV AB ;A/B→A(商),余數→B
如果B的內容為「0」(即除數為「0」),則存放結果的A、B中的內容不定,並置「1」溢出標志位OV。
五、左環移指令RL A
累加器A的內容向左環移一位,Acc.7移入Acc.0 ,不影響標志。
六、帶進位左環移指令RLC A
累加器A的內容和進位標志位Cy一起向左環移一位,Acc.7移入進位位Cy,Cy移入Acc.0,不影響其它標志。
七、右環移指令RR A
累加器A的內容向右環移一位,Acc.0移入Acc.7,不影響標志。
八、帶進位環移指令RRC A
累加器A的內容和進位標志Cy一起向右環移一位,Acc.0移入Cy,Cy移入Acc.7。不影響其它標志。
九、邏輯與指令
ANL A, Rn ; (A)∧(Rn)→A,n=0~7
ANL A, direct ; (A)∧(direct)→A
ANL A, #data ; (A)∧#data→A
ANL A, @Ri ; (A)∧((Ri))→A,i=0~1
ANL direct, A ; (direct)∧(A)→direct
ANL direct, #data ; (direct)∧#data→direct
十、邏輯或指令
ORL A, Rn ;(A) ∨(Rn)→A ,n=0~7
ORL A, direct ;(A) ∨(direct)→A
ORL A, #data ;(A) ∨data→A
ORL A, @Ri ;(A) ∨((Ri))→A,i=0,1
ORL direct, A ;(direct) ∨(A)→direct
ORL direct, #data ;(direct) ∨#data→direct
十一、邏輯異或指令
XRL A, Rn ;(A) ⊕(Rn)→A
XRL A, direct ;(A) ⊕(direct)→A
XRL A, @Ri ;(A) ⊕((Ri))→A ,i=0,1
XRL A, #data ;(A) ⊕#data→A
XRL direct, A ;(direct) ⊕(A)→direct
XRL direct, #data ;(direct) ⊕#data →direct
與1相與取反,與0相與不變。

⑶ 單片機系統指令的位操作指令

一、數據位傳送指令
MOV C,bit
MOV bit,C
如MOV C,06H ;(20H).6→Cy
06H是內部RAM 20H位元組位6的位地址。
MOV P1.0,C ;Cy→P1.0
可定址位的具體定義:從20H單元的第一位開始一直到2FH單元的最後一位分別為00H~7FH以及特殊功能寄存器中80H~F7H。
二、位變數修改指令
CLR C ;清「0」Cy
CLR bit ;清「0」bit位
CPL C ;Cy求反
CPL bit ;bit位求反
SETB C ;置「1」 Cy
SETB bit ;置「1」bit位
三、位變數邏輯與指令
ANL C,bit ;bit ∧Cy →Cy
ANL C,/bit; ;/ bit ∧Cy →Cy
四、位變數邏輯或指令
ORL C,bit ;bit ∨ Cy →Cy
ORL C,/bit ;/ bit ∨ Cy →Cy
五、條件轉移類指令
JC rel ;如果進位位Cy=1,則轉移
JNC rel ;如果進位位Cy=0,則轉移
JB bit,rel ;如果直接定址位=1,則轉移
JNB bit,rel ;如果直接定址位=0,則轉移
JBC bit,rel ;如果直接定址位=1,則轉移,並對bit位清0

⑷ 單片機的基本指令有哪些

不知道你是問的哪種單片機下面給你的是MCS-51的,希望對你有幫助,如有,麻煩採納,謝謝 數據傳送指令共有29條,數據傳送指令一般的操作是把源操作數傳送到目的操作數,指令執行完成後,源操作數不變,目的操作數等於源操作數。如果要求在進行數據傳送時,目的操作數不丟失,則不能用直接傳送指令,而採用交換型的數據傳送指令,數據傳送指令不影響標志C,AC和OV,但可能會對奇偶標志P有影響。 x0dx0ax0dx0a[1]. 以累加器A為目的操作數類指令(4條) x0dx0a這4條指令的作用是把源操作數指向的內容送到累加器A。有直接、立即數、寄存器和寄存器間接定址方式: x0dx0ax0dx0aMOV A,data ;(data)→(A) 直接單元地址中的內容送到累加器A x0dx0aMOV A,#data ;#data→(A) 立即數送到累加器A中 x0dx0aMOV A,Rn ;(Rn)→(A) Rn中的內容送到累加器A中 x0dx0aMOV A,@Ri ;((Ri))→(A) Ri內容指向的地址單元中的內容送到累加器A x0dx0ax0dx0a[2]. 以寄存器Rn為目的操作數的指令(3條) x0dx0a這3條指令的功能是把源操作數指定的內容送到所選定的工作寄存器Rn中。有直接、立即和寄存器定址方式: x0dx0ax0dx0aMOV Rn,data ;(data)→(Rn) 直接定址單元中的內容送到寄存器Rn中 x0dx0aMOV Rn,#data ;#data→(Rn) 立即數直接送到寄存器Rn中 x0dx0aMOV Rn,A ;(A)→(Rn) 累加器A中的內容送到寄存器Rn中 x0dx0ax0dx0a[3]. 以直接地址為目的操作數的指令(5條) x0dx0a這組指令的功能是把源操作數指定的內容送到由直接地址data所選定的片內RAM中。有直接、立即、寄存器和寄存器間接4種定址方式: x0dx0ax0dx0aMOV data,data ;(data)→(data) 直接地址單元中的內容送到直接地址單元 x0dx0aMOV data,#data ;#data→(data) 立即數送到直接地址單元 x0dx0aMOV data,A ;(A)→(data) 累加器A中的內容送到直接地址單元 x0dx0aMOV data,Rn ;(Rn)→(data) 寄存器Rn中的內容送到直接地址單元 x0dx0aMOV data,@Ri ;((Ri))→(data) 寄存器Ri中的內容指定的地址單元中數據送到直接地址單元 x0dx0ax0dx0a[4]. 以間接地址為目的操作數的指令(3條) x0dx0a這組指令的功能是把源操作數指定的內容送到以Ri中的內容為地址的片內RAM中。有直接、立即和寄存器3種定址方式: x0dx0ax0dx0aMOV @Ri,data ;(data)→((Ri)) 直接地址單元中的內容送到以Ri中的內容為地址的RAM單元 x0dx0aMOV @Ri,#data ;#data→((Ri)) 立即數送到以Ri中的內容為地址的RAM單元 x0dx0aMOV @Ri,A ;(A)→((Ri)) 累加器A中的內容送到以Ri中的內容為地址的RAM單元 x0dx0ax0dx0a[5]. 查表指令(2條) x0dx0a這組指令的功能是對存放於程序存儲器中的數據表格進行查找傳送,使用變址定址方式: x0dx0ax0dx0aMOVC A,@A+DPTR ;((A))+(DPTR)→(A) 表格地址單元中的內容送到累加器A中 x0dx0aMOVC A,@A+PC ;((PC))+1→(A),((A))+(PC)→(A) 表格地址單元中的內容送到累加器A中 x0dx0ax0dx0a[6]. 累加器A與片外數據存儲器RAM傳送指令(4條) x0dx0a這4條指令的作用是累加器A與片外RAM間的數據傳送。使用寄存器定址方式: x0dx0ax0dx0aMOVX @DPTR,A ;(A)→((DPTR)) 累加器中的內容送到數據指針指向片外RAM地址中 x0dx0aMOVX A, @DPTR ;((DPTR))→(A) 數據指針指向片外RAM地址中的內容送到累加器A中 x0dx0aMOVX A, @Ri ;((Ri))→(A) 寄存器Ri指向片外RAM地址中的內容送到累加器A中 x0dx0aMOVX @Ri,A ;(A)→((Ri)) 累加器中的內容送到寄存器Ri指向片外RAM地址中 x0dx0ax0dx0a[7]. 堆棧操作類指令(2條) x0dx0a這4類指令的作用是把直接定址單元的內容傳送到堆棧指針SP所指的單元中,以及把SP所指單元的內容送到直接定址單元中。這類指令只有兩條,下述的第一條常稱為入棧操作指令,第二條稱為出棧操作指令。需要指出的是,單片機開機復位後,(SP)默認為07H,但一般都需要重新賦值,設置新的SP首址。入棧的第一個數據必須存放於SP+1所指存儲單元,故實際的堆棧底為SP+1所指的存儲單元。 x0dx0ax0dx0aPUSH data ;(SP)+1→(SP),(data)→(SP) 堆棧指針首先加1,直接定址單元中的數據送到堆棧指針SP所指的單元中 x0dx0aPOP data ;(SP)→(data)(SP)-1→(SP), 堆棧指針SP所指的單元數據送到直接定址單元中,堆棧指針SP再進行減1操作 x0dx0ax0dx0a[8]. 交換指令(5條) x0dx0a這5條指令的功能是把累加器A中的內容與源操作數所指的數據相互交換。 x0dx0ax0dx0aXCH A,Rn ;(A)←→(Rn)累加器與工作寄存器Rn中的內容互換 x0dx0aXCH A,@Ri ;(A)←→((Ri))累加器與工作寄存器Ri所指的存儲單元中的內容互換 x0dx0aXCH A,data ;(A)←→(data)累加器與直接地址單元中的內容互換 x0dx0aXCHD A,@Ri ;(A 3-0 )←→((Ri) 3-0 )累加器與工作寄存器Ri所指的存儲單元中的內容低半位元組互換 x0dx0aSWAP A ;(A 3-0 )←→(A 7-4 )累加器中的內容高低半位元組互換 x0dx0ax0dx0a[9]. 16位數據傳送指令(1條) x0dx0a這條指令的功能是把16位常數送入數據指針寄存器。 x0dx0ax0dx0aMOV DPTR,#data16 ;#dataH→(DPH),#dataL→(DPL)16位常數的高8位送到DPH,低8位送到DPL x0dx0ax0dx0aMCS-51算術運算指令 x0dx0ax0dx0a算術運算指令共有24條,算術運算主要是執行加、減、乘、除法四則運算。另外MCS-51指令系統中有相當一部分是進行加、減1操作,BCD碼的運算和調整,我們都歸類為運算指令。雖然MCS-51單片機的算術邏輯單元ALU僅能對8位無符號整數進行運算,但利用進位標志C,則可進行多位元組無符號整數的運算。同時利用溢出標志,還可以對帶符號數進行補碼運算。需要指出的是,除加、減1指令外,這類指令大多數都會對PSW(程序狀態字)有影響。這在使用中應特別注意。 x0dx0ax0dx0a[1]. 加法指令(4條) x0dx0a這4條指令的作用是把立即數,直接地址、工作寄存器及間接地址內容與累加器A的內容相加,運算結果存在A中。 x0dx0ax0dx0aADD A,#data ;(A)+#data→(A) 累加器A中的內容與立即數#data相加,結果存在A中 x0dx0aADD A,data ;(A)+(data)→(A) 累加器A中的內容與直接地址單元中的內容相加,結果存在A中 x0dx0aADD A,Rn ;(A)+(Rn)→(A) 累加器A中的內容與工作寄存器Rn中的內容相加,結果存在A中 x0dx0aADD A,@Ri ;(A)+((Ri))→(A) 累加器A中的內容與工作寄存器Ri所指向地址單元中的內容相加,結果存在A中 x0dx0ax0dx0a[2]. 帶進位加法指令(4條) x0dx0a這4條指令除與[1]功能相同外,在進行加法運算時還需考慮進位問題。 x0dx0ax0dx0aADDC A,data ;(A)+(data)+(C)→(A) 累加器A中的內容與直接地址單元的內容連同進位位相加,結果存在A中 x0dx0aADDC A,#data ;(A)+#data +(C)→(A) 累加器A中的內容與立即數連同進位位相加,結果存在A中 x0dx0aADDC A,Rn ;(A)+Rn+(C)→(A) 累加器A中的內容與工作寄存器Rn中的內容、連同進位位相加,結果存在A中 x0dx0aADDC A,@Ri ;(A)+((Ri))+(C)→(A) 累加器A中的內容與工作寄存器Ri指向地址單元中的內容、連同進位位相加,結果存在A中 x0dx0ax0dx0a[3]. 帶借位減法指令(4條) x0dx0a這組指令包含立即數、直接地址、間接地址及工作寄存器與累加器A連同借位位C內容相減,結果送回累加器A中。 x0dx0a這里我們對借位位C的狀態作出說明,在進行減法運算中,CY=1表示有借位,CY=0則無借位。OV=1聲明帶符號數相減時,從一個正數減去一個負數結果為負數,或者從一個負數中減去一個正數結果為正數的錯誤情況。在進行減法運算前,如果不知道借位標志位C的狀態,則應先對CY進行清零操作。 x0dx0ax0dx0aSUBB A,data ;(A)-(data) - (C)→(A) 累加器A中的內容與直接地址單元中的內容、連同借位位相減,結果存在A中 x0dx0aSUBB A,#data ;(A)-#data -(C)→(A) 累加器A中的內容與立即數、連同借位位相減,結果存在A中 x0dx0aSUBB A,Rn ;(A)-(Rn) -(C)→(A) 累加器A中的內容與工作寄存器中的內容、連同借位位相減,結果存在A中 x0dx0aSUBB A,@Ri ;(A)-((Ri)) -(C)→(A) 累加器A中的內容與工作寄存器Ri指向的地址單元中的內容、連同借位位相減,結果存在A中 x0dx0ax0dx0a[4]. 乘法指令(1條) x0dx0a這個指令的作用是把累加器A和寄存器B中的8位無符號數相乘,所得到的是16位乘積,這個結果低8位存在累加器A,而高8位存在寄存器B中。如果OV=1,說明乘積大於FFH,否則OV=0,但進位標志位CY總是等於0。 x0dx0ax0dx0aMUL AB ;(A)×(B)→(A)和(B) 累加器A中的內容與寄存器B中的內容相乘,結果存在A、B中 x0dx0ax0dx0a[5]. 除法指令(1條) x0dx0a這個指令的作用是把累加器A的8位無符號整數除以寄存器B中的8位無符號整數,所得到的商存在累加器A,而余數存在寄存器B中。除法運算總是使OV和進位標志位CY等於0。如果OV=1,表明寄存器B中的內容為00H,那麼執行結果為不確定值,表示除法有溢出。 x0dx0ax0dx0aDIV AB ;(A)÷(B)→(A)和(B) 累加器A中的內容除以寄存器B中的內容,所得到的商存在累加器A,而余數存在寄存器B中。 x0dx0ax0dx0a[6]. 加1指令(5條) x0dx0a這5條指令的的功能均為原寄存器的內容加1,結果送回原寄存器。上述提到,加1指令不會對任何標志有影響,如果原寄存器的內容為FFH,執行加1後,結果就會是00H。這組指令共有直接、寄存器、寄存器減間址等定址方式: x0dx0ax0dx0aINC A ;(A)+1→(A) 累加器A中的內容加1,結果存在A中 x0dx0aINC data ;(data)+1→(data) 直接地址單元中的內容加1,結果送回原地址單元中 x0dx0aINC @Ri ;((Ri))+1→((Ri)) 寄存器的內容指向的地址單元中的內容加1,結果送回原地址單元中 x0dx0aINC Rn ;(Rn)+1→(Rn)寄存器Rn的內容加1,結果送回原地址單元中 x0dx0aINC DPTR ;(DPTR)+1→(DPTR)數據指針的內容加1,結果送回數據指針中 x0dx0ax0dx0a在INC data這條指令中,如果直接地址是I/O,其功能是先讀入I/O鎖存器的內容,然後在CPU進行加1操作,再輸出到I/O上,這就是「讀—修改—寫」操作。 x0dx0ax0dx0a[7]. 減1指令(4條) x0dx0a這組指令的作用是把所指的寄存器內容減1,結果送回原寄存器,若原寄存器的內容為00H,減1後即為FFH,運算結果不影響任何標志位,這組指令共有直接、寄存器、寄存器間址等定址方式,當直接地址是I/O口鎖存器時,「讀—修改—寫」操作與加1指令類似。 x0dx0ax0dx0aDEC A ;(A)-1→(A)累加器A中的內容減1,結果送回累加器A中 x0dx0aDEC data ;(data)-1→(data)直接地址單元中的內容減1,結果送回直接地址單元中 x0dx0aDEC @Ri ;((Ri))-1→((Ri))寄存器Ri指向的地址單元中的內容減1,結果送回原地址單元中 x0dx0ax0dx0aDEC Rn ;(Rn)-1→(Rn)寄存器Rn中的內容減1,結果送回寄存器Rn中 x0dx0ax0dx0a[8]. 十進制調整指令(1條) x0dx0a在進行BCD碼運算時,這條指令總是跟在ADD或ADDC指令之後,其功能是將執行加法運算後存於累加器A中的結果進行調整和修正。 x0dx0ax0dx0aDA A x0dx0ax0dx0aMCS-51邏輯運算及移位指令 x0dx0ax0dx0a邏輯運算和移位指令共有25條,有與、或、異或、求反、左右移位、清0等邏輯操作,有直接、寄存器和寄存器間址等定址方式。這類指令一般不影響程序狀態字(PSW)標志。 x0dx0ax0dx0a[1]. 循環移位指令(4條) x0dx0a這4條指令的作用是將累加器中的內容循環左或右移一位,後兩條指令是連同進位位CY一起移位。 x0dx0ax0dx0aRL A ;累加器A中的內容左移一位 x0dx0aRR A ;累加器A中的內容右移一位 x0dx0aRLC A ;累加器A中的內容連同進位位CY左移一位 x0dx0aRRC A ;累加器A中的內容連同進位位CY右移一位 x0dx0ax0dx0a[2]. 累加器半位元組交換指令(1條) x0dx0a這條指令是將累加器中的內容高低半位元組互換,這在上一節中內容已有介紹。 x0dx0ax0dx0aSWAP A ; 累加器中的內容高低半位元組互換 x0dx0ax0dx0a[3]. 求反指令(1條) x0dx0a這條指令將累加器中的內容按位取反。 x0dx0ax0dx0aCPL A ; 累加器中的內容按位取反 x0dx0ax0dx0a[4]. 清零指令(1條) x0dx0a這條指令將累加器中的內容清0。 x0dx0ax0dx0aCLR A ; 0→(A),累加器中的內容清0 x0dx0ax0dx0a[5]. 邏輯與操作指令(6條) x0dx0a這組指令的作用是將兩個單元中的內容執行邏輯與操作。如果直接地址是I/O地址,則為「讀—修改—寫」操作。 x0dx0ax0dx0aANL A,data ;累加器A中的內容和直接地址單元中的內容執行與邏輯操作。結果存在寄存器A中。 x0dx0aANL data,#data ;直接地址單元中的內容和立即數執行與邏輯操作。結果存在直接地址單元中。 x0dx0aANL A,#data ;累加器A的內容和立即數執行與邏輯操作。結果存在累加器A中。 x0dx0aANL A,Rn ;累加器A的內容和寄存器Rn中的內容執行與邏輯操作。結果存在累加器A中。 x0dx0aANL data,A ;直接地址單元中的內容和累加器A的內容執行與邏輯操作。結果存在直接地址單元中。 x0dx0aANL A,@Ri ;累加器A的內容和工作寄存器Ri指向的地址單元中的內容執行與邏輯操作。結果存在累加器A中。 x0dx0ax0dx0a[6]. 邏輯或操作指令(6條) x0dx0a這組指令的作用是將兩個單元中的內容執行邏輯或操作。如果直接地址是I/O地址,則為「讀—修改—寫」操作。 x0dx0ax0dx0aORL A,data ;累加器A中的內容和直接地址單元中的內容執行邏輯或操作。結果存在寄存器A中。 x0dx0aORL data,#data ;直接地址單元中的內容和立即數執行邏輯或操作。結果存在直接地址單元中。 x0dx0aORL A,#data ;累加器A的內容和立即數執行邏輯或操作。結果存在累加器A中。 x0dx0aORL A,Rn ;累加器A的內容和寄存器Rn中的內容執行邏輯或操作。結果存在累加器A中。 x0dx0aORL data,A ;直接地址單元中的內容和累加器A的內容執行邏輯或操作。結果存在直接地址單元中。 x0dx0aORL A,@Ri ;累加器A的內容和工作寄存器Ri指向的地址單元中的內容執行邏輯或操作。結果存在累加器A中。 x0dx0ax0dx0a[7]. 邏輯異或操作指令(6條) x0dx0a這組指令的作用是將兩個單元中的內容執行邏輯異或操作。如果直接地址是I/O地址,則為「讀—修改—寫」操作。 x0dx0ax0dx0aXRL A,data ;累加器A中的內容和直接地址單元中的內容執行邏輯異或操作。結果存在寄存器A中。 x0dx0aXRL data,#data ;直接地址單元中的內容和立即數執行邏輯異或操作。結果存在直接地址單元中。 x0dx0aXRL A,#data ;累加器A的內容和立即數執行邏輯異或操作。結果存在累加器A中。 x0dx0aXRL A,Rn ;累加器A的內容和寄存器Rn中的內容執行邏輯異或操作。結果存在累加器A中。 x0dx0aXRL data,A ;直接地址單元中的內容和累加器A的內容執行邏輯異或操作。結果存在直接地址單元中。 x0dx0aXRL A,@Ri ;累加器A的內容和工作寄存器Ri指向的地址單元中的內容執行邏輯異或操作。結果存在累加器A中。 x0dx0ax0dx0aMCS-51控制轉移指令 x0dx0ax0dx0a控制轉移指令用於控製程序的流向,所控制的范圍即為程序存儲器區間,MCS-51系列單片機的控制轉移指令相對豐富,有可對64kB程序空間地址單元進行訪問的長調用、長轉移指令,也有可對2kB位元組進行訪問的絕對調用和絕對轉移指令,還有在一頁范圍內短相對轉移及其它無條件轉移指令,這些指令的執行一般都不會對標志位有影響。 x0dx0ax0dx0a[1]. 無條件轉移指令(4條) x0dx0a這組指令執行完後,程序就會無條件轉移到指令所指向的地址上去。長轉移指令訪問的程序存儲器空間為16地址64kB,絕對轉移指令訪問的程序存儲器空間為11位地址2kB空間。 x0dx0ax0dx0aLJMP addr16 ;addr16→(PC),給程序計數器賦予新值(16位地址) x0dx0ax0dx0aAJMP addr11 ;(PC)+2→(PC),addr11→(PC 10-0 )程序計數器賦予新值(11位地址),(PC 15-11 )不改變 x0dx0ax0dx0aSJMP rel ;(PC)+ 2 + rel→(PC)當前程序計數器先加上2再加上偏移量給程序計數器賦予新值 x0dx0ax0dx0aJMP @A+DPTR ;(A)+ (DPTR)→(PC),累加器所指向地址單元的值加上數據指針的值給程序計數器賦予新值 x0dx0ax0dx0a[2]. 條件轉移指令(8條) x0dx0a程序可利用這組豐富的指令根據當前的條件進行判斷,看是否滿足某種特定的條件,從而控製程序的轉向。 x0dx0ax0dx0aJZ rel ; A=0,(PC)+ 2 + rel→(PC),累加器中的內容為0,則轉移到偏移量所指向的地址,否則程序往下執行 x0dx0ax0dx0aJNZ rel ; A≠0,(PC)+ 2 + rel→(PC),累加器中的內容不為0,則轉移到偏移量所指向的地址,否則程序往下執行 x0dx0ax0dx0aCJNE A, data, rel ; A≠(data),(PC)+ 3 + rel→(PC),累加器中的內容不等於直接地址單元的內容,則轉移到偏移量所指向的地址,否則程序往下執行 x0dx0ax0dx0aCJNE A, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),累加器中的內容不等於立即數,則轉移到偏移量所指向的地址,否則程序往下執行 x0dx0ax0dx0aCJNE Rn, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Rn中的內容不等於立即數,則轉移到偏移量所指向的地址,否則程序往下執行 x0dx0ax0dx0aCJNE @Ri, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Ri指向地址單元中的內容不等於立即數,則轉移到偏移量所指向的地址,否則程序往下執行 x0dx0ax0dx0aDJNZ Rn, rel ; (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC)工作寄存器Rn減1不等於0,則轉移到偏移量所指向的地址,否則程序往下執行 x0dx0ax0dx0aDJNZ data, rel ; (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC)直接地址單元中的內容減1不等於0,則轉移到偏移量所指向的地址,否則程序往下執行 x0dx0ax0dx0a[3]. 子程序調用指令(1條) x0dx0a子程序是為了便於程序編寫,減少那些需反復執行的程序佔用多餘的地址空間而引入的程序分支,從而有了主程序和子程序的概念,需要反復執行的一些程序,我們在編程時一般都把它們編寫成子程序,當需要用它們時,就用一個調用命令使程序按調用的地址去執行,這就需要子程序的調用指令和返回指令。 x0dx0ax0dx0aLCALL addr16 ; 長調用指令,可在64kB空間調用子程序。此時(PC)+ 3→(PC),(SP)+ 1→(SP),(PC 7-0 )→(SP),(SP)+ 1→(SP),(PC 15-8 )→(SP),addr16→(PC),即分別從堆棧中彈出調用子程序時壓入的返回地址 x0dx0ax0dx0aACALL addr11 ; 絕對調用指令,可在2kB空間調用子程序,此時(PC)+ 2→(PC),(SP)+ 1→(SP),(PC 7-0 )→(SP),(SP)+ 1→(SP),(PC 15-8 )→(SP),addr11→(PC 10-0 ) x0dx0ax0dx0aRET ; 子程序返回指令。此時(SP)→(PC 15-8 ),(SP)- 1→(SP),(SP)→(PC 7-0 ),(SP)- 1→(SP) x0dx0ax0dx

閱讀全文

與單片機與指令相關的資料

熱點內容
會玩app賬號被禁封什麼原因 瀏覽:886
安卓手機如何將圖片文字轉換 瀏覽:856
拉臘pdf 瀏覽:751
受孕pdf 瀏覽:436
通達信真正牛主圖指標源碼 瀏覽:272
matlab遞歸演算法 瀏覽:177
阿里雲伺服器位置 瀏覽:615
ioncubelinux 瀏覽:469
每跨都要設置加密區嗎 瀏覽:519
單片機與dac0832晶元 瀏覽:388
安卓軟體變大怎麼變小 瀏覽:404
伺服器在隔壁樓怎麼實現通訊 瀏覽:877
打開命令行的程序 瀏覽:738
程序員離職做啥 瀏覽:808
u盤的加密區關閉 瀏覽:111
內蒙古金稅盤安全接入伺服器地址大全 瀏覽:295
漢化版pdf 瀏覽:779
江門加密鎖哪家不錯 瀏覽:639
cad轉pdf清晰 瀏覽:418
微信卡包能加密碼鎖嗎 瀏覽:566