日本高清不卡中文字幕-一起草草视频在线观看-亚洲精品一区二区三区色-国产亚洲精品免费视频

你好!歡迎來到深圳市穎特新科技有限公司!
語言
當(dāng)前位置:首頁 >> 技術(shù)中心 >> 單片機(jī)入門 >> 單片機(jī)的指令系統(tǒng)

單片機(jī)的指令系統(tǒng)

作者:admin 來源:不詳 發(fā)布時間:2018-05-08  瀏覽:9
一、數(shù)據(jù)傳送指令

數(shù)據(jù)傳送指令主要負(fù)責(zé)把數(shù)據(jù)、地址或立即數(shù)傳送到寄存器或存儲單元中。這類指令共有29條,可分為以下3大類:基本數(shù)據(jù)傳送指令,數(shù)據(jù)交換指令,棧操作指令。

執(zhí)行數(shù)據(jù)傳送指令時,除以累加器A為目的操作數(shù)的指令會對奇偶標(biāo)志位P有影響外,其余指令執(zhí)行時均不會影響任何標(biāo)志位。

1. 基本數(shù)據(jù)傳送指令

根據(jù)數(shù)據(jù)取自何方和傳到何方,MOV指令有著許多不同的形式。

(1)以累加器A為目的操作數(shù)類指令

這組指令的作用是把源操作數(shù)指向的內(nèi)容送到累加器A。有立即數(shù)、直接、寄存器和寄存器間接尋址方式:

MOV  A, #data  ; data→(A) 

MOV  A, direct  ;(direct)→(A) 

MOV  A, Ri   ;(Ri)→(A) 

MOV  A, @Rj  ;((Rj))→(A) 

(2) 以寄存器Ri為目的操作數(shù)的指令

這組指令的功能是把源操作數(shù)指定的內(nèi)容送到所選定的工作寄存器Ri中。有立即、直接和寄存器尋址方式: 

(3)以直接地址為目的操作數(shù)的指令

這組指令的功能是把源操作數(shù)指定的內(nèi)容送到由直接地址direct所選定的片內(nèi)RAM中。有立即、直接、寄存器和寄存器間接4種尋址方式:

(4)以間接地址為目的操作數(shù)的指令

這組指令的功能是把源操作數(shù)指定的內(nèi)容送到以Rj中的內(nèi)容為地址的片內(nèi)RAM中。有立即、直接和寄存器3種尋址方式

(5) 查表指令

這組指令的功能是對存放于程序存儲器中的數(shù)據(jù)表格進(jìn)行查找傳送,使用變址尋址方式:

MOVC  A, @A+DPTR   ;((A)+(DPTR))→(A)

MOVC  A, @A+PC    ;((PC))+1→(PC),((A)+(PC))→(A) 

(6) 累加器A與片外數(shù)據(jù)存儲器RAM傳送指令

 這組指令的作用是累加器A與片外RAM間的數(shù)據(jù)傳送。使用寄存器尋址方式:

 MOVX  @DPTR, A    ;(A)→((DPTR))

 MOVX  A,  @DPTR    ;((DPTR))→(A)

 MOVX  A,  @Rj    ;((Rj))→(A)

 MOVX  @Rj,A     ;(A)→((Rj))

(7)16位數(shù)據(jù)傳送指令

這條指令的功能是把16位常數(shù)送入數(shù)據(jù)指針寄存器。

MOV  DPTR, #data16   ; dataH→(DPH),dataL→(DPL)

2. 交換指令

MOV指令主要完成從一處到另一處的拷貝,XCH指令則可實現(xiàn)數(shù)據(jù)的雙向傳送。所有的操作都涉及到累加器A,可以把把累加器A中的內(nèi)容與源操作數(shù)所指的數(shù)據(jù)相互交換。

XCH  A, direct   ;(A)←→(direct)

XCH  A, Ri  ;(A)←→(Ri)

XCH  A, @Rj    ;(A)←→((Rj))

XCHD  A, @Rj   ;(A3-0)←→((Rj)3-0)

SWAP  A       ;(A3-0)←→(A7-4)

3. 入棧/出棧指令

這類指令的作用是把直接尋址單元的內(nèi)容傳送到堆棧指針SP所指的單元中,以及把SP所指單元的內(nèi)容送到直接尋址單元中。

⑴ PUSH指令

堆棧的入棧指令,該指令可以把某片內(nèi)RAM單元(低128字節(jié))或某專用寄存器的內(nèi)容入棧。

PUSH direct      ;(SP)+1→(SP),(direct)→(SP)

⑵ POP指令

堆棧的出棧指令,該指令用于恢復(fù)某片內(nèi)RAM單元(低128字節(jié))或某專用寄存器的內(nèi)容。

POP direct      ;(SP)→(direct),(SP)-1→(SP)

二、算術(shù)運算指令

在51系列單片機(jī)的指令系統(tǒng)中,提供了完備的加、減、乘、除算術(shù)運算指令及增量(加1)、減量(減1)運算,可處理不帶符號或帶符號的8/16二進(jìn)制數(shù)。除加1和減1指令外,算術(shù)運算指令會影響進(jìn)位、半進(jìn)位和溢出位三個標(biāo)志位。

1. 不帶進(jìn)位的加法指令

這組指令的作用是把立即數(shù),直接地址、工作寄存器及間接地址內(nèi)容與累加器A的內(nèi)容相加,運算結(jié)果存在A中。

ADD  A, #data  ;(A)+ data→(A) 

ADD  A, direct ;(A)+(direct)→(A)

ADD  A, Ri ;(A)+(Ri)→(A) 

ADD  A, @Rj ;(A)+((Rj))→(A)

本組指令的執(zhí)行將影響標(biāo)志位AC、CY、OV、P。當(dāng)和的第3、7位有進(jìn)位時,分別將AC,CY標(biāo)志位置位;否則復(fù)位。對于無符號數(shù),進(jìn)位標(biāo)志位CY=1,表示溢出;CY=0表示無溢出。帶符號數(shù)運算的溢出取決于第6、7位,若這2位中有一位產(chǎn)生進(jìn)位,而另一位不產(chǎn)生進(jìn)位,則溢出標(biāo)志位OV置位,否則被復(fù)位。

2. 帶進(jìn)位加法指令

這組指令的作用是把立即數(shù),直接地址、工作寄存器及間接地址內(nèi)容與累加器A的內(nèi)容以及進(jìn)位位C相加,運算結(jié)果存在A中。

本組指令執(zhí)行對標(biāo)志位AC、CY、OV、P的影響與ADD指令相同。

3. 增量指令

這組指令的的功能均為原寄存器的內(nèi)容加1,結(jié)果送回原寄存器。這組指令共有直接、寄存器、寄存器間接尋址等尋址方式:

INC  A  ;(A)+1→(A)

INC  direct  ;(direct)+1→(direct)

INC  Ri  ;(Rn)+1→(Ri)

INC  @Rj   ;((Rj))+1→((Rj)) 

INC  DPTR  ;(DPTR)+1→(DPTR)

增量指令不會對任何標(biāo)志有影響。

4. 帶借位減法指令

這組指令包含立即數(shù)、直接地址、間接地址及工作寄存器與累加器A連同借位位C內(nèi)容相減,結(jié)果送回累加器A中。

SUBB  A, #data   ;(A)- data -(C)→(A) 

SUBB  A, direct   ;(A)-(direct) - (C)→(A)

SUBB  A, Ri    ;(A)-(Ri) -(C)→(A) 

SUBB  A, @Rj   ;(A)-((Rj)) -(C)→(A) 

本指令執(zhí)行將影響標(biāo)志位AC、CY、OV、P。若第七位有借位,則將CY置位,否則CY復(fù)位。若第3位有錯位,則置位輔助進(jìn)位標(biāo)志AC,否則 AC復(fù)位。若第7和第6位中有一位需借位,而另一位不借位,則置位溢出標(biāo)志OV。

當(dāng)在進(jìn)行單字節(jié)或多字節(jié)減法前,不知道進(jìn)位標(biāo)志位CY的值,則應(yīng)在減法指令前先將CY復(fù)位清“0”。

5. 減量指令

這組指令的作用是把所指的寄存器內(nèi)容減1,結(jié)果送回原寄存器,這組指令共有直接、寄存器、寄存器間接尋址等尋址方式:

DEC  A   ;(A)-1→(A)

DEC  direct    ;(direct)-1→(direct)

DEC  Ri    ;(Ri)-1→(Ri)

DEC  @Rj   ;((Rj))-1→((Rj))

運算結(jié)果不影響任何標(biāo)志位。

6. 乘法指令

這條指令的作用是把累加器A和寄存器B中的8位無符號數(shù)相乘,所得到的是16位乘積,這個結(jié)果低8位存在累加器A,而高8位存在寄存器B中。

 MUL  AB ;(A)×(B)→(B)和(A)

乘法指令需要4個機(jī)器周期。

如果乘積大于255(0FFH),即B的內(nèi)容不為0時,則置位溢出標(biāo)志位OV,否則OV復(fù)位。進(jìn)位標(biāo)志位CY總是復(fù)位為0。

7. 除法指令

這條指令的作用是把累加器A的8位無符號整數(shù)除以寄存器B中的8位無符號整數(shù),所得到的商存在累加器A,而余數(shù)存在寄存器B中。

DIV  AB       ;(A)÷(B)→(A)和(B)

除法指令需要4個機(jī)器周期。

本指令總是將CY和OV標(biāo)志位復(fù)位。當(dāng)除數(shù)(B中內(nèi)容)為00H時,那么執(zhí)行結(jié)果將為不定值,則置位溢出標(biāo)志位OV。

8. 十進(jìn)制調(diào)整指令

在進(jìn)行BCD碼運算時,這條指令總是跟在ADD或ADDC指令之后,其功能是將執(zhí)行加法運算后存于累加器A中的結(jié)果進(jìn)行調(diào)整和修正。

 DA  A

三、邏輯運算指令

在51系列單片機(jī)的指令系統(tǒng)中提供的邏輯運算指令主要包括ANL(與),ORL(或),XRL(異或)等指令。

1. 邏輯與指令A(yù)NL

這組指令的功能是在指出的變量之間以位為基礎(chǔ)的邏輯與操作。操作數(shù)有寄存器尋址、直接尋址、寄存器間接尋址和立即尋址等尋址方式:

ANL  A, #data    ;(A)∧ data →(A)

ANL  A, direct  ;(A)∧ (direct) →(A)

ANL  A, Ri  ;(A)∧ (Ri)→(A)

ANL  A, @Rj  ;(A)∧ ((Rj))→(A)

ANL  direct, #data  ;(direct)∧ data →(direct)

ANL  direct, A   ;(direct)∧ (A) →(A)

2. 邏輯或指令ORL

這組指令的功能是在所指出的變量之間執(zhí)行以位為基礎(chǔ)的邏輯或操作,結(jié)果存到目的變量中去。操作數(shù)有立即尋址、直接尋址、寄存器尋址和寄存器間接尋址方式:

3. 邏輯異或指令XRL

這組指令的功能是在所指出的變量之間執(zhí)行以位為基礎(chǔ)的邏輯異或操作,結(jié)果存放到目的變量中去。操作數(shù)有立即尋址、直接尋址、寄存器尋址和寄存器間接尋址方式:

4. 循環(huán)移位指令

這4條指令的作用是將累加器中的內(nèi)容循環(huán)左或右移一位,后兩條指令是連同進(jìn)位位CY一起移位。

RL  A  ; 累加器A中的內(nèi)容左移一位。

RR  A   ; 累加器A中的內(nèi)容右移一位。

RLC  A   ; 累加器A中的內(nèi)容連同進(jìn)位位CY左移一位。

RRC  A  ; 累加器A中的內(nèi)容連同進(jìn)位位CY右移一位。

5. 求反指令

這條指令將累加器中的內(nèi)容按位取反。

CPL  A  ; 累加器中的內(nèi)容按位取反。

6. 清零指令

這條指令將累加器中的內(nèi)容清0。

CLR  A   ; 0→(A),累加器中的內(nèi)容清0。

四、位操作類指令

MCS-51單片機(jī)內(nèi)部有一個布爾處理機(jī),對位地址空間具有豐富的位操作指令。

1. 位傳送指令

 這2條指令的功能是把由源操作數(shù)指出的布爾變量送到目的操作數(shù)指定的位中去。其中一個操作數(shù)必須為進(jìn)位標(biāo)志,另一個可以是任何直接尋址位。 

MOV  C, bit    ; bit→CY,某位數(shù)據(jù)送CY。

MOV  bit, C   ; CY→bit,CY數(shù)據(jù)送某位。 

本組指令不影響其他寄存器和標(biāo)志位。

2. 位變量修改指令

這些指令對CY及可尋址位進(jìn)行置位或復(fù)位操作

CLR  C   ; 0→CY,復(fù)位CY。

CLR  bit   ; 0→bit,復(fù)位某一位。

SETB  C   ; 1→CY,置位CY。

SETB  bit    ; 1→bit,置位某一位。  

本組指令不影響其他標(biāo)志。

3. 位變量邏輯指令

位運算都是邏輯運算,有與、或、非三種指令

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       ; ()→bit

4. 位變量條件轉(zhuǎn)移指令

位變量條件轉(zhuǎn)移指令是以位的狀態(tài)作為實現(xiàn)程序轉(zhuǎn)移的判斷條件:

JC  rel   ; (CY)=1轉(zhuǎn)移,(PC)+2+rel→PC,否則程序往下執(zhí)行,(PC)+2→PC。

JNC  rel    ; (CY)=0轉(zhuǎn)移,(PC)+2+rel→PC,否則程序往下執(zhí)行,(PC)+2→PC。

JB  bit, rel   ;位狀態(tài)為1轉(zhuǎn)移。

JNB  bit, rel   ;位狀態(tài)為0轉(zhuǎn)移。

JBC  bit, rel     ;位狀態(tài)為1轉(zhuǎn)移,并使該位清“0”。

五、控制轉(zhuǎn)移指令

一般情況下指令是順序執(zhí)行的逐條執(zhí)行的,但實際上程序不可能全部順序執(zhí)行而經(jīng)常需要改變程序的執(zhí)行流程,常用的控制轉(zhuǎn)移指令有:

1. 無條件轉(zhuǎn)移指令

這組指令執(zhí)行完后,程序就會無條件轉(zhuǎn)移到指令所指向的地址上去。長轉(zhuǎn)移指令訪問的程序存儲器空間為16地址64kB,絕對轉(zhuǎn)移指令訪問的程序存儲器空間為11位地址2kB空間。

LJMP  addr16   ; addr16→(PC)

AJMP  addr11  ;(PC)+2→(PC),addr11→(PC10-0)

SJMP  rel     ;(PC)+ 2 + rel→(PC)

JMP  @A+DPTR  ;(A)+(DPTR)→(PC)

2. 條件轉(zhuǎn)移指令

條件轉(zhuǎn)移指令是依某種特定條件轉(zhuǎn)移的指令。條件滿足時轉(zhuǎn)移(相當(dāng)于一條相對轉(zhuǎn)移指令),條件不滿足時則順序執(zhí)行下面的指令。目的地址在下一條指令的起始地址為中心的256個字節(jié)范圍中(-128~+127)。當(dāng)條件滿足時,先把PC指向指向下一條指令的第一個字節(jié)地址,再把有符號的相對偏移量加到PC上,計算出轉(zhuǎn)向地址。

JZ  rel       ; A=0,(PC)+ 2 + rel→(PC)

JNZ  rel   ; A≠0,(PC)+ 2 + rel→(PC)

3. 比較不相等轉(zhuǎn)移指令

這組指令的功能是比較前面兩個操作數(shù)的大小。如果它們的值不相等則轉(zhuǎn)移。在PC指向下一條指令的起始地址后,通過把指令最后一個字節(jié)的有符號的相對偏移量加到PC上,并計算出轉(zhuǎn)向地址。操作數(shù)有寄存器尋址、直接尋址,寄存器間接尋址和立即尋址等方式。

CJNE  A, direct, rel   ; A≠(direct),(PC)+ 3 + rel→(PC)

CJNE  A, #data, rel  ; A≠data,(PC)+ 3 + rel→(PC)

CJNE  Ri, #data, rel   ; A≠data,(PC)+ 3 + rel→(PC)

CJNE  @Rj, #data, rel  ; A≠data,(PC)+ 3 + rel→(PC)

4. 減1不為0轉(zhuǎn)移指令

這組指令把源操作數(shù)減1,結(jié)果回送到源操作數(shù)中去,如果結(jié)果不為0則轉(zhuǎn)移,跳到標(biāo)號rel處執(zhí)行,等于0就執(zhí)行下一條指令。源操作數(shù)有寄存器尋址和直接尋址方式。該指令通常用于實現(xiàn)循環(huán)計數(shù)。

 DJNZ  Ri, rel      ;(Ri)-1→(Ri),(Ri)≠0,(PC)+ 2 + rel→(PC)

DJNZ direct, rel    ;(direct)-1→(direct),(direct)≠0,(PC)+ 2 + rel→(PC)

5. 子程序返回指令

編程時一般都把需要反復(fù)執(zhí)行的一些程序編寫成子程序,當(dāng)需要用它們時,就用一個調(diào)用命令使程序按調(diào)用的地址去執(zhí)行,這就需要子程序的調(diào)用指令和返回指令。

LCALL  addr16 ;長調(diào)用指令,可在64kB空間調(diào)用子程序。此時(PC)+ 3→(PC),(SP)+ 1→(SP),(PC7-0)→(SP),(SP)+ 1→(SP),(PC15-8)→(SP),addr16→(PC),即分別從堆棧中彈出調(diào)用子程序時壓入的返回地址。

ACALL  addr11  ;絕對調(diào)用指令,可在2kB空間調(diào)用子程序,此時(PC)+ 2→(PC),(SP)+ 1→(SP),(PC7-0)→(SP),(SP)+ 1→(SP),(PC15-8)→(SP),addr11→(PC10-0)。

RET    ; 子程序返回指令。此時(SP)→(PC15-8),(SP)- 1→(SP),(SP)→(PC7-0),(SP)- 1→(SP)RET指令通常安排在子程序的末尾,使程序能從子程序返回到主程序。

RETI   ; 中斷返回指令,除具有RET功能外,還具有恢復(fù)中斷邏輯的功能,需注意的是,RETI指令不能用RET代替 。   

空操作也是CPU控制指令,它沒有使程序轉(zhuǎn)移的功能,一般用于軟件延時。指令為:NOP

編輯:admin  最后修改時間:2018-05-08

聯(lián)系方式

0755-82591179

傳真:0755-82591176

郵箱:vicky@yingtexin.net

地址:深圳市龍華區(qū)民治街道民治大道973萬眾潤豐創(chuàng)業(yè)園A棟2樓A08

Copyright © 2014-2023 穎特新科技有限公司 All Rights Reserved.  粵ICP備14043402號-4

治县。| 白银市| 山阳县| 洪洞县| 永川市| 化隆| 东港市| 靖宇县| 南城县| 绩溪县| 宁化县| 沽源县| 三江| 西昌市| 衡东县| 海阳市| 河北区| 万盛区| 余江县| 房产| 彭阳县| 镶黄旗| 双流县| 肇州县| 合江县| 定结县| 汾阳市| 建宁县| 正阳县| 澄城县| 阜康市| 平武县| 郁南县| 汉源县| 壶关县| 财经| 元江| 比如县| 德庆县| 柘荣县| 敦化市|