新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > MCS-51單片機指令系統概述 1

        MCS-51單片機指令系統概述 1

        作者: 時間:2016-11-26 來源:網絡 收藏
        MCS-51共有111條指令,可分為5類:
        [1].數據傳送類指令(共29條)
        [2].算數運算類指令(共24條)
        [3].邏輯運算及移位類指令(共24條)
        [4].控制轉移類指令(共17條)[5].布爾變量操作類指令(共17條)

        一些特殊符號的意義

        在介紹指令系統前,我們先了解一些特殊符號的意義,這對今后程序的編寫都是相當有用的。
        電子元件郵購網

        Rn——當前選中的寄存器區的8個工作寄存器R0—R7(n=0-7)。
        Ri——當前選中的寄存器區中可作為地址寄存器的兩個寄存器R0和R1(i=0,1)
        direct—內部數據存儲單元的8位地址。包含0—127(255)內部存儲單元地址和特殊功能寄存地址。
        #data—指令中的8位常數。
        #data16—指令中的16位常數。
        addr16—用于LCALL和LJMP指令中的16目的地地址,目的地址的空間為64kB程序存儲器地址。
        #addr11—用于ACALL和AJMP指令中的11目的地地址,目的地址必須放在與下條指令第一個字節同一個2kB程序存儲器空間之中。
        rel—8位帶符號的偏移字節,用于所有的條件轉移和SJMP等指令中,偏移字節對于下條指令的第一個字節開始的-128——+127范圍內。

        單片機學習 HPOO

        本文引用地址:http://www.104case.com/article/201611/321694.htm
        @—間接寄存器尋址或基址寄存器的前綴。
        /—為操作的前綴,聲明對該位操作書取反。
        DPTR—數據指針。
        bit—內部RAM和特殊功能寄存器的直接尋址位。
        A—累加器。
        B—累加器B。用于乘法和除法指令中。
        C—進位標志位。
        (x)—某地址單元中的內容。
        ((x))—由X尋址單元中的內容。

        MCS-51的尋址方式

        尋址的“地址”即為操作數所在單元的地址,絕大部分指令執行時都需要用到操作數,那么到哪里去取得操作數呢?最易想到的就是告訴CPU操作數所在的地址單元,從那里可取得響應的操作數,這便是“尋址”之意。MCS-51的尋址方式很多,使用起來也相當方便,功能也很強大,靈活性強。這便是MCS-51指令系統“好用”的原因之一。下面我們分別討論幾種尋址方式的原理。
        杭州電子元件郵購網地址:www.hpoo.net


        [1].直接尋址
        指令中操作數直接以單元地址形式出現,例如:

        MOVA,68H

        這條指令的意義是把內部RAM中的68H單元中的數據內容傳送到累加器A中。值得注意的是直接尋址方式只能使用8位二進制地址,因此這種尋址方式僅限于內部RAM進行尋址。低128位單元在指令中直接以單元地址的形式給出。對于特殊功能寄存器可以使用其直接地址進行訪問,還可以以它們的符號形式給出,只是特殊功能寄存器只能用直接尋址方式訪問,而無其它方法。

        [2].寄存器尋址
        寄存器尋址對選定的8個工作寄存器R0-R7進行操作,也就是操作數在寄存器中,因此指定了寄存器就得到了操作數,寄存器尋址的指令中以寄存器的符號來表示寄存器,例如:

        MOVA,R1

        這條指令的意義是把所用的工作寄存器組中的R3的內容送到累加器A中。
        推薦電子制作郵購網站:www.hpoo.net

        值得一提的是工作狀態寄存器的選擇是通過程序狀態字寄存器來控制的,在這條指令前,應通過PSW設定當前工作寄存器組。

        [3].寄存器間接尋址
        寄存器尋址方式,寄存器中存放的是操作數,而寄存器間接尋址方式,寄存器中存放的則為操作數的地址,也即操作數是通過寄存器指向的地址單元得到的,這便是寄存器間接尋址名稱的由來。
        例如指令:

        MOVA,@R0

        這條指令的意義是R0寄存器指向地址單元中的內容送到累加器A中。假如R0=#56H,那么是將56H單元中的數據送到累加器A中。
        寄存器間接尋址方式可用于訪問內部RAM或外部數據存儲器。訪問內部RAM或外部數據存儲器的低256字節時,可通過R0和R1作為間接寄存器。然而有必要指出,內部RAM的高128字節地址與專用積存器的地址是重疊的,所以這種尋址方式不能用于訪問特殊功能寄存器。
        外部數據存儲器的空間為64kB,這時可采用DPTR作為間址寄存器進行訪問,指令如下:單片機設計

        MOVXA,@DPTR

        這條指令的意義是與上述類似,不再贅述。

        [4].立即尋址
        立即尋址就是把操作數直接在指令中給出,即操作數包含在指令中,指令操作碼的后面緊跟著操作數,一般把指令中的操作數稱為立即數,因此而得名。為了與直接尋址方式相區別,在立即數前加上“#”符號,例如:

        MOVXA,#0EH

        這條指令的意義是將0EH這個操作數送到累加器A中。

        [5].變址尋址
        變址尋址是以DPTR或PC作為基址寄存器,以累加器A作為變址寄存器,將兩寄存器的內容相加形成16位地址形成操作數的實際地址。例如:

        MOVA,@A+DPTR
        MOVXA,@A+PC
        JMP@A+DPTR單片機設計

        在這三條指令中,A作為偏移量寄存器,DPTR或PC作為變址寄存器,A作為無符號數與DPTR或PC的內容相加,得到訪問的實際地址。其中前兩條是程序存儲器讀指令,后一條是無條件轉移指令。

        [6].位尋址
        在MCS-51單片機中,RAM中的20H—2FH字節單元對應的位地址為00H—7FH,特殊功能寄存器中的某些位也可進行為尋址,這些單元既可以采用字節方式訪問它們,也可采用位尋址的方式訪問它們。

        [7].相對尋址
        相對尋址方式是為了程序的相對轉移而設計的,其夜里是以PC的內容為基址,加上給出的偏移量作為轉移地址,從而實現程序的轉移。轉移的目的地址可參見如下表達式:

        目的地址=轉移指令地址+轉移指令字接數+偏移量

        值得注意的是,偏移量是有正負號之分的,偏移量的取值范圍是當前PC值的-128—+127之間。

        推薦電子制作郵購網站:www.hpoo.net

        MCS-51數據傳送指令

        調頻FM發射話筒制作套件

        數據傳送指令共有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中

        杭州電子元件郵購網地址:www.hpoo.net


        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單元電子制作 HPOO

        [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地址中推薦電子制作郵購網站:www.hpoo.net
        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所指的存儲單元。單片機編程器 HPOO

        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所指的存儲單元中的內容互換
        電子制作 HPOO

        XCH A,data;(A)←→(data)累加器與直接地址單元中的內容互換
        XCHD A,@Ri;(A3-0)←→((Ri)3-0)累加器與工作寄存器Ri所指的存儲單元中的內容低半字節互換
        SWAP A;(A3-0)←→(A7-4)累加器中的內容高低半字節互換

        [9].16位數據傳送指令(1條)
        這條指令的功能是把16位常數送入數據指針寄存器。

        MOV DPTR,#data16;#dataH→(DPH),#dataL→(DPL)16位常數的高8位送到DPH,低8位送到DPL


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 兰考县| 清徐县| 大方县| 保山市| 扬中市| 吉林省| 龙江县| 芦山县| 铜川市| 定襄县| 朔州市| 公主岭市| 龙山县| 金沙县| 大方县| 奉节县| 泸水县| 六盘水市| 遵义市| 桂林市| 湘潭市| 聊城市| 双鸭山市| 张北县| 宁南县| 固始县| 吉林市| 永宁县| 鲁山县| 沧源| 望城县| 宁夏| 新建县| 霸州市| 桃源县| 新龙县| 拜城县| 香河县| 闻喜县| 光泽县| 南漳县|