Microchip
PIC18 家族
指令集
PIC18 系列家族指令集
PIC18 系列家族指令快速索引
指令 指令說明 影響旗號
參考說
明頁數
位元組運算指令 (BYTE-ORIENTED FILE REGISTER OPERATIONS)
ADDWF f, d, a
將 W 與 f 做相加,並將結果放至 W 或 f。
C, DC, Z, OV, N
7
ADDWFC f, d, a
將 W 與 C 做相加,並將結果放至 W 或 f。
C, DC, Z, OV, N
10
ANDWF f, d, a
將 W 與 f 做 AND 運算,並將結果放至 W 或 f。
Z, N
14
CLRF f, a
將 f 內的值都清為 0。
Z
31
COMF f, d, a
將 f 內的值取補數,並將結果放至 W 或 f。
Z, N
33
CPFSEQ f, a
若 f 與 W 的值相等,則跳過下一個指令。 無
35
CPFSGT f, a
若 f 大於 W,則跳過下一個指令。 無
36
CPFSLT f, a
若 f 小於 W,則跳過下一個指令。 無
37
DECF f, d, a
將 f 內的值減 1,並將結果放至 W 或 f。
C, DC, Z, OV, N
40
DECFSZ f, d, a
將 f 內的值減 1,若為 0 則跳過下一個指令,並將結
果放至 W 或 f。
無
43
DCFSNZ f, d, a
將 f 內的值減 1,若不為 0 則跳過下一個指令,並將
結果放至 W 或 f。
無
45
INCF f, d, a
將 f 內的值加 1,並將結果放至 W 或 f。
C, DC, Z, OV, N
48
INCFSZ f, d, a
將 f 內的值加 1,若為 0 則跳過下一個指令,並將結
果放至 W 或 f。
無
51
INFSNZ f, d, a
將 f 內的值加 1,若不為 0 則跳過下一個指令,並將
結果放至 W 或 f。
無
53
IORWF f, d, a
將 W 與 f 做 OR 運算,並將結果放至 W 或 f。
Z, N
57
MOVF f, d, a
將 f 內的值搬到 W 或 f。
Z, N
61
MOVFF
ds
f,f
將 內的資料搬到 中。
s
f
d
f
無
63
MOVWF f, a
將 W 內的值搬到 f 中。 無
66
MULWF f, a
將 W 與 f 做相乘。 無
68
NEGF f, a
將 f 內的值取 2 的補數。
C, DC, Z, OV, N
70
RLCF f, d, a
將 f 內的值與 C 一起做左移動作,並將結果放至 W
或 f。
C, Z, N
80
RLNCF f, d, a
將 f 內的值做左移動作,並將結果放至 W 或 f。
Z, N
82
RRCF f, d, a
將 f 內的值與 C 一起做右移動作,並將結果放至 W
或 f。
C, Z, N
84
RRNCF f, d, a
將 f 內的值做右移動作,並將結果放至 W 或 f。
Z, N
86
SETF f, a
將 f 內的值設為 0xFF。 無
88
SUBFWB f, d, a
將 W 內的值減掉 C 及 f,並將結果放至 W 或 f。
C, DC, Z, OV, N
90
SUBWF f, d, a
將 W 內的值減掉 f,並將結果放至 W 或 f。
C, DC, Z, OV, N
94
SUBWFB f, d, a
將 f 內的值減掉 W 及 C,並將結果放至 W 或 f。
C, DC, Z, OV, N
96
SWAPF f, d, a
將 f 內的值高 4 位元與低 4 位元對調,並將結果放至
W 或 f。
無
98
TSTFSZ f, a
測試 f 內的值是否等於 0,若為 0 則跳過下一個指令。 無
105
XORWF f, d, a
將 W 與 f 做 XOR 運算,並將結果放至 W 或 f。
Z, N
108
位元運算指令 (BIT-ORIENTED FILE REGISTER OPERATIONS)
BCF f, b, a
將 f 內某個位元 (Bit) 設定為 0。 無
17
BSF f, b, a
將 f 內某個位元 (Bit) 設定為 1。 無
24
BTFSC f, b, a
測試 f 內某個位元 (Bit) 的值是否等於 0,若為 0 則
跳過下一個指令。
無
25
BTFSS f, b, a
測試 f 內某個位元 (Bit) 的值是否等於 1,若為 1 則
跳過下一個指令。
無
26
BTG f, d, a
將 f 內某個位元 (Bit) 做 NOT 運算。 無
27
) f 表示暫存器。
Note:
) b 表示暫存器的第 b 個位元。
) d 表示資料存放的地方,d = 0 表示存放在 W 累加
器;d = 1 表示存放在 f 暫存器。
) k 表示 8 位元常數。
) n 表示程式記憶體的位址。
) a 表示資料存放在那個記憶體位置,a = 0 表示放
在目前的記憶體位置;a = 1 表示放在 BSR 暫存器
內所指定的記憶體位置。
1
PIC18 系列家族指令集
PIC18 系列家族指令快速索引 (續)
指令 指令說明 影響旗號
參考說
明頁數
程式流程控制指令 (CONTROL OPERATIONS)
BC n
若 C = 1 則跳到位址 n 去。 無
16
BN n
若 N = 1 則跳到位址 n 去。 無
18
BNC n
若 C = 0 則跳到位址 n 去。 無
19
BNN n
若 N = 0 則跳到位址 n 去。 無
20
BNOV n
若 OV = 0 則跳到位址 n 去。 無
21
BNZ n
若 Z = 0 則跳到位址 n 去。 無
22
BOV n
若 OV = 1 則跳到位址 n 去。 無
28
BRA n
無條件跳到位址 n 去 ( 1023n1024
≤
≤
−
) 。
無
23
BZ n
若 Z = 1 則跳到位址 n 去。 無
29
CALL n, s
將下一個指令的 PC 值存到堆疊的最上層,並跳到位
址
n 去 ( ) 。 1048575n0 ≤≤
無
30
CLRWDT
將看門狗計時器清為 0。 無
32
DAW
將 W 內的值做 BCD 調整。 無
38
GOTO n
無條件跳到位址 n 去 ( 1048575n0
≤
≤
) 。
無
47
NOP
空指令。 無
72
POP
將堆疊最上層的值取出來。 無
73
PUSH
將下一個指令的 PC 值存到堆疊的最上層。 無
74
RCALL n
將下一個指令的 PC 值存到堆疊的最上層,並跳到位
址
n 去 ( 1023n1024
≤
≤
− ) 。
無
75
RESET
利用軟體將系統重置。 無
76
RETFIE s
由中斷副程式返回主程式,並將堆疊最上層的值取
出來放至
PC 中,而主程式由目前 PC 值開始執行。
無
77
RETURN s
由副程式返回主程式,並將堆疊最上層的值取出來
放至
PC 中,而主程式由目前 PC 值開始執行。
無
79
SLEEP
進入睡眠狀態。 無
89
) f 表示暫存器。
Note:
) b 表示暫存器的第 b 個位元。
) d 表示資料存放的地方,d = 0 表示存放在 W 累加
器;d = 1 表示存放在 f 暫存器。
) k 表示 8 位元常數。
) n 表示程式記憶體的位址。
) a 表示資料存放在那個記憶體位置,a = 0 表示放
在目前的記憶體位置;a = 1 表示放在 BSR 暫存器
內所指定的記憶體位置。
2
PIC18 系列家族指令集
PIC18 系列家族指令快速索引 (續)
指令 指令說明 影響旗號
參考說
明頁數
立即常數定址 (LITERAL OPERATIONS)
ADDLW k
將常數 k 與 W 做相加。
C, DC, Z, OV, N
4
ANDLW k
將常數 k 與 W 做 AND 運算。
Z, N
12
IORLW k
將常數 k 與 W 做 OR 運算。
Z, N
55
LFSR f, k
將常數 k (12-bit) 搬到第 f 個 FSR 暫存器去 (f = 0 ~
2 )
。
無
59
MOVLB k
將常數 k 搬到 BSR 暫存器去。 無
64
MOVLW k
將常數 k 搬到 W 去。 無
65
MULLW k
將常數 k 與 W 做乘法運算。 無
67
RETLW k
將堆疊最上層的值取出來放至 PC 中,並將 W 的值
設為
k ( ) ,而主程式由目前 PC 值開始執
行。
255k0 ≤≤
無
78
SUBLW k
將常數 k 與 W 做減法。
C, DC, Z, OV, N
92
XORLW k
將常數 k 與 W 做 XOR 運算。
Z, N
106
程式記憶體讀寫指令 (DATA MEMORY <-> PROGRAM MEMORY OPERATIONS)
TBLRD*
以 TBLPTRH 與 TBLPTRL 記錄器之內容為位址指
標,讀取程式記憶體之內容至
TABLAT 暫存器中。
無
99
TBLRD*+
以 TBLPTRH 與 TBLPTRL 記錄器之內容為位址指
標,讀取程式記憶體之內容至
TABLAT 暫存器中,
然後將位址指標自動加
1。
無
99
TBLRD*-
以 TBLPTRH 與 TBLPTRL 記錄器之內容為位址指
標,讀取程式記憶體之內容至
TABLAT 暫存器中,
然後將位址指標自動減
1。
無
99
TBLRD+*
先將 TBLPTRH 與 TBLPTRL 記錄器先加 1,然後以
TBLPTRH 與 TBLPTRL 記錄器之內容為位址指標,
讀取程式記憶體之內容至
TABLAT 暫存器中。
無
99
TBLWT*
以 TBLPTRH 與 TBLPTRL 記錄器之內容為位址指
標,將
TABLAT 暫存器內的值寫入程式記憶體中。
無
102
TBLWT*+
以 TBLPTRH 與 TBLPTRL 記錄器之內容為位址指
標,將
TABLAT 暫存器內的值寫入程式記憶體中,
然後將位址指標自動加
1。
無
102
TBLWT*-
以 TBLPTRH 與 TBLPTRL 記錄器之內容為位址指
標,將
TABLAT 暫存器內的值寫入程式記憶體中,
然後將位址指標自動減
1。
無
102
TBLWT+*
先將 TBLPTRH 與 TBLPTRL 記錄器先加 1,然後以
TBLPTRH 與 TBLPTRL 記錄器之內容為位址指標,
將
TABLAT 暫存器內的值寫入程式記憶體中。
無
102
) f 表示暫存器。
Note:
) b 表示暫存器的第 b 個位元。
) d 表示資料存放的地方,d = 0 表示存放在 W 累加
器;d = 1 表示存放在 f 暫存器。
) k 表示 8 位元常數。
) n 表示程式記憶體的位址。
) a 表示資料存放在那個記憶體位置,a = 0 表示放
在目前的記憶體位置;a = 1 表示放在 BSR 暫存器
內所指定的記憶體位置。
3
PIC18 系列家族指令集
指令名稱:ADDLW
原 意:ADD literal to W
語 法:[label] ADDLW k
運 算 元:
255
k
0 ≤≤
運算說明:(W) + K -> W
影響旗標:N, OV, C, DC, Z
指令說明:W 累加器中的值與 k 值相加,並將運算結果放回 W 累加
器中。
類 別:立即常數定址法。
組 別:數學運算加法指令。
範例一:
ADDLW 0x11
;將 0x11 的值與W累加器相加,
結果放回
W累加器中。
0x1F
。
為
0。
元相加之後有進位的情形發
其餘旗標狀態不變。
執行前:
W = 0x1F
;假設執行前W累加器的值為
N = OV = C = DC = Z = 0 ;假設執行前狀態暫存器的值皆
執行後:
W = 0x30
;執行後W累加器的值為 0x30。
N = OV = C = 0,DC = 1
;半進位旗標等於 1,因為低四位
生,因此半進位旗標
DC等於 1
4