⑴ 單片機系統指令的功能指令
一、位元組交換指令
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相與不變。
⑵ 單片機的一條指令: 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中,然後再用讀寫命令。
⑶ 單片機 CLR 指令的問題
可以用來操作位。
單片機中CLR指令其實只有兩類、三種用法:
第一類:位元組操作:
僅有將A清0一條指令,即:CLR A
第二類:位操作
1、CLR C:將進位標志位CY(即平時所說的C)清零;這是一條獨立的指令,只清除C,機器碼只有1個位元組(0C3H);
2、CLR bit:將位地址為bit的位清0;bit可以是單片機中任意可進行位定址的位,機器碼占兩個位元組(0C2H,位地址)。
對ACC.1清0使用CLR命令是可以的,因為A的每一位都有相應的位地址,都可以進行位定址。如果編譯有錯只能說明編譯器不支持ACC.1的寫法,你可以嘗試直接使用ACC.1的位地址0E1H來替代,即:
CLR 0E1H
肯定是可以的。
⑷ 單片機命令MOV、MOVX、MOVC 有什麼區別
匯編語言指令,MOV用於對單片機內部數據存儲器定址,MOVC用於對單片機內部程序存儲器區進行定址,MOVX用於對外部數據存儲器區進行定址,各種單片機的說明書中指令系統均有詳細介紹。
數據傳送類指令
MOV 內部 RAM ( 包括特殊功能寄存器)的 數據傳送
MOVX 外部擴展 RAM 的 數據傳送
MOVC 程序 存儲器 的 讀取數據 ( 包括數據表)
⑸ 51單片機指令
TF1是定時器1溢出標志位,$是取地址。JNB TF1,$ 實現的功能是查詢定時器1溢出標志位,如果為0,跳轉到本條指令繼續執行(即繼續查詢)直到定時時間到,TF1置位,才執行下一條指令。
給你注釋一下:
MOV TMOD,#10H //設置定時器工作方式(定時器1,工作方式2)
SETB TR1 //開啟定時器1
LOOP: MOV TH1,#0D8H //裝初值D8F0H 即55536,定時10mS(晶振12M)時間隨晶振改變
MOV TL1,#0F0H
JNB TF1,$ //查詢等待定時器1中斷
CLR TF1 //定時器溢出標志位清0(定時時間到後硬體自動給TF1置位,需軟體清0)
CPL P1.1 //P1.1取反
SJMP LOOP //跳到LOOP處循環(是個死循環)
該段程序實現的功能是:每隔10mS對P1.1取反一次。(10mS當然是晶振為12M的情況下)
⑹ 單片機中指令SETB代表什麼意思
單片機中指令SETB代表MCS-51的位操作命令。
作為匯編指令,SETB可以實現其後面的那個寄存器的位置為1。就SETB而言,定時/計數器0的中斷允許位ET0為1時,單片機會響應定時/計數器0的溢出中斷,但為0時,單片機不響應。其中的具體情況如下:
1、SETB C(進位標志置位指令)
①指令代碼:D3H;
②指令功能:置進位位;
③操作內容:C←1;
④位元組數: 1;
⑤機器周期:1。
2、SETB bit(直接定址位置位指令)
①指令代碼:D2H;
②指令功能:置直接地址位;
③操作內容:bit←1;
④位元組數: 2;
⑤機器周期:1。
(6)單片機命令擴展閱讀
SETB的相關情況
對於指令SETB來說,單片機的基本功能如下:
1、8位數據匯流排,16位地址匯流排的CPU。
2、具有布爾處理能力和位處理能力。
3、採用哈佛結構,程序存儲器與數據存儲器地址空間各自獨立,便於程序設計。
4、相同地址的64KB程序存儲器和64KB數據存儲器。
5、0-8KB片內程序存儲器(8031無,8051有4KB,8052有8KB,89C55有20KB)。
6、128位元組片內數據存儲器(8051有256位元組)。
7、32根雙向並可以按位定址的I/O線。
8、兩個16位定時/計數器(8052有3個)。
9、一個全雙工的串列I/O介面。
10、多個中斷源的中斷結構,具有兩個中斷優先順序。
11、片內時鍾振盪器。
⑺ 單片機通常指令表示形式有那些
從分類上來說,有以下幾種類別的指令(51為例)
1、數據傳送指令
2、算術運算指令
3、邏輯運算指令
4、控制轉移指令
5、位操作指令
從定址方式上分為以下幾種:
1、立即數定址
2、直接定址
3、寄存器定址
4、寄存器間接定址
5、變址定址
6、位定址
7、相對定址