官术网_书友最值得收藏!

3.2 PIC16F87X指令集

1.數據傳送指令

① 立即數傳送指令

        句法:         MOVLW     k     操作范圍:     0<k<255
        指令周期:     0                 影響標志位:    無
        操作內容:     k→W
        操作說明:     把8位立即數傳送給W寄存器。

② f寄存器傳送指令

        句法:     MOVF      f,d       操作范圍:     0<f127,d∈[0,1]
        指令周期:  1                    影響標志位:    Z
        操作內容:  f→d
        操作說明:將f寄存器內容傳送給f本身(d=1)或W寄存器(d=0)。

③ W寄存器傳送指令

        句法:     MOVWF    f          操作范圍:     0<f<127
        指令周期:  1
        正影響標志位:無
        操作內容:  W→f
        操作說明:將W寄存器內容傳送給f寄存器。

2.算術運算指令

(1)加法運算指令

① 立即數加法指令

        句法:     ADDLW    k      操作范圍:         0<k<225
        指令周期:  1                 影響標志位:       C、DC、Z
        操作內容:  k+W→W
        操作說明:將立即數與W寄存器內容相加,結果傳送給W寄存器。

② W寄存器加法指令

        句法:     ADDWF    f,d    操作范圍:         0<f<127,d∈[0,1]
        指令周期:  1                 影響標志位:    C、DC、Z
        操作內容:  W+f→d
        操作說明:將W寄存器內容與f寄存器內容相加,結果傳送給f本身(d=l)或W寄
    存器(d=0)。

③ f寄存器加1指令

        句法:     INCF       f,d    操作范圍:         0<f<127,d∈[0,1]
        指令周期:  1                 影響標志位:Z
        操作內容:  f+1→d
        操作說明:將f寄存器內容加1,結果傳送給f本身(d=1)或W寄存器(d=0)。

(2)減法運算指令

① 立即數減法指令

        句法:         SUBLW  k      操作范圍:         0<k<225
        指令周期:     1             影響標志位:       C、DC、Z
        操作內容:     k-W→W
        操作說明:將立即數與W寄存器內容相減,結果傳送給W寄存器。

② W寄存器減法指令

        句法:     SUBWF   f,d     操作范圍:         0<f<127,d∈[0,1]
        指令周期:  1                 影響標志位:       C、DC、Z
        操作內容:  f-W→d

操作說明:將f寄存器內容與W寄存器內容相減,結果傳送給f本身(d=l)或W寄存器(d=0)。

③ f寄存器減1指令

        句法:     DECF  f,d        操作范圍:         0<f<127,d∈[0,1]
        指令周期:  1                 影響標志位:       Z
        操作內容:  f-1→d
        操作說明:將f寄存器內容減1,結果傳送給f本身(d=1)或W寄存器(d=0)。

3.邏輯指令

(1)邏輯運算指令

① 寄存器取反指令

        句法:     COMF   f,d       操作范圍:         0<f<127,d∈[0,1]
        指令周期:  1                 影響標志位:       Z
        操作內容:  f取反→d
        操作說明:將f寄存器內容取反,結果傳送給f本身(d=1)或W寄存器(d=0)。

② 寄存器半字節交換指令

        句法:     SWAPE   f,d      操作范圍:         0<f<127,d∈[0,1]
        指令周期:  1          影響標志位:無
        操作內容:  f<0,3>→d<4,7>,f<4,7>→d<0,3>
        操作說明:將f寄存器內容高4位和低4位交換,結果傳送給f本身(d=1)或W寄
    存器(d=0)。

③ 立即數邏輯與指令

        句法:ANDLW   k      操作范圍:     0<k<255
        指令周期:1            影響標志位:    Z
        操作內容:k∧W→W
        操作說明:將8位立即數與W寄存器內容相“與”,結果傳送給W寄存器。

④ 立即數邏輯或指令

        句法:     IORLW k   操作范圍:     0<k<255
        指令周期:  1          影響標志位:    Z
        操作內容:  k∨W→W
        操作說明:將8位立即數與W寄存器內容相“或”,結果傳送給W寄存器。

⑤ 立即數邏輯異或指令

        句法:XORLW      k   操作范圍:     0<k<255
        指令周期:  1          影響標志位:    Z
        操作內容:k + W→W
        操作說明:將8位立即數與W寄存器內容相“異或”,結果傳送給W寄存器。

⑥ 寄存器邏輯與指令

        句法:     ANDWF f,d    操作范圍:     0<f<127,d∈[0,1]
        指令周期:  1             影響標志位:    Z
        操作內容:f∧W→d
        操作說明:將f寄存器內容與W寄存器內容相“與”,結果傳送給f本身(d=1)或W
    寄存器(d=0)。

⑦ 寄存器邏輯或指令

        句法:     IORWF  f,d    操作范圍:     0<f<127,d∈[0,1]
        指令周期:  1             影響標志位:    Z
        操作內容:  f∨W→d
        操作說明:將f寄存器內容與W寄存器內容相“或”,結果傳送給f本身(d=l)或
    W寄存器(d=0)。

⑧ 寄存器邏輯異或指令

        句法:     XORWF  f,d      操作范圍:     0<f<127,d∈[0,1]
        指令周期; 1                 影響標志位:    Z
        操作內容:  f + W→d
        操作說明:將f寄存器內容與W寄存器內容相“異或”,結果傳送給f本身(d=1)
    或W寄存器(d=0)。

(2)移位指令

        ① 寄存器帶進位循環左移指令
        句法:     RLF    f,d       操作范圍:     0<f<127,d∈[0,1]
        指令周期:  1                 影響標志位:    C
        操作內容:  f(n)→d(n+l),  f(7)→C,C→d(0)
        操作說明:將f寄存器內容帶進位循環左移一位,結果傳送給f本身(d==l)或W
    寄存器(d=0),如圖3-1所示。

② 寄存器帶進位循環右移指令

圖3-1 帶進位循環左移指令示意圖

        句法:     RRF   f,d     操作范圍:  0<f<127 d∈[0,l]
        指令周期:  1             影響標志位:C
        操作內容:  f(n)→d(n-l),  f(0)→C,  C→d(7)
        操作說明:將f寄存器內容帶進位循環右移一位,結果傳送給f本身(d=1)或W寄
    存器(d=0),如圖3-2所示。

4.控制轉移指令

圖3-2 帶進位循環右移指令示意圖

        ① 遞增跳轉指令
        句法:     INCFSZ   f,d      操作范圍:0<f<127,dE∈[0,1]
        指令周期:  1或2             影響標志位:無
        操作內容:   f+1→d,f+1= 0則PC+1→PC
        操作說明:f寄存器內容加1,結果傳送給f本身(d=1)或W寄存器(d=0):如果
    結果為0則跳過下一條指令;否則順序執行。

② 遞減跳轉指令

        句法:     DECFSZ   f,d     操作范圍:0<f<127,d∈[0,1]
        指令周期:  1或2             影響標志位:無
        操作內容:  f-1-d,f-1=0則PC+1→PC
        操作說明:f寄存器內容減1,結果傳送給f本身(d=1)或W寄存器(d=0),如果

結果為0則跳過下一條指令;否則順序執行。

③ 子程序調用指令

        句法:     CALL k     操作范圍:  0<k<2047
        指令周期:  2          影響標志位:無
        操作內容:  PC+1→堆棧,k→PC(10~0) PCLATH(4,3)→PC(12,11)
        操作說明:將PC+1的值送入堆棧,然后將11位常數k值送入PC(10~0),同時將
    PCLATH的第4、3位送PC的第12、11位,從而將于程序入口地址送給PC。

④ 無條件跳轉指令

        句法:     GOTO      k      操作范圍:0<k<2047
        指令周期:  2                 影響標志位:無
        操作內容:k→PC(10~0),PCLATH(4,3)→PC(12,11)
        操作說明:將11位常數k值送入PC(10~0),同時將PCLATH的第4、3位送PC
    的第12、11位,從而將新的地址送給PC。

⑤ 子程序返回指令

        句法:RETURN     操作范圍:無
        指令周期:2        影響標志位:無
        操作內容:TOS→PC
        操作說明:將棧頂(TOS)內容彈出送給PC。

⑥ 子程序帶參數返回指令

        句法:     RETLW      k     操作范圍:  0<k<255
        指令周期:  2                 影響標志位:無
        操作內容:TOS→PC,  k→W
        操作說明:將棧頂(TOS)內容彈出送給PC,且將立即數k送給W寄存器。

⑦ 中斷服務子程序返回指令

        句法:RETFIE      操作范圍:無
        指令周期:2        影響標志位:無
        操作內容:TOS→PC,1→GIE
        操作說明:將棧頂(TOS)內容彈出送給PC,且將全局中斷使能位GIE置1,重新開
    啟中斷。

5.位操作指令

① 位清零指令

        句法:     BCF    f,b    操作范圍:     0<f<127,0<b<7
        指令周期:  1             影響標志位:無
        操作內容:  0→f(b)
        操作說明:將寄存器f的第b位清零。

② 位置1指令

        句法:     BSF    f,b    操作范圍:  0<f<127,0<b<7
        指令周期:  1             影響標志位:無
        操作內容:  1→f(b)
        操作說明:將寄存器f的第b位置1。

③ 位測試為0跳轉指令

        句法:BTFSC  f,b      操作范圍:  0<f<127,0<b<7
        指令周期:1或2        影響標志位:無
        操作內容:若f(b)=0,則PC+1→PC
        操作說明:若寄存器f的第b位為零,則跳過下一條指令;否則順序執行。

④ 位測試為1跳轉指令

        句法:    BTFSS  f,b  操作范圍:  0<f<127,0<b<7
        指令周期:1或2        影響標志位:無
        操作內容:若f(b)=1,則PC+1→PC
        操作說明:若寄存器f的第b位為1,則跳過下一條指令;否則順序執行。

6.清零指令

① 看門狗定時器清零指令

        句法:CLRWDT     操作范圍:無
        指令周期:1        影響標志位:TO,PD
        操作內容:0→WDT,0→WDT預分頻器,1→TO,1→PD
        操作說明:將WDT寄存器及其預分頻器全部清零。

② 寄存器清零指令

        句法:CLRF     f      操作范圍:  0<f<127
        指令周期:1            影響標志位:Z
        操作內容:0→f,1→Z
        操作說明:將寄存器f清零。

③ W寄存器清零指令

        句法:CLRW    f      操作范圍:無
        指令周期:1            影響標志位:Z
        操作內容:0→W,1→Z
        操作說明:將寄存器W清零。

7.處理器控制指令

① 進入低功耗睡眠狀態指令

        句法:SLEEP   操作范圍:無
        指令周期:1    影響標志位:TO,PD
        操作內容:0→WDT,0→WDT預分頻器,1→TO,0→PD
        操作說明:將WDT寄存器及其預分頻器全部清零,掉電標志位PD清零,定時
        時間溢出標志位TO置1,芯片進入低功耗睡眠狀態,芯片振蕩器停止工作。

② 空操作指令

        句法:NOP     操作范圍:無
        指令周期:1     影響標志位:Z
        操作內容:無
        操作說明:不產生任何操作,僅使PC加1,消耗一個指令周期。
主站蜘蛛池模板: 城市| 通州区| 柞水县| 丹东市| 调兵山市| 石嘴山市| 通海县| 河南省| 蒙城县| 岱山县| 吴川市| 隆林| 南京市| 东明县| 章丘市| 安陆市| 万宁市| 南部县| 巧家县| 曲水县| 永善县| 民县| 红安县| 德清县| 杨浦区| 凌海市| 淳化县| 大足县| 祁阳县| 曲阜市| 织金县| 长沙县| 花莲市| 台湾省| 桃园县| 乐山市| 怀仁县| 宜宾市| 玉屏| 尼勒克县| 社旗县|