宏觀理解
核心助記符
助記符 | 功能說明 | 英文全稱 |
---|---|---|
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 |
( ) | 表示寄存器的內容 | - |
(( )) | 表示寄存器間接尋址的內容 | - |
→ | 表示運算結果送入目標寄存器 | - |
常用指令實例
寄存器加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)這樣可以減少重復勞動,提高編程效率。