<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > MCS-51單片機(jī)指令系統(tǒng)概述 2

          MCS-51單片機(jī)指令系統(tǒng)概述 2

          作者: 時(shí)間:2016-11-26 來(lái)源:網(wǎng)絡(luò) 收藏
          MCS-51邏輯運(yùn)算及移位指令杭州電子元件郵購(gòu)網(wǎng)地址:www.hpoo.net

          邏輯運(yùn)算和移位指令共有25條,有與、或、異或、求反、左右移位、清0等邏輯操作,有直接、寄存器和寄存器間址等尋址方式。這類(lèi)指令一般不影響程序狀態(tài)字(PSW)標(biāo)志。

          [1].循環(huán)移位指令(4條)
          這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右移一位調(diào)頻FM發(fā)射話(huà)筒制作套件

          [2].累加器半字節(jié)交換指令(1條)
          這條指令是將累加器中的內(nèi)容高低半字節(jié)互換,這在上一節(jié)中內(nèi)容已有介紹。

          SWAP A; 累加器中的內(nèi)容高低半字節(jié)互換

          [3].求反指令(1條)
          這條指令將累加器中的內(nèi)容按位取反。

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

          [4].清零指令(1條)
          這條指令將累加器中的內(nèi)容清0。

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

          本文引用地址:http://www.ex-cimer.com/article/201611/321693.htm

          電子元件郵購(gòu)



          [5].邏輯與操作指令(6條)
          這組指令的作用是將兩個(gè)單元中的內(nèi)容執(zhí)行邏輯與操作。如果直接地址是I/O地址,則為“讀—修改—寫(xiě)”操作。

          ANL A,data;累加器A中的內(nèi)容和直接地址單元中的內(nèi)容執(zhí)行與邏輯操作。結(jié)果存在寄存器A中。
          ANL data,#data;直接地址單元中的內(nèi)容和立即數(shù)執(zhí)行與邏輯操作。結(jié)果存在直接地址單元中。
          ANL A,#data;累加器A的內(nèi)容和立即數(shù)執(zhí)行與邏輯操作。結(jié)果存在累加器A中。
          ANL A,Rn;累加器A的內(nèi)容和寄存器Rn中的內(nèi)容執(zhí)行與邏輯操作。結(jié)果存在累加器A中。

          單片機(jī)編程器 HPOO


          ANL data,A;直接地址單元中的內(nèi)容和累加器A的內(nèi)容執(zhí)行與邏輯操作。結(jié)果存在直接地址單元中。
          ANL A,@Ri;累加器A的內(nèi)容和工作寄存器Ri指向的地址單元中的內(nèi)容執(zhí)行與邏輯操作。結(jié)果存在累加器A中。

          [6].邏輯或操作指令(6條)
          這組指令的作用是將兩個(gè)單元中的內(nèi)容執(zhí)行邏輯或操作。如果直接地址是I/O地址,則為“讀—修改—寫(xiě)”操作。

          ORL A,data;累加器A中的內(nèi)容和直接地址單元中的內(nèi)容執(zhí)行邏輯或操作。結(jié)果存在寄存器A中。
          ORL data,#data;直接地址單元中的內(nèi)容和立即數(shù)執(zhí)行邏輯或操作。結(jié)果存在直接地址單元中。

          調(diào)頻FM發(fā)射話(huà)筒制作套件


          ORL A,#data;累加器A的內(nèi)容和立即數(shù)執(zhí)行邏輯或操作。結(jié)果存在累加器A中。
          ORL A,Rn;累加器A的內(nèi)容和寄存器Rn中的內(nèi)容執(zhí)行邏輯或操作。結(jié)果存在累加器A中。
          ORL data,A;直接地址單元中的內(nèi)容和累加器A的內(nèi)容執(zhí)行邏輯或操作。結(jié)果存在直接地址單元中。
          ORL A,@Ri;累加器A的內(nèi)容和工作寄存器Ri指向的地址單元中的內(nèi)容執(zhí)行邏輯或操作。結(jié)果存在累加器A中。

          [7].邏輯異或操作指令(6條)
          這組指令的作用是將兩個(gè)單元中的內(nèi)容執(zhí)行邏輯異或操作。如果直接地址是I/O地址,則為“讀—修改—寫(xiě)”操作。

          電子制作 HPOO



          XRL A,data;累加器A中的內(nèi)容和直接地址單元中的內(nèi)容執(zhí)行邏輯異或操作。結(jié)果存在寄存器A中。
          XRL data,#data;直接地址單元中的內(nèi)容和立即數(shù)執(zhí)行邏輯異或操作。結(jié)果存在直接地址單元中。
          XRL A,#data;累加器A的內(nèi)容和立即數(shù)執(zhí)行邏輯異或操作。結(jié)果存在累加器A中。
          XRL A,Rn;累加器A的內(nèi)容和寄存器Rn中的內(nèi)容執(zhí)行邏輯異或操作。結(jié)果存在累加器A中。
          XRL data,A;直接地址單元中的內(nèi)容和累加器A的內(nèi)容執(zhí)行邏輯異或操作。結(jié)果存在直接地址單元中。單片機(jī)學(xué)習(xí) HPOO
          XRL A,@Ri;累加器A的內(nèi)容和工作寄存器Ri指向的地址單元中的內(nèi)容執(zhí)行邏輯異或操作。結(jié)果存在累加器A中。電子制作 HPOO

          MCS-51控制轉(zhuǎn)移指令電子制作 HPOO

          控制轉(zhuǎn)移指令用于控制程序的流向,所控制的范圍即為程序存儲(chǔ)器區(qū)間,MCS-51系列單片機(jī)的控制轉(zhuǎn)移指令相對(duì)豐富,有可對(duì)64kB程序空間地址單元進(jìn)行訪問(wèn)的長(zhǎng)調(diào)用、長(zhǎng)轉(zhuǎn)移指令,也有可對(duì)2kB字節(jié)進(jìn)行訪問(wèn)的絕對(duì)調(diào)用和絕對(duì)轉(zhuǎn)移指令,還有在一頁(yè)范圍內(nèi)短相對(duì)轉(zhuǎn)移及其它無(wú)條件轉(zhuǎn)移指令,這些指令的執(zhí)行一般都不會(huì)對(duì)標(biāo)志位有影響。

          [1].無(wú)條件轉(zhuǎn)移指令(4條)
          這組指令執(zhí)行完后,程序就會(huì)無(wú)條件轉(zhuǎn)移到指令所指向的地址上去。長(zhǎng)轉(zhuǎn)移指令訪問(wèn)的程序存儲(chǔ)器空間為16地址64kB,絕對(duì)轉(zhuǎn)移指令訪問(wèn)的程序存儲(chǔ)器空間為11位地址2kB空間。

          LJMP addr16;addr16→(PC),給程序計(jì)數(shù)器賦予新值(16位地址)

          AJMP addr11;(PC)+2→(PC),addr11→(PC10-0)程序計(jì)數(shù)器賦予新值(11位地址),(PC15-11)不改變單片機(jī)設(shè)計(jì)

          SJMP rel;(PC)+ 2 + rel→(PC)當(dāng)前程序計(jì)數(shù)器先加上2再加上偏移量給程序計(jì)數(shù)器賦予新值

          JMP @A+DPTR;(A)+ (DPTR)→(PC),累加器所指向地址單元的值加上數(shù)據(jù)指針的值給程序計(jì)數(shù)器賦予新值

          [2].條件轉(zhuǎn)移指令(8條)
          程序可利用這組豐富的指令根據(jù)當(dāng)前的條件進(jìn)行判斷,看是否滿(mǎn)足某種特定的條件,從而控制程序的轉(zhuǎn)向。

          JZ rel; A=0,(PC)+ 2 + rel→(PC),累加器中的內(nèi)容為0,則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)行

          單片機(jī)學(xué)習(xí) HPOO



          JNZ rel; A≠0,(PC)+ 2 + rel→(PC),累加器中的內(nèi)容不為0,則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)行

          CJNE A, data, rel; A≠(data),(PC)+ 3 + rel→(PC),累加器中的內(nèi)容不等于直接地址單元的內(nèi)容,則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)行

          CJNE A, #data, rel; A≠#data,(PC)+ 3 + rel→(PC),累加器中的內(nèi)容不等于立即數(shù),則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)行

          CJNE Rn, #data, rel; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Rn中的內(nèi)容不等于立即數(shù),則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)行單片機(jī)學(xué)習(xí) HPOO

          CJNE @Ri, #data, rel; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Ri指向地址單元中的內(nèi)容不等于立即數(shù),則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)行

          DJNZ Rn, rel; (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC)工作寄存器Rn減1不等于0,則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)行

          DJNZ data, rel; (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC)直接地址單元中的內(nèi)容減1不等于0,則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)行

          [3].子程序調(diào)用指令(1條)
          子程序是為了便于程序編寫(xiě),減少那些需反復(fù)執(zhí)行的程序占用多余的地址空間而引入的程序分支,從而有了主程序和子程序的概念,需要反復(fù)執(zhí)行的一些程序,我們?cè)诰幊虝r(shí)一般都把它們編寫(xiě)成子程序,當(dāng)需要用它們時(shí),就用一個(gè)調(diào)用命令使程序按調(diào)用的地址去執(zhí)行,這就需要子程序的調(diào)用指令和返回指令。
          電子制作 HPOO


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

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

          RET; 子程序返回指令。此時(shí)(SP)→(PC15-8),(SP)- 1→(SP),(SP)→(PC7-0),(SP)- 1→(SP)

          RETI; 中斷返回指令,除具有RET功能外,還具有恢復(fù)中斷邏輯的功能,需注意的是,RETI指令不能用RET代替杭州電子元件郵購(gòu)網(wǎng)地址:www.hpoo.net

          [4].空操作指令(1條)
          這條指令將累加器中的內(nèi)容清0。

          NOP; 這條指令除了使PC加1,消耗一個(gè)機(jī)器周期外,沒(méi)有執(zhí)行任何操作??捎糜诙虝r(shí)間的延時(shí)

          電子制作 HPOO

          MCS-51布爾變量操作指令調(diào)頻FM發(fā)射話(huà)筒制作套件

          布爾處理功能是MCS-51系列單片機(jī)的一個(gè)重要特征,這是出于實(shí)際應(yīng)用需要而設(shè)置的。布爾變量也即開(kāi)關(guān)變量,它是以位(bit)為單位進(jìn)行操作的。

          在物理結(jié)構(gòu)上,MCS-51單片機(jī)有一個(gè)布爾處理機(jī),它以進(jìn)位標(biāo)志做為累加位,以?xún)?nèi)部RAM可尋址的128個(gè)為存儲(chǔ)位。

          既然有布爾處理機(jī)功能,所以也就有相應(yīng)的布爾操作指令集,下面我們分別談?wù)摗?br />
          [1].位傳送指令(2條)
          位傳送指令就是可尋址位與累加位CY之間的傳送,指令有兩條。

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

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

          推薦電子制作郵購(gòu)網(wǎng)站:www.hpoo.net



          [2].位置位復(fù)位指令(4條)
          這些指令對(duì)CY及可尋址位進(jìn)行置位或復(fù)位操作,共有四條指令。

          CLR C; 0→CY,清CY

          CLR bit; 0→bit,清某一位

          SETB C; 1→CY,置位CY

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

          [3].位運(yùn)算指令(6條)調(diào)頻FM發(fā)射話(huà)筒制作套件
          位運(yùn)算都是邏輯運(yùn)算,有與、或、非三種指令,共六條。

          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

          杭州電子元件郵購(gòu)網(wǎng)地址:www.hpoo.net



          CPL bit;()→bir

          [4].位控制轉(zhuǎn)移指令(5)
          位控制轉(zhuǎn)移指令是以位的狀態(tài)作為實(shí)現(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)移。
          調(diào)頻FM發(fā)射話(huà)筒制作套件


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

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

          后三條指令都是三字節(jié)指令,如果條件滿(mǎn)足,(PC)+3+rel→PC,否則程序往下執(zhí)行,(PC)+3→PC。



          關(guān)鍵詞: MCS-51單片機(jī)指令系

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();