PIC18系列家族指令快速索引

发布者:dst2015最新更新时间:2019-11-13 来源: 51hei关键字:PIC18系列  家族指令  快速索引 手机看文章 扫描二维码
随时随地手机看文章

PIC指令

指令

指令說明

影響旗號

參考說明頁數

位元組運算指令 (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

內的資料搬到中。

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

Note:

Ff表示暫存器。

Fd表示資料存放的地方,d = 0表示存放在W累加器;d = 1表示存放在f暫存器。

Fb表示暫存器的第b個位元。


Fk表示8位元常數。

Fa表示資料存放在那個記憶體位置,a = 0表示放在目前的記憶體位置;a = 1表示放在BSR暫存器內所指定的記憶體位置。

Fn表示程式記憶體的位址。









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去 () 。

23

BZ

n

若Z = 1則跳到位址n去。

29

CALL

n, s

將下一個指令的PC值存到堆疊的最上層,並跳到位址n去 () 。

30

CLRWDT


將看門狗計時器清為0。

32

DAW


將W內的值做BCD調整。

38

GOTO

n

無條件跳到位址n去 () 。

47

NOP


空指令。

72

POP


將堆疊最上層的值取出來。

73

PUSH


將下一個指令的PC值存到堆疊的最上層。

74

RCALL

n

將下一個指令的PC值存到堆疊的最上層,並跳到位址n去 () 。

75

RESET


利用軟體將系統重置。

76

RETFIE

s

由中斷副程式返回主程式,並將堆疊最上層的值取出來放至PC中,而主程式由目前PC值開始執行。

77

RETURN

s

由副程式返回主程式,並將堆疊最上層的值取出來放至PC中,而主程式由目前PC值開始執行。

79

SLEEP


進入睡眠狀態。

89

Note:

Ff表示暫存器。

Fd表示資料存放的地方,d = 0表示存放在W累加器;d = 1表示存放在f暫存器。

Fb表示暫存器的第b個位元。


Fk表示8位元常數。

Fn表示程式記憶體的位址。

Fa表示資料存放在那個記憶體位置,a = 0表示放在目前的記憶體位置;a = 1表示放在BSR暫存器內所指定的記憶體位置。








 


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值開始執行。

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

Note:

Ff表示暫存器。

Fd表示資料存放的地方,d = 0表示存放在W累加器;d = 1表示存放在f暫存器。

Fb表示暫存器的第b個位元。


Fk表示8位元常數。

Fn表示程式記憶體的位址。

Fa表示資料存放在那個記憶體位置,a = 0表示放在目前的記憶體位置;a = 1表示放在BSR暫存器內所指定的記憶體位置。








 


指令名稱:ADDLW

原    意:ADD literal to W

語    法:[label]  ADDLW   k

運 算 元:

運算說明:(W) + K -> W

影響旗標:N, OV, C, DC, Z

指令說明:W累加器中的值與k值相加,並將運算結果放回W累加器中。

類    別:立即常數定址法。

組    別:數學運算加法指令。

範例一:

ADDLW   0x11     ;將0x11的值與W累加器相加,結果放回W累加器中。

執行前:

W = 0x1F     ;假設執行前W累加器的值為0x1F。
N = OV = C = DC = Z = 0     ;假設執行前狀態暫存器的值皆為0。

執行後:

W = 0x30     ;執行後W累加器的值為0x30。
N = OV = C = 0,DC = 1     ;半進位旗標等於1,因為低四位元相加之後有進位的情形發生,因此半進位旗標DC等於1其餘旗標狀態不變。


範例二:

ADDLW   0x11     ;將0x11的值與W累加器相加,結果放回W累加器中。

執行前:

W = 0x7F     ;假設執行前W累加器的值為0x7F。

N = OV = C = DC = Z = 0     ;假設執行前狀態暫存器的值皆為0。

執行後:

W = 0x90     ;執行後W累加器的值為0x90。

N = OV = DC = 1,Z = C = 0     ;半進位旗標DC等於1,因為低四位元相加後有進位情形發生;溢位旗標OV等於1,因為兩數相加後第7個位元有進位情形發生;負號旗標N等於1,因為兩數 相加後結果大於127,因為使用2的補數作運算,所以結果大於127便算是負號。

範例三:

ADDLW   0x11     ;將0x11的值與W累加器相加,結果放回W累加器中。

執行前:

W = 0x9F     ;假設執行前W累加器的值為0x9F。

N = OV = C = DC = Z = 0     ;假設執行前狀態暫存器的值皆為0。

執行後:

W = 0xB0     ;執行後W累加器的值為0xB0。

N = DC = 1,OV = Z = C = 0     ;半進位旗標DC等於1,因為低四位元相加後有進位情形發生;負號旗標N等於1,因為使用2的補數作運算,因此兩數相加後結果大於127,N等於1。範例 二與範例三之不同是在於範例二在相加前第七個位元為0,相加後第七個位元為1,因此溢位旗標OV等於1 (根據Microchip的定義) ,而範例三不同的是在相加前第七個位元為1,相加後第七個位元為1,因此溢位旗標OV不變,依然是等於0。

範例四:

ADDLW   0x01     ;將0x01的值與W累加器相加,結果放回W累加器中。

執行前:

W = 0xFF     ;假設執行前W累加器的值為0xFF。

N = OV = C = DC = Z = 0     ;假設執行前狀態暫存器的值皆為0。

執行後:

W = 0x00     ;執行後W累加器的值為0x00,因為累加器為8 bits的暫存器,因此相加後結果超過255 (0xFF) 便會歸0。

N = OV = 0,C = DC = Z = 1     ;由於兩數相加後結果超過255 (0xFF) ,因此進位旗標C會被設定為1;又相加後W累加器的值為0x00,因此零位旗標Z會被設定為1;又由於低四位元相加後有進位情形發生,因此半進位旗標DC 被設定為1。


指令名稱:ADDWF

原    意:ADD W to f

語    法:[label]  ADDWF   f , d, a

運 算 元:

運算說明:(W) + (f) -> dest

影響旗標:N, OV, C, DC, Z

指 令說明:W累加器中的值與f暫存器中的值相加,並將運算結果放回 ’d’ 所指定的暫存器中。若d = 0,則運算後的結果放到W累加器中;若d = 1,則運算後的結果放到f暫存器中,存放運算結果的暫存器若是存放到W累加器中,我們也可以寫成W (表W累加器) ;若存放運算結果的暫存器若是存放到暫存器中,我們也可以寫成F (表暫存器) 。若a = 0,則運算後的結果放到目前RAM的位址中;若a = 1,則運算後的結果放到BSR暫存器所指定的RAM位址中。

類    別:資料轉移指令。

組    別:數學運算加法指令。

範例一:

ADDWF   REG, 0, 0     ;將暫存器 (REG) 的值與W累加器的值相加,結果放回W累加器中。


執行前:

W = 0x11     ;假設執行前W累加器的值為0x11。

REG = 0x0F     ;假設執行前REG暫存器的值為0x0F。

N = OV = C = DC = Z = 0     ;假設執行前狀態暫存器的值皆為0。

執行後:

W = 0x20

REG = 0x0F

N = OV = C = Z = 0,DC = 1

Ø結果放回W累加器中。

範例二:

ADDWF   REG, W, 0

執行前:

W = 0x17

REG = 0xC2

N = OV = C = DC = Z = 0

執行後:

W = 0xD9

REG = 0xC2

N = OV = C = DC = Z = 0

Ø結果放回W累加器中。

範例三:

ADDWF   REG, F, 1 (if BSR = 0x01)

執行前:

W = 0x17

REG = 0xC2

N = OV = C = DC = Z = 0

執行後:

W = 0x17

REG = 0xC2

RAM位址100 = 0xD9

N = OV = C = DC = Z = 0

Ø結果放在BSR暫存器所指定的位址中。

範例四:

ADDWF   REG, W

執行前:

W = 0x17

REG = 0xC2

N = OV = C = DC = Z = 0

執行後:

W = 0xD9

REG = 0xC2

N = OV = C = DC = Z = 0

Ø結果放回W累加器中。

範例五:

ADDWF   REG, F

執行前:

W = 0x01

REG = 0x10

N = OV = C = DC = Z = 0

執行後:

W = 0x01

REG = 0x11

N = OV = C = DC = Z = 0

Ø結果放回暫存器中。


指令名稱:ADDWFC

原    意:ADD W and Carry bit to f

語    法:[label]  ADDWFC   f , d, a

運 算 元:

運算說明:(W) + (f) + (c) -> dest

影響旗標:N, OV, C, DC, Z

指 令說明:W累加器中的值與f暫存器中的值與進位旗標三者相加,並將運算結果放回 ’d’ 所指定的暫存器中。若d = 0,則運算後的結果放到W累加器中;若d = 1,則運算後的結果放到f暫存器中,存放運算結果的暫存器若是存放到W累加器中,我們也可以寫成W (表W累加器) ;若存放運算結果的暫存器若是存放到暫存器中,我們也可以寫成F (表暫存器) 。若a = 0,則運算後的結果放到f所指定的暫存器中;若a = 1為不存在狀態。

類    別:資料轉移指令。

組    別:數學運算加法指令。

範例一:

ADDWFC   REG, 0, 1

執行前:

W = 0x4D

REG = 0x02

Carry=1

N = OV = DC = Z = 0

執行後:

W = 0x50

REG = 0x02

Carry=0

N = OV = DC = Z = 0

Ø結果放回W累加器中,進位旗標C = 0。

範例二:

ADDWFC   REG, F, 0

執行前:

W = 0x4D

REG = 0x02

Carry=1

N = OV = DC = Z = 0

執行後:

W = 0x4D

REG = 0x50

Carry=0

N = OV = DC = Z = 0

Ø結果放回暫存器中,進位旗標C = 0。


指令名稱:ANDLW

原    意:AND literal with W

語    法:[label]  ANDLW   k

運 算 元:

運算說明:(W) .AND. k -> W

影響旗標:N, Z

指令說明:W累加器中的值與k值做邏輯的AND運算,並將運算結果放回W累加器中。

類    別:立即常數定址法。

組    別:邏輯運算AND指令。

範例一:

ANDLW   0x5F

執行前:

W = 0xA3 = 10100011

N = Z = 0

執行後:

W = 0x03

N = Z = 0


範例二:

ANDLW   0x00

執行前:

W = 0x5F = 01011111

N = Z = 0

執行後:

W = 0x00

N = 0;Z=1


指令名稱:ANDWF

原    意:AND W with f

語    法:[label]  ANDWF   f , d, a

運 算 元:

運算說明:(W) .AND. (f) -> dest

影響旗標:N, Z

指 令說明:W累加器中的值與f暫存器中的值做邏輯AND運算,並將運算結果放回 ’d’ 所指定的暫存器中。若d = 0,則運算後的結果放到W累加器中;若d = 1,則運算後的結果放到f暫存器中,存放運算結果的暫存器若是存放到W累加器中,我們也可以寫成W (表W累加器) ;若存放運算結果的暫存器若是存放到暫存器中,我們也可以寫成F (表暫存器) 。若a = 0,則運算後的結果放到f所指定的暫存器中;若a = 1不存在 (系統預設值) 。

類    別:邏輯運算指令。

組    別:邏輯運算AND指令。

範例一:

ANDWF   REG, 0, 0

執行前:

W = 0x17

REG = 0xC2

N = Z = 0


執行後:

W = 0x02

REG = 0xC2

N = Z = 0

Ø結果放回W累加器中。

範例二:

ANDWF   REG, F

執行前:

W = 0x01

REG = 0xFF

N = Z = 0

執行後:

W = 0x01

REG = 0x01

N = Z = 0

Ø結果放回暫存器中。


指令名稱:BC

原    意:Branch if Carry

語    法:[label]  BC   label name

運 算 元:

運算說明:If carry bit is ‘1’, jump to label name.

影響旗標:無

指令說明:當狀態暫存器中的進位旗標C等於1時,就跳到指定的位址。

類    別:程式流程控制指令。

組    別:比較跳躍指令。

範例一:

Here  BC   Lab1     ;若是進位旗標C等於1就跳到Lab1的位址,若是進位旗標C不等於1則程式往下執行。

執行前:

PC = 在目前Here的位址

C = 1

執行後:

PC = 跳到Lab1的位址

C = 1


指令名稱:BCF

原    意:Bit Clear f

語    法:[label]  BCF   f, b

運 算 元:

運算說明:0 -> f < b >

影響旗標:無

指令說明:將暫存器中的某一個位元清除為0。

類    別:位元定址指令。

組    別:單一位元清除指令。

範例一:

BCF   REG,2     ;將REG暫存器的第2個位元清除為0。

執行前:

REG = 11111111 = 0xFF     ;REG暫存器的值為0xFF。

執行後:

REG = 11111011 = 0xFB     ;將REG暫存器的第2個位元清除為0,從右邊算起為第0個位元、第1個位元、第2個位元,以下依此類推。


指令名稱:BN

原    意:Branch if Negative

語    法:[label]  BN   Label name

運 算 元:

運算說明:If negative bit is ‘1’, jump to label name.

影響旗標:無

指令說明:當狀態暫存器中的負號旗標N等於1時,就跳到指定的位址。

類    別:程式流程控制指令。

組    別:比較跳躍指令。

範例一:

Here  BN   Lab1     ;若是負號旗標N等於1就跳到Lab1的位址,若是負號旗標N不等於1則程式往下執行。

執行前:

PC = 在目前Here的位址

N = 1

執行後:

PC = 跳到Lab1的位址

N = 1


指令名稱:BNC

原    意:Branch if Not Carry

語    法:[label]  BNC   label name

運 算 元:

運算說明:If carry bit is ‘0’, jump to label name.

[1] [2] [3] [4] [5] [6] [7]
关键字:PIC18系列  家族指令  快速索引 引用地址:PIC18系列家族指令快速索引

上一篇:超声波PIC单片机C程序
下一篇:单片机EC1数字旋扭编码仿真程序

热门资源推荐
热门放大器推荐
    Error

    An error occurred.

    Sorry, the page you are looking for is currently unavailable.
    Please try again later.

    If you are the system administrator of this resource then you should check the error log for details.

    Faithfully yours, OpenResty.

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved