- PIC單片機常用模塊與綜合系統設計實例精講
- 夏彬彬 任明全 屈金學編著
- 3275字
- 2019-01-01 14:12:25
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,消耗一個指令周期。