1. 程式人生 > >PIC指令系統

PIC指令系統

巨集觀理解

核心助記符

助記符 功能說明 英文全稱
ADD 相加 add
SUB 相減 substract
RL 迴圈左移 rotate left
RR 迴圈右移 rotate right
AND and
IOR inclusive or
XOR 異或 exclusive or
COM 取反 complement
INC 加1 increase
DEC 減1 decrease
MOV 傳送 move
CLR 清零 clear
RET 返回 return
BTF 位測試 bit test

指令系統補充字元說明

字元 功能說明 英文全稱
W 工作暫存器(即累加器) -
f 暫存器地址(取7位暫存器地址,00H~7FH) -
b 8位暫存器f內位地址(0~7) bit
K 立即數(8位常數或11位地址)、常量或標號 -
L 指令運算元中含有8位立即數K -
d 目標地址選擇:d=0,結果至W;d=1,結果至f destination
FSZ 暫存器f為0,則間跳 skip if 0
FSC 暫存器f的b位為0,則間跳 skip if clear
FSS 暫存器f的b位為1,則間跳 skip if set
( ) 表示暫存器的內容 -
(( )) 表示暫存器間接定址的內容 -
表示運算結果送入目標暫存器 -

常用指令例項

指令沒找到?點這裡查詢晶片手冊

標誌位暫存器:STATUS

暫存器加1指令:INCF

【格式】 INCF F,d

【功能】暫存器F加1

【說明】

(1)INCF是Increment F的縮寫;

(2)在PIC系列8位微控制器中,常用符號F代表片內的各種暫存器和F的序號地址;

(3)d=0時,結果存入W;d=1時,結果存入F。

【例項】

INCF    PORTC,1    ;將PORTC加1

暫存器減1指令:DECF

【格式】 DECF F,d

【功能】暫存器F減1

【說明】

(1)DECF是Decrement F的縮寫;

(2)d=0時,結果存入W;d=1時,結果存入F。

【例項】

ENCODER     EQU 0X21

            ……

            DECF     ENCODER,1 ;將ENCODER減1

暫存器清零指令:CLRF

【格式】 CLRF F

【功能】暫存器清零

【說明】

(1)CLRF是Clear F的縮寫;

(2)F暫存器被清為全0,使狀態位Z=1。

【例項】

CLRF    TRISC       ;對TRISC 清零

W清零指令:CLRW

【格式】 CLRW

【功能】暫存器W清零

【說明】

(1)CLRW是Clear W的縮寫;

(2)W為PIC微控制器的工作暫存器;

(3)W暫存器被清為全0,使狀態位Z=1。

【例項】

CLRW        ;W=00H

F暫存器傳送指令:MOVF

【格式】 MOVF F,d

【功能】將F暫存器內容傳送到F或W

【說明】

(1)MOVF是Move F的縮寫;

(2)當d=1時,傳到F本身;當d=0時,傳到W;

(3)影響狀態位Z

【例項】

MOVF       PORTB,0    ;PORTB口內容送W

MOVWF      PORTA     ;W內容即PORTB口內容送PORTA

W暫存器傳送指令:MOVWF

【格式】 MOVWF F

【功能】 W暫存器傳送

【說明】

(1)MOVWF是Move W to F的縮寫;

(2)將W暫存器內容傳到F,W內容不變;

(3)不影響狀態位。

【例項】

MOVLW   0x0B        ;送0BH送W

MOVWF   PORTB       ;送W內容到PORTB口

遞增跳轉指令:INCFSZ

【格式】 INCFSZ F,d

【功能】 遞增跳轉

【說明】

(1)INCFSZ是Increment F,Skip if 0的縮寫;

(2)F暫存器內容加1後,當d=1時結果存入F,當d=0時存入W;

(3)若結果為0則跳過下一條指令,否則順序執行;

(4)影響狀態位Z。

【例項】

LOOP   INCFSZ     COUNT1,1   ;COUNT1加1,結果存到COUNT1

       GOTO       LOOP      ;結果不為零,迴圈

       MOVWF      COUNT2     ;結果為零時,執行該語句

遞減跳轉指令:DECFSZ

【格式】 DECFSZ F,d

【功能】遞減跳轉

【說明】

(1)DECFSZ是Decrement F,Skip if 0的縮寫;

(2)F暫存器內容減1,結果存入F本身(d=1)或W(d=0);

(3)如果結果為0則跳過下一條指令,否則順序執行;

(4)影響狀態位Z;

(5)實際指令中,當d=1時,該項常常被略去。

【例項】

DELAY   MOVLW    25          ;延時子程式

        MOVWF    N           ;給N賦值25

        LOOP     DECFSZ N,1  ;N-1送回N並判結果=0?是!跳出迴圈

        GOTO     LOOP        ;否!迴圈回去

        RETURN               ;返回

位清零指令:BCF

【格式】 BCF F,B

【功能】位清0

【說明】

(1)BCF是Bit Clear F的縮寫;

(2)符號B是表示片內某個8位資料暫存器F的位號(或位地址);

(3)指令的意思是:將暫存器的第B位清0。

【例項】

BCF     REG1,2     ;把暫存器REG1的第2位清零

位置1指令:BSF

【格式】 BSF F,B

【功能】位置1

【說明】(1)BSF是Bit Set F的縮寫;

(2)將暫存器F的第B位置1。

【例項】

BSF     STATUS,RP0      ;設定檔案暫存器的體1

位測試為零跳轉指令:BTFSC

【格式】 BTFSC F,B

【功能】位測試為0跳轉

【說明】

(1)BTFSC是Bit Test,Skip if Clear的縮寫;

(2)測試F暫存器的第B位,若F(B)=0則調到下一條指令,否則順序執行。

【例項】

BTFSC       PORTB,0    ;檢測PORTB口中的第0位是否為0?是!跳過下一條指令

GOTO       CHECK       ;否!則轉到標號為CHECK的語句

CALL       DELAY       ;PORTB的第0位是1則直接執行該語句,呼叫延時子程式

位測試為1跳轉指令:BTFSS

【格式】 BTFSS F,B

【功能】位測試位1跳轉指令

【說明】

(1)BTFSS是Bit Test F,Skip if Set的縮寫;

(2)測試F暫存器的第B位,若F(B)=1,則跳轉到下一條指令,否則順序執行。

【例項】

BTFSS       PORTB,0     ;檢測PORTB口中的第0位是否為1?是!跳過下一條指令

GOTO        CHECK       ;否!則轉到標號為CHECK的語句

CALL        DELAY       ;PORTB的第0位是1則直接執行該句,呼叫延時子程式

常數傳送指令:MOVLW

【格式】 MOVLW K

【功能】常數傳送

【說明】(1)MOVLW是Move literal to W的縮寫;

(2)將8位立即數傳送到W暫存器,k表示常數、立即數和標號;

(3)不影響狀態位

【例項】

MOVLW       0x1E    ;常數30送W

子程式呼叫指令:CALL

【格式】 CALL K

【功能】子程式呼叫

【說明】

(1)CALL是CALL subroutine的縮寫;

(2)K為立即地址;

(3)不影響狀態位。

【例項】

CALL    DELAY         ;呼叫延時子程式

DELAY   ……            ;延時子程式DELAY

        ……

        RETURN

無條件跳轉指令:GOTO

【格式】 GOTO K

【功能】無條件跳轉

【說明】

(1)GOTO是Go to address的縮寫;

(2)指令中的K,常與程式中的標號聯絡起來;

(3)不影響狀態位。

【例項】

STOP    GOTO    STOP    ;迴圈執行GOTO語句,從而停機

子程式返回指令:RETURN

【格式】 RETURN

【功能】子程式返回

【說明】

(1)RETURN是Return from Subroutine的縮寫;

(2)將堆疊頂端單元內容彈出並送入PC,從而返回主程式斷點處;

(3)不影響狀態位。

【例項】

SUB  MOVLW   01H     ;子程式

     ……

     RETURN          ;子程式返回

空操作指令:NOP

【格式】 NOP

【功能】空操作

【說明】

(1)NOP是No Operation的縮寫;

(2)不產生任何操作,僅使PC加1,消耗一個指令週期NOP;

(3)不影響狀態位。

【例項】

MOVLW       0xOF      ;送OFH到W
    
MOVWF       PORTB       ;W內容寫入B口
     
NOP                 ;空操作

MOVF        PORTB,W     ;讀操作

常用偽指令例項

符號名賦值偽指令:EQU

【格式】符號名 EQU nn

【功能】符號名賦值

【說明】

(1)給符號名或暫存器賦值,符號名一旦由EQU賦值,其值就不能再重新定義;

(2)nn是一個長度不同的二進位制數值。

【例項】

COUNT       EQU     100     ;定義COUNT為常數100

程式起始地址偽指令:ORG

【格式】 ORG nnnn

【功能】程式起始地址

【說明】

(1)用於指定該偽指令後面的源程式存放的起始地址,也就是彙編後的機器碼目標程式在微控制器的程式存貯器中開始存放的首地址;

(2)nnnn是一個13為長的地址引數。

【例項】

ORG 0x00     ;程式彙編地址從00H開始

程式結束偽指令:END

【格式】 END

【功能】程式結束

【說明】

(1)指令末的偽指令END是通知彙編程式MPASM結束對源程式的彙編,即使後面還有語句,也不再予以彙編;

(2)在一個源程式中必須有END偽指令;

(3)只能有一個END;

(4)放在整個程式的最後。

【例項】直接在程式末尾使用,從而結束程式

調入外部函式偽指令:INCLUDE

【格式】 INCLUDE “檔名”

【功能】調入外部函式

【說明】

(1)用來告訴彙編器,將一個預先編好的外部程式檔案包含進來,作為本源程式的一部分;

(2)這樣可以減少重複勞動,提高程式設計效率。

彙編指令速查

彙編指令手冊下載

指令 功能
AAA 調整加
AAD 調整除
AAM 調整乘
AAS 調整減
ADC 進位加
ADD
AND
ARPL 調整優先順序
BOUND 檢查陣列
BSF 位右掃描
BSR 位左掃描
BSWAP 交換位元組
BT 位測試
BTC 位測試求反
BTR 位測試清零
BTS 位測試置一
CALL 過程呼叫
CBW 轉換位元組
CDQ 轉換雙字
CLC 進位清零
CLD 方向清零
CLI 中斷清零
CLTS 任務清除
CMC 進位求反
CMOVA 高於傳送
CMOVB 低於傳送
CMOVE 相等傳送
CMOVG 大於傳送
CMOVL 小於傳送
CMOVNA 不高於傳送
CMOVNB 不低於傳送
CMOVNE 不等傳送
CMOVNG 不大於傳送
CMOVNL 不小於傳送
CMOVNO 不溢位傳送
CMOVNP 非奇偶傳送
CMOVNS 非負傳送
CMOVO 溢位傳送
CMOVP 奇偶傳送
CMOVS 負號傳送
CMP 比較
CMPSB 比較位元組串
CMPSD 比較雙字串
CMPSW 比較字串
CMPXCHG 比較交換
CMPXCHG486 比較交換486
CMPXCHG8B 比較交換8位元組
CPUID CPU標識
CWD 轉換字
CWDE 擴充套件字
DAA 調整加十
DAS 調整減十
DEC 減一
DIV
ENTER 建立堆疊幀
HLT
IDIV 符號整除
IMUL 符號乘法
IN 埠輸入
INC 加一
INSB 埠輸入位元組串
INSD 埠輸入雙字串
INSW 埠輸入字串
JA 高於跳轉
JB 低於跳轉
JBE 不高於跳轉
JCXZ 計數一六零跳轉
JE 相等跳轉
JECXZ 計數三二零跳轉
JG 大於跳轉
JL 小於跳轉
JMP 跳轉
JMPE 跳轉擴充套件
JNB 不低於跳轉
JNE 不等跳轉
JNG 不大於跳轉
JNL 不小於跳轉
JNO 不溢位跳轉
JNP 非奇偶跳轉
JNS 非負跳轉
JO 溢位跳轉
JP 奇偶跳轉
JS 負號跳轉
LAHF 載入標誌低八
LAR 載入訪問許可權
LDS 載入資料段
LEA 載入有效地址
LEAVE 清除過程堆疊
LES 載入附加段
LFS 載入標誌段
LGDT 載入全域性描述符
LGS 載入全域性段
LIDT 載入中斷描述符
LMSW 載入狀態字
LOADALL 載入所有
LOADALL286 載入所有286
LOCK
LODSB 載入源變址位元組串
LODSD 載入源變址雙字串
LODSW 載入源變址字串
LOOP 計數迴圈
LOOPE 相等迴圈
LOOPNE 不等迴圈
LOOPNZ 非零迴圈
LOOPZ 為零迴圈
LSL 載入段界限
LSS 載入堆疊段
LTR 載入任務
MONITOR 監視
MOV 傳送
MOVSB 傳送位元組串
MOVSD 傳送雙字串
MOVSW 傳送字串
MOVSX 符號傳送
MOVZX 零傳送
MUL
MWAIT
NEG 求補
NOP
NOT
OR
OUT 埠輸出
OUTSB 埠輸出位元組串
OUTSD 埠輸出雙字串
OUTSW 埠輸出字串
POP 出棧
POPA 全部出棧
POPF 標誌出棧
PUSH 壓棧
PUSHA 全部壓棧
PUSHF 標誌壓棧
RCL 進位迴圈左移
RCR 進位迴圈右移
RDMSR 讀專用模式
RDPMC 讀執行監視計數
RDSHR
RDTSC 讀時間戳計數
REP 重複
REPE 相等重複
REPNE 不等重複
RET 過程返回
RETF 遠過程返回
RETN 近過程返回
ROL 迴圈左移
ROR 迴圈右移
RSM 恢復系統管理
SAHF 恢復標誌低八
SAL 算術左移
SALC
SAR 算術右移
SBB 借位減
SCASB 掃描位元組串
SCASD 掃描雙字串
SCASW 掃描字串
SETA 高於置位
SETB 低於置位
SETE 相等置位
SETG 大於置位
SETL 小於置位
SETNA 不高於置位
SETNB 不低於置位
SETNE 不等置位
SETNG 不大於置位
SETNL 不小於置位
SETNO 不溢位置位
SETNP 非奇偶置位
SETNS 非負置位
SETO 溢位置位
SETP 奇偶置位
SETS 負號置位
SGDT 儲存全域性描述符
SHL 邏輯左移
SHLD 雙精度左移
SHR 邏輯右移
SHRD 雙精度右移
SIDT 儲存中斷描述符
SLDT 儲存區域性描述符
SMI
SMINT
SMINTOLD
SMSW 儲存狀態字
STC 進位設定
STD 方向設定
STI 中斷設定
STOSB 儲存位元組串
STOSD 儲存雙字串
STOSW 儲存字串
STR 儲存任務
SUB
SYSCALL 系統呼叫
SYSENTER 系統進入
SYSEXIT 系統退出
SYSRET 系統返回
TEST 數測試
UD0 未定義指令0
UD1 未定義指令1
UD2 未定義指令2
UMOV
VERW 校驗寫
WAIT
WBINVD 回寫無效快取記憶體
WRMSR 寫專用模式
WRSHR
XADD 交換加
XBTS
XCHG 交換
XLAT 換碼
XOR 異或
XSTORE

更多#8658