HC18 指令詳解

2012-06-27

HC18 指令詳解
HC18指令詳解
數據手冊
DOC. VERSION 1.4
芯圣電子
- 1 -
2010年3月
HC18 指令詳解
修正記錄
版本
日期
描述
Ver1.00
2010-03-01
第一版
- 2 -
HC18 指令詳解
1 指令表
助記符 操作數
說明
周期數
14位操作碼
受影響的狀態位
ADDWF
f,d
W和f相加
1
01 1110 dfff ffff
C,DC,Z
ADDLW
k
將立即數和W相加
1
00 1000 kkkk kkkk
C,DC,Z
SUBWF
f,d
f減去W
1
01 1011 dfff ffff
C,DC,Z
SUBLW
k
立即數減去W
1
00 1010 kkkk kkkk
C,DC,Z
DAW
-
W寄存器值進行BCD調整
1
00 0101 xxxx xxxx
C,DC
ANDWF
f,d
W和f作邏輯與運算
1
01 1100 dfff ffff
Z
ANDLW
k
立即數和W作邏輯與運算
1
00 1110 kkkk kkkk
Z
IORWF
f,d
W和f作邏輯或運算
1
01 1101 dfff ffff
Z
IORLW
k
立即數和W作邏輯或運算
1
00 1111 kkkk kkkk
Z
XORWF
f,d
W和f作邏輯異或運算
1
01 1111 dfff ffff
Z
XORLW
k
立即數和W作邏輯異或運算
1
00 1101 kkkk kkkk
Z
COMF
f,d
f取反
1
01 0000 dfff ffff
Z
CLRW
-
將W清零
1
01 1000 0xxx xxxx
Z
CLRF
f
將f清零
1
01 1000 1fff ffff
Z
INCF
f,d
f加1
1
01 0011 dfff ffff
Z
INCFSZ
f,d
f加1,為0則跳過
1(2)
01 0110 dfff ffff
DECF
f,d
f減1
1
01 1010 dfff ffff
Z
DECFSZ
f,d
f減1,為0則跳過
1(2)
01 0010 dfff ffff
BCF
f,d
將f中的d位清0
1
10 11bb bfff ffff
BSF
f,d
將f中的d位置1
1
10 10bb bfff ffff
BTFSC
f,d
檢測f中的d位,為0則跳過
1(2)
10 01bb bfff ffff
BTFSS
f,d
檢測f中的d位,為1則跳過
1(2)
10 00bb bfff ffff
MOVWF
f
將W的內容傳送到f
1
01 1001 1fff ffff
MOVF
f,d
將f的內容送到目標寄存器
1
01 0001 dfff ffff
Z
MOVLW
k
將立即數k傳送到W
1
00 0100 kkkk kkkk
RLF
f,d
對f執行帶進位的循環左移
1
01 0100 dfff ffff
C
RRF
f,d
對f執行帶進位的循環右移
1
01 0101 dfff ffff
C
SWAPF
f,d
將f的兩個半字節進行交換
1
01 0111 dfff ffff
CALL
k
調用子程序
2
11 0kkk kkkk kkkk
GOTO
k
無條件跳轉
2
11 1kkk kkkk kkkk
RETFIE
-
從中斷返回
2
00 0000 0000 0001
GIE
RETURN
-
從子程序返回
2
00 0000 0000 0010
RETLW
k
返回時將立即數傳送到W
2
00 0001 kkkk kkkk
CLRWDT
-
清零看門狗定時器
1
00 0000 0000 0100TO,PD
SLEEP
-
進入待機模式
1
00 0000 0000 0011TO,PD
NOP
-
空操作
1
00 0000 0110 0000
- 3 -
HC18 指令詳解
- 4 -
2 指令詳細說明
ADDLW 立即數和W相加
語法: ADDLW k
操作數: 0 ≤ k ≤ 255
操作: (W) + k → (W)
受影響狀態位:C、DC 和Z
說明: 將W寄存器的內容和8位立即數k相加,結果存入W寄存器。
ADDWF W和f相加
語法: ADDWF f, d
操作數: 0 ≤ f ≤ 127 (d ∈ [0,1] )
操作: (W) + (f) → (目標寄存器)
受影響狀態位:C、DC 和Z
說明: W寄存器內容和f寄存器內容相加。
如果d為0,結果存入W寄存器;
如果d為1,結果存入f寄存器。
BCF 將f中的某位清0
語法: BCF f,b
操作數: 0 ≤ f ≤ 127 (0 ≤ b ≤ 7)
操作: 0 → (f[b])
受影響狀態位:無
說明: 將f寄存器中的b位清0。
BTFSC 檢測f中的某位,為0則跳過
語法: BTFSC f,b
操作數: 0 ≤ f ≤ 127 (0 ≤ b ≤ 7)
操作: 如果(f[b]) = 0 則跳過
受影響狀態位:無
說明: 如果f寄存器中的b位為1,則執行下一條指令;如果b位為0,則丟棄下一條指令,轉而執行一條NOP指令,從而使該指令成為雙周期指令。
CLRF 將f寄存器清0
語法: CLRF f
操作數: 0 ≤ f ≤ 127
操作: 00h → (f)、1 → Z
受影響狀態位:Z
說明: f寄存器的內容被清0,Z位置1。
ANDLW 立即數和W邏輯與運算
語法: ANDLW k
操作數: 0 ≤ k ≤ 255
操作: (W) AND k → (W)
受影響狀態位:Z
說明: 將W寄存器的內容和8位立即數k作邏輯與運算,結果存入W寄存器。
ANDWF W和f邏輯與運算
語法: ANDWF f,d
操作數: 0 ≤ f ≤ 127 (d ∈ [0,1] )
操作: (W)AND (f) → (目標寄存器)
受影響狀態位:Z
說明: W寄存器和f寄存器作邏輯與運算。
如果d為0,結果存入W寄存器;
如果d為1,結果存入f寄存器。
BSF 將f中的某位置1
語法: BSF f,b
操作數: 0 ≤ f ≤ 127 (0 ≤ b ≤ 7)
操作: 1 → (f[b])
受影響狀態位:無
說明: 將f寄存器的b位置1。
BTFSS 檢測f中的某位,為1則跳過
語法: BTFSS f,b
操作數: 0 ≤ f ≤ 127 (0 ≤ b ≤ 7)
操作: 如果(f[b]) = 1 則跳過
受影響狀態位:無
說明: 如果f寄存器中的b位為0,則執行下一條指令;如果b位為1,則丟棄下一條指令,轉而執行一條NOP指令,從而使該指令成為雙周期指令。
CLRW 將W寄存器清0
語法: CLRW
操作數: 無
操作: 00h → (W)、1 → Z
受影響狀態位:Z
說明: W寄存器被清0,Z位置1。
HC18 指令詳解
COMF f取反
語法: COMF f,d
操作數: 0 ≤ f ≤ 127 (d ∈ [0,1] )
操作: (f) → (目標寄存器)
受影響狀態位:Z
說明: 將f寄存器的內容取反。
如果d為0,結果存入W寄存器;
如果d為1,結果存入f寄存器。
CALL 調用子程序
語法: CALL k
操作數: 0 ≤ k ≤ 2047
操作: (PC) + 1→ Stack,k → PC[10:0]
受影響狀態位:無
說明: 調用子程序。首先將返回地址(PC+1)壓入堆棧,然后11位立即數地址裝入PC。這是一條雙周期指令。
DECF f減1
語法: DECF f,d
操作數: 0 ≤ f ≤ 127 (d ∈ [0,1] )
操作: (f) - 1 → (目標寄存器)
受影響狀態位:Z
說明: 將f寄存器的內容減1。
如果d為0,結果存入W寄存器;
如果d為1,結果存入f寄存器。
DECFSZ f減1,為0則跳過
語法: DECFSZ f,d
操作數: 0 ≤ f ≤ 127 (d ∈ [0,1] )
操作: (f) - 1 → (目標寄存器) ,
結果為0則跳過
受影響狀態位:無
說明: 將f寄存器的內容減1。
如果結果非0,則執行下一條指令; 如果結果為0,則執行NOP指令,使該指令成為雙周期指令。
如果d為0,結果存入W寄存器;
如果d為1,結果存入f寄存器。
CLRWDT 看門狗定時器清0
語法: CLRWDT
操作數: 無
操作: 00h → WDT、0 → WDT預分頻器
1 → TO、1 → PD
受影響狀態位:TO和PD
說明: 看門狗定時器和WDT預分頻器(分配給WDT)清0。狀態位TO和PD置1。
GOTO 無條件跳轉
語法: GOTO k
操作數: 0 ≤ k ≤ 2047
操作: k → PC[10:0]
受影響狀態位:無
說明: GOTO是無條件跳轉指令。11位立即數地址裝入PC。這是一條雙周期指令。
INCF f加1
語法: INCF f,d
操作數: 0 ≤ f ≤ 127 (d ∈ [0,1] )
操作: (f) +1 → (目標寄存器)
受影響狀態位:Z
說明: 將f寄存器的內容加1。
如果d為0,結果存入W寄存器;
如果d為1,結果存入f寄存器。
INCFSZ f加1,為0則跳過
語法: INCFSZ f,d
操作數: 0 ≤ f ≤ 127 (d ∈ [0,1] )
操作: (f) +1 → (目標寄存器),
結果為0則跳過
受影響狀態位:無
說明: 將f寄存器的內容加1。
如果結果非0,則執行下一條指令; 如果結果為0,則執行NOP指令,使該指令成為雙周期指令。
如果d為0,結果存入W寄存器;
- 5 -
如果d為1,結果存入f寄存器。
HC18 指令詳解
IORLW 立即數和W作邏輯或運算
語法: IORLW k
操作數: 0 ≤ k ≤ 255
操作: (W)OR (k) → (W)
受影響狀態位:Z
說明: 將W寄存器的內容和8位立即數k作邏輯或運算。結果存入W寄存器。
IORWF 將W和f作邏輯或運算
語法: IORWF f,d
操作數: 0 ≤ f ≤ 127 (d ∈ [0,1] )
操作: (W)OR (f) → (目標寄存器)
受影響狀態位:Z
說明: W寄存器與f寄存器作邏輯或運算。如果d為0,結果存入W寄存器;
如果d為1,結果存入f寄存器。
MOVWF 將W的內容傳送到f
語法: MOVWF f
操作數: 0 ≤ f ≤ 127
操作: (W) → (f)
受影響狀態位:無
說明: 將W寄存器中的數據傳送到f寄存器。
RLF 對f執行帶進位的循環左移
語法: RLF f,d
操作數: 0 ≤ f ≤ 127 (d ∈ [0,1] )
操作: 參見下面的說明
受影響狀態位:C
說明: 將f寄存器和進位標志循環左移1位。如果d為0,結果存入W寄存器;
如果d為1,結果存入f寄存器。
RETLW 帶立即數返回
語法: RETLW k
操作數: 0 ≤ k ≤ 255
操作: k → (W),Stack → PC
受影響狀態位:無
說明: 將8位立即數k存入W寄存器。棧頂內容裝入PC。這是一條雙周期指令。
MOVLW 將立即數傳送到W
語法: MOVLW k
操作數: 0 ≤ k ≤ 255
操作: k → (W)
受影響狀態位:無
說明: 將8位立即數k存入W寄存器。
MOVF 將f的內容送到目標寄存器
語法: MOVF f,d
操作數: 0 ≤ f ≤ 127 (d ∈ [0,1] )
操作: (f) → (目標寄存器)
受影響狀態位:Z
說明: 將f的內容存入目標寄存器。
如果d為0,結果存入W寄存器;
如果d為1,結果存入f寄存器。
NOP 無操作
語法: NOP
操作數: 無
操作: 空操作
受影響狀態位:無
說明: 不執行任何操作。
RRF 對f執行帶進位的循環右移
語法: RRF f,d
操作數: 0 ≤ f ≤ 127 (d ∈ [0,1] )
操作: 參見下面的說明
受影響狀態位:C
說明: 將f寄存器和進位標志循環右移1位。如果d為0,結果存入W寄存器;
如果d為1,結果存入f寄存器。
RETURN 子程序返回
語法: RETURN
操作數: 無
操作: Stack → PC
受影響狀態位:無
說明: 從子程序返回。執行出棧操作,棧頂內容裝入PC。這是一條雙周期指令。
C
C
f寄存器
f寄存器
- 6 -
HC18 指令詳解
RETFIE 中斷返回
DAW BCD調整
語法: RETFIE
語法: DAW
操作數: 無
操作數: 無
操作: Stack → PC,1 → GIE
操作: 二進制碼 → BCD碼
受影響狀態位:無
受影響狀態位:C和DC
說明: 從中斷返回。執行出棧操作,棧頂內容裝入PC。這是一條雙周期指令。
說明: W內容從二進制碼調整為BCD碼
SLEEP 休眠
SWAPF 將f中的兩個半字節交換
語法: SLEEP
語法: SWAPF f,d
操作數: 無
操作數: 0 ≤ f ≤ 127 (d ∈ [0,1] )
操作: 00h → WDT,0 → WDT預分頻器
操作: (f[3:0]) → (目標寄存器[7:4]),
(f[7:4]) → (目標寄存器[3:0])
1 → TO,0 → PD
受影響狀態位:無
受影響狀態位:TO和PD
說明: 將f寄存器高半字節和低半字節交換。如果d為0,結果存入W寄存器;
說明: 看門狗定時器和預分頻器(分配給WDT)清0。振蕩器停振,系統進入休眠模式。狀態位PD清0,TO置1。
如果d為1,結果存入f寄存器。
SUBLW 立即數減去W寄存器內容
XORLW 立即數和W作邏輯異或運算
語法: SUBLW k
語法: XORLW k
操作數: 0 ≤ k ≤ 255
操作數: 0 ≤ k ≤ 255
操作: k - (W) → (W)
操作: (k) XOR (W) → (W)
受影響狀態位:C、DC 和Z
受影響狀態位:Z
說明: 8位立即數k減去W寄存器的內容,結果存入W 寄存器。
說明: 8位立即數k與W寄存器的內容作邏輯異或運算,結果存入W寄存器。
SUBWF f減去W
XORWF W和f作邏輯異或運算
語法: SUBWF f,d
語法: XORWF f,d
操作數: 0 ≤ f ≤ 127 (d ∈ [0,1] )
操作數: 0 ≤ f ≤ 127 (d ∈ [0,1] )
操作: (f) - (W) → (目標寄存器)
操作: (W) XOR (f) → (目標寄存器)
受影響狀態位:C、DC 和Z
受影響狀態位:Z
說明: f寄存器內容減去W寄存器內容。
說明: W與f寄存器的內容作邏輯異或運算。如果d為0,結果存入W寄存器;
如果d為0,結果存入W寄存器;
如果d為1,結果存入f寄存器。
如果d為1,結果存入f寄存器。
備注:
W:工作寄存器(累加器)
f: 寄存器
b: 8位寄存器內的位地址
k: 立即數或常數
d: 目標選擇,d = 0(將結果存入W寄存器中);
d = 1(將結果存入f寄存器中)。
x: 與取值無關的單元(= 0 或1)
- 7 -

本網站由阿里云提供云計算及安全服務 Powered by CloudDream
亚洲无码在线人妻