• <tbody id="w8jhq"><dfn id="w8jhq"><pre id="w8jhq"></pre></dfn></tbody>
  • <fieldset id="w8jhq"><pre id="w8jhq"></pre></fieldset>

    久久黄色 视频|我草AV|AV在线网站导航|色色97激情|无码人妻一区二区有奶水|日韩精品|大香蕉97视频|成人a站免费|日本黄色片|久久久久无码AV

    久久黄色 视频|我草AV|AV在线网站导航|色色97激情|无码人妻一区二区有奶水|日韩精品|大香蕉97视频|成人a站免费|日本黄色片|久久久久无码AV

    久久黄色 视频|我草AV|AV在线网站导航|色色97激情|无码人妻一区二区有奶水|日韩精品|大香蕉97视频|成人a站免费|日本黄色片|久久久久无码AV

    技術(shù)熱線: 4007-888-234
    設(shè)計開發(fā)

    專注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命

    開發(fā)工具

    提供開發(fā)工具、應用測試 完善的開發(fā)代碼案例庫分享

    技術(shù)支持

    從全面的產(chǎn)品導入到強大技術(shù)支援服務 全程貼心伴隨服務,創(chuàng)造無限潛能!

    新品推廣

    提供新的芯片及解決方案,提升客戶產(chǎn)品競爭力

    新聞中心

    提供最新的單片機資訊,行業(yè)消息以及公司新聞動態(tài)

    PIC12C5XX 單片機指令集+程序設(shè)計技巧

    更新時間: 2019-03-23
    閱讀量:3023

    十年專注單片機方案開發(fā)的方案公司英銳恩,分享PIC12C5XX 單片機指令集及程序設(shè)計技巧。英銳恩現(xiàn)提供服務產(chǎn)品涉及主控芯片:8位單片機、16位單片機、32位單片機及各類運算放大器等。

    PIC12C5XX 單片機指令概述 

    PIC12C5XX單片機每條指令長12位,指令由操作碼和操作數(shù)組成。PIC12C5XX單片機共有33條指令,按操作分成三大類: 1、面向字節(jié)操作類 2、面向位操作類 3、常數(shù)操作和控制操作類。

    全部指令如表2.1所示。

    面向字節(jié)操作類指令

    (11-6)

    (5)

    (4-0)


    OPCODE

    d

    f(FILE#)






    二進制代碼 HEX 名稱 助記符,操作數(shù) 操作



    狀態(tài)影響

    0000 0000 0000

    000

    空操作

    NOP





    0000 001f ffff

    02f

    W送到f

    MOVWF f

    W→f



    1,4

    0000 0100 0000

    040

    W清零

    CLRW -

    0→W



    Z


    0000 011f ffff

    06f

    f清零

    CLRF f

    0→f



    Z

    4

    0000 10df ffff

    08f

    f減去W

    SUBWF f,d

    f-W→d



    C,DC,Z

    1,2,4

    0000 11df ffff

    0Cf

    f遞減

    DECF f,d

    f-1→d



    Z

    2,4

    0001 00df ffff

    10f

    W和f做或運算

    IORWF f,d

    W∨f→d



    Z

    2,4

    0001 01df ffff

    14f

    W和f做與運算

    ANDWF f,d

    W∧f→d



    Z

    2,4

    0001 10df ffff

    18f

    W和f做異或運算

    XORWF f,d

    W〇f→d



    Z

    2,4 

    0001 11df ffff

    1Cf

    W加f

    ADDWF f,d

    W+f→d



    C,DC,Z

    1,2,4

    0010 00df ffff

    20f

    傳送f到d

    MOVF f,d

    f→d



    Z

    2,4

    0010 01df ffff

    24f

    f取補

    COMF f,d

    f→d



    Z

    2,4

    0010 10df ffff

    28f

    f遞增

    INCF f,d

    f+1→d



    Z

    2,4

    0010 11df ffff

    2Cf

    f遞減,為0則跳

    DECFSZ f,d

    f-1→d,skip if zero

    Z

    2,4

    0011 00df ffff

    30f

    f循環(huán)右移

    RRF f,d

    f(n)→d(n-1),f(0)→C,C→d(7)

    C

    2,4

    0011 01df ffff

    34f

    f循環(huán)左移

    RLF f,d

    f(n)→d(n+1),f(7)→C,C→d(0)

    C

    2,4

    0011 10df ffff

    38f

    f半字節(jié)交換

    SWAPF f,d

    f(0.3)←→f(4-7)→d

    Z

    2,4

    0011 11df ffff

    3Cf

    f遞增,為0則跳

    INCFSZ f,d

    f+1→d,skip if zero

    Z

    2,4 






    面向位操作類指令

    (11-8)

    (7-5)

    (4-0)



    OPCODE

    b(BIT#)

    f(FILE#)







    二進制代碼 HEX 名稱 助記符,操作數(shù) 操作



    狀態(tài)影響

    0100 bbbf ffff

    4bf

    清除f的位b

    BCF f,b

    0→f(b)

    Z

    2,4

    0101 bbbf ffff

    5bf

    設(shè)置f的位b

    BSF f,b

    1→f(b)

    Z

    2,4

    0110 bbbf ffff

    6bf

    測試f的位b,為0則跳

    BTFSC f,b

    Test bit(b) in file(f):Skip if clear

    Z


    0111 bbbf ffff

    7bf

    測試f的位b,為0則跳

    BTFSS f,b

    Test bit(b) in file(f):Skip if clear

    Z






    常數(shù)操作和控制操作類指令

    (11-8)

    (7-0)



    OPCODE

    k(LITERAL)







    二進制代碼 HEX 名稱 助記符,操作數(shù) 操作



    狀態(tài)影響

    0000 0000 0010

    002

    寫OPTION寄存器

    OPTION -

    W→OPTION register


    0000 0000 0011

    003

    進入睡眠狀態(tài)

    SLEEP -

    0→WDT,stop oscillator

    TO,PD


    0000 0000 0100

    004

    清除WDT計時器

    CLRWDT -

    0→WDT(and prescaler,if assigned)

    TO,PD


    0000 0000 0fff

    00f

    設(shè)置I/O狀態(tài)

    TRIS f

    W→I/O control register f

    3

    1000 kkkk kkkk

    8kk

    子程序帶參數(shù)返回

    RETLW k

    k→W,Stack→PC


    1001 kkkk kkkk

    9kk

    調(diào)用子程序

    CALL k

    PC+1→Stack,K→PC

    1

    101k kkkk kkkk

    Akk

    跳轉(zhuǎn)(K為9位)

    GOTO k

    k→PC(9 bits)


    1100 kkkk kkkk

    Ckk

    常數(shù)置入W

    MOVLW k

    k→W

    Z


    1101 kkkk kkkk

    Dkk

    常數(shù)和W做或運算

    IORLW k

    k∨W→W

    Z


    1110 kkkk kkkk

    Ekk

    常數(shù)和W做與運算

    ANDLW k

    k∧W→W

    Z


    1111 kkkk kkkk

    Fkk

    常數(shù)和W做異或運算

    XORLW k

    k○W→W

    Z



    表2.1 PIC12C5XX 指令集

    注:1、除GOTO指令外,任何有關(guān)寫PC(F2)的指令(例如 CALL、MOVWF 2)都將會把PC寄存器的第9位清零。

      2、若對I/O口寄存器進行操作,如“SUBWF 6,1”,則使用的F6的值是當前GP口上的狀態(tài)值,而非GP口輸出鎖存器里的值。

    3、指令“TRIS 6”將W寄存器中的內(nèi)容寫入GP的I/O口控制寄存器中:“1”關(guān)斷對應端口的輸出緩沖器,使其為輸入(高阻)狀態(tài),“0”則使其為輸出態(tài)。

       4、當預分頻器(Prescaler)分配給TIMER0后,任何對TMR0寄存器(F1)寫操作的指令都將使預分頻器清零。

    §2.2 PIC12C5XX 指令尋址方式

    PIC12C5XX單片機尋址方式根據(jù)操作數(shù)的來源,可分為寄存器間接尋址、立即數(shù)尋址、直接尋址和位尋址四種。

    一、寄存器間接尋址

    這種尋址方式通過寄存器F0(INDF)、F4(FSR)來實現(xiàn)。實際的寄存器地址放在FSR中,通過INDF來進行間接尋址。

    例: FSR EQU 4 INDF EQU 0 MOVLW 05H ; W=5 MOVWF FSR ; W(=5)→F4 MOVLW 55H ; W=55H MOVWF INDF ; W(=55H)→F5

    上面這段程序把55H送入F5寄存器。間址尋址方式主要用于編寫查表、寫表程序,非常方便。請參考§2.7程序設(shè)計技巧。

    二、立即數(shù)尋址

    這種方式就是操作數(shù)為立即數(shù),可直接從指令中獲取。

    例:  MOVLW 16H ; 16H →W

    三、直接尋址

    這種方式是對任何一寄存器直接尋址訪問。對PIC12C508,寄存器地址(5位)直接包括在指令中,對PIC12C509,寄存器地址中最高1位由FSR(F4)寄存器中的bit5決定,即體選位。

    例: MOVWF 8 ; W→F8寄存器

    MOVF 8,W ; F8→W

    四、位尋址

    這種尋址方式是對寄存器中的任一位(bit)進行操作。

    例: BSF 11,0 ; 把F11的第0位置為“1”。

    §2.3 面向字節(jié)操作類指令 

    這類指令共有18條,包括有數(shù)據(jù)傳送、算術(shù)和邏輯運算、數(shù)據(jù)移位和交換等操作。它們的操作都是在W數(shù)據(jù)寄存器f之間進行,其指令碼結(jié)構(gòu)為:

    (11—6)

    (5)

    (4—0)

    OPCODE

    d

    f(File#)

    高6位是指令操作碼。第6位d是方向位。d=1,則操作結(jié)果存入f(數(shù)據(jù)寄存器),d=0,則操作結(jié)果存入W。低5位是數(shù)據(jù)寄存器地址,可選中32個寄存器。對于PIC12C509,則還要參考寄存器體選擇器FSR的bit5選擇存入哪一個寄存器體(bank0或bank1)。

    1、寄存器加法指令

    格式: ADDWF f,d

    指令碼:

    000111

    d

    fffff

    指令周期: 1 操作: W+f→d 影響狀態(tài)位: C,DC,Z 說明: 將f寄存器和w相加,結(jié)果存入f(d=1)或W(d=0)。 例: ADDWF 8,0 ; F8+W→W

    ─────────────────────────────────

    2、寄存器與指令

    格式: ANDWF f,d

    指令碼:

    000101

    d

    fffff

    指令周期: 1 操作: W∧f→d 影響狀態(tài)位: Z 說明: 將f寄存器和w做邏輯與運算,結(jié)果存入f(d=1)或W(d=0)。 例: ANDWF 10,0 ; F10∧W→W ANDWF 10,1 ; F10∧W→F10

    ─────────────────────────────────

    3、寄存器清零指令

    格式: CLRF f

    指令碼:

    0000011

    fffff

    指令周期: 1 操作: 0→f ,1→z 影響狀態(tài)位:z 說明: 將f寄存器清零,狀態(tài)位Z將被置為1。 例: CLRF 8 ; F8清為零(0→F8)

    ─────────────────────────────────

    4、W清零指令

    格式: CLRW

    指令碼:

    000001

    0

    00000

    指令周期: 1 操作: 0→W,1→Z 影響狀態(tài)位: Z 說明: 將W寄存器清零,狀態(tài)位Z將被置為1。 例: CLRW ;W清為零,Z置為1

    ─────────────────────────────────

    5、寄存器取反指令

    格式: COMF f,d

    指令碼:

    00

    d

    fffff

    指令周期: 1 操作: f→d 影響狀態(tài)位: Z 說明: 將f寄存器內(nèi)容做邏輯求反運算,結(jié)果存入f(d=1)或W(d=0)。 例: COMF 12,0 ; F12取反→F12 COMF 12,1 ; F12取反→W

    ─────────────────────────────────

    6、寄存器減1指令

    格式: DECF f,d

    指令碼:

    000011

    d

    fffff

    指令周期: 1 操作: f-1→d 影響狀態(tài)位: C,DC,Z 說明: f寄存器內(nèi)容減1存入f(d=1)或W(d=0)。    例: DECF 15,1 ; F15-1→F15 DECF 15,0 ; F15-1→W

    ─────────────────────────────────

    7、寄存器減1,結(jié)果為零則跳指令

    格式: DECFSZ f,d

    指令碼:

    0010

    11df

    ffff

    指令周期: 1或2(產(chǎn)生跳轉(zhuǎn)時為2)

    操作: f-1→d; 結(jié)果為零則跳(PC+1→PC)

    影響狀態(tài)位: 無

    說明: 將f寄存器內(nèi)容減1存入f(d=1)或W(d=0)。如果結(jié)果為0,則跳過

    下一條指令不執(zhí)行。否則順序執(zhí)行下一條指令。

    例: ┌───DECFSZ 10,1 ; F10-1→F10,如果F10為0

       F10=0 │ MOVLW 55H ; 則跳過MOVLW 55H指令

        └──→MOVF 12,0

    ─────────────────────────────────

    8、寄存器加1指令

    格式: INCF f,d

    指令碼:

    001010

    d

    fffff

    指令周期: 1

    操作: f+1→d

    影響狀態(tài)位: C,DC,Z

    說明: f寄存器加1,結(jié)果存入f(d=1)或W(d=0)。

    例: INCF 10,0 ; F10+1→W

    INCF 10,1 ; F10+1→F10

    ─────────────────────────────────

    9、寄存器加1,結(jié)果為零則跳指令

    格式: INCFSZ f,d

    指令碼:

    001111

    d

    fffff

    指令周期: 1或2(產(chǎn)生跳轉(zhuǎn)時為2)

    操作:    f+1→d,結(jié)果為零則跳(PC+1→PC)

    影響狀態(tài)位: 無

    說明:    將f寄存器內(nèi)容加1存入f(d=1)或W(d=0),如果結(jié)果為零則PC值

    加1跳過下一條指令。

    例: L00P ┌─INCFSZ 8,1 ; 將F8寄存器加1,結(jié)果存入F8,

    │ GOTO LOOP ; 加1后結(jié)果為零則跳到MOVWFF9指令

    F8=0 └→MOVWF 9

    ─────────────────────────────────

    10、寄存器或指令

    格式: IORWF f,d

    指令碼:

    000100

    d

    fffff

    指令周期: 1

    操作: W∨f→d

    影響狀態(tài)位: Z

    說明: 將f寄存器內(nèi)容和W內(nèi)容做邏輯或運算,結(jié)果存入f(d=1)或W(d=0)。

    例: IORWF 18,1 ; F18∨W→F18

    IORWF 18,0 ; F18∨W→W

    ─────────────────────────────────

    11、f寄存器傳送指令

    格式: MOVF f,d

    指令碼:

    001000

    d

    fffff

    指令周期: 1

    操作: f→d

    影響狀態(tài)位: Z

    說明: 將f寄存器內(nèi)容傳送至W(d=0)或自己本身f(d=1)。如果是傳給

    自己,一般是用來影響狀態(tài)位Z,即可判斷f是否為零。

    例:   MOVF 10,1 ; F10→F10

    BTFSS 3,2 ; 判斷F3的第二位,即Z狀態(tài)位。如果F10=0,則Z=1。

    ─────────────────────────────────

    12、W寄存器傳送指令

    格式: MOVWF f

    指令碼:

    000000

    1

    fffff

    指令周期: 1

    操作: W→f

    影響狀態(tài)位: 無

    說明: 將W內(nèi)容傳給f寄存器。

    例: MOVWF 6 ; W→F6(B口)

    ─────────────────────────────────

    13、空操作指令

    格式: NOP

    指令碼:

    000000

    000000

    指令周期: 1

    操作: 無任何操作

    影響狀態(tài)位: 無

    說明: 不做任何操作,只有使PC加1。

    ─────────────────────────────────

    14、帶進位位左移指令

    格式: RLF f,d

    指令碼:

    001101

    d

    fffff

    指令周期: 1

    操作: f(n)→d(n+1),f(7)→c,c→d(0)

    影響狀態(tài)位: C

    說明: 將f寄存器左移,結(jié)果存入f(d=1)或W(d=0)。f左移時,其最高

    位(bit7)移入狀態(tài)位C(進位位),如下圖:

    進位位

    ┌──┐ ┌──┬──┬──┬──┬──┬──┬──┬──┐

    ┌─┤ C │← │D7 │ D6 │D5 │ D4 │D3 │ D 2│ D1 │ D0│ ←─┐

    │ └──┘ └──┴──┴──┴──┴──┴──┴──┴──┘ │

    └──────────────────────────────────┘

    例: RLF 8,1 ; F8左移→F8

    RLF 8,0 ; F8左移→W

    ─────────────────────────────────

    15、帶進位位右移指令

    格式: RRF f,d

    指令碼:

    001100

    d

    fffff

    指令周期: 1

    操作: f(n)→d(n-1),f(0)→c,c→d(7)

    影響狀態(tài)位: C

    說明: 將f寄存器右移,結(jié)果存入f(d=1)或W(d=0)。f右移時,其最低

    位(bito)移入狀態(tài)位C,而原來的狀態(tài)位C移入f最高位(bit7),

    如下圖:

    ┌────────────────────────────┐

    │進位位 │

    │ ┌─┐ ┌──┬─┬──┬─┬──┬─┬──┬─┐│

    └─→│C │→│D7 │D6│D5 │D4│D3 │D2│ D1 │D0│─┘

    └─┘ └──┴─┴──┴─┴──┴─┴──┴─┘

    例: RRF 8 ,1 ;F8右移→F8

    RRF 8,0 ;F8右移→W

    ─────────────────────────────────

    16、寄存器減法指令

    格式: SUBWF f,d

    指令碼:

    000010

    d

    fffff

    指令周期: 1

    操作: f-w→d

    影響狀態(tài)位: C,DC,2

    說明: 將f寄存器內(nèi)容減去W內(nèi)容,結(jié)果存入f(d=1)或W(d=0)。

    例: CLRF 20 ;F20=0

    MOVLW 1 ; W=1

    SUBWF 20,1 ; F20-W=0-1=-1→F20

    ; C=0,運算結(jié)果為負。

    ─────────────────────────────────

    17、寄存器交換指令

    格式: SWAPF f,d

    指令碼:

    001110

    d

    fffff

    指令周期: 1

    操作: f(0-3)→d(4-7),f(4-7)→d(0-3)

    影響狀態(tài)位: 無

    說明: 將f寄存器內(nèi)容的高4位(bit7-bit4)和低4位(bit3-bit0)交換

    結(jié)果存入f(d=1)或W(d=0)。

    例: MOVLW 56H

    MOVWF 8 ; F8=56H

    SWAPF 8,1 ; F8交換,結(jié)果存入F8,則F8=65H。

    ─────────────────────────────────

    18、寄存器異或運算指令

    格式: XORWF f,d

    指令碼:

    00010

    d

    fffff

    指令周期: 1

    操作: W○f→d

    影響狀態(tài)位: Z

    說明: 將f寄存器和W進行異或運算,結(jié)果存入f(d=1)或W(f=0)。

    例: XORWF 5,1 ; F5○W→F5(A口)

    XORWF 5,0 ; F5○W→W

    §2.4 面向位操作類指令 

    這類指令共有4條,指令碼基本結(jié)構(gòu)為:

    (11—8)

    (7—5)

    (4—0)

    OPCODE

    bbb

    file#

    高4位是操作碼。bit5-bit7是位地址(可尋址8個位),bito-bit4是寄存器地址。

    XORWF 5,0 ; F5○W→W

    §2.4 面向位操作類指令 

    這類指令共有4條,指令碼基本結(jié)構(gòu)為:

    (11—8)

    (7—5)

    (4—0)

    OPCODE

    bbb

    file#

    高4位是操作碼。bit5-bit7是位地址(可尋址8個位),bito-bit4是寄存器地址。

    XORWF 5,0 ; F5○W→W

    §2.4 面向位操作類指令 

    這類指令共有4條,指令碼基本結(jié)構(gòu)為:

    (11—8)

    (7—5)

    (4—0)

    OPCODE

    bbb

    file#

    高4位是操作碼。bit5-bit7是位地址(可尋址8個位),bito-bit4是寄存器地址。

    影響狀態(tài)位: 無

    久久黄色 视频|我草AV|AV在线网站导航|色色97激情|无码人妻一区二区有奶水|日韩精品|大香蕉97视频
  • <tbody id="w8jhq"><dfn id="w8jhq"><pre id="w8jhq"></pre></dfn></tbody>
  • <fieldset id="w8jhq"><pre id="w8jhq"></pre></fieldset>