天堂草原最受欢迎的角色,天堂动漫,天堂在线,色天堂下载,天堂中文在线资源,亚洲男人天堂

技術熱線: 4007-888-234
設計開發

專注差異化嵌入式產品解決方案 給智能產品定制注入靈魂給予生命

開發工具

提供開發工具、應用測試 完善的開發代碼案例庫分享

技術支持

從全面的產品導入到強大技術支援服務 全程貼心伴隨服務,創造無限潛能!

新品推廣

提供新的芯片及解決方案,提升客戶產品競爭力

新聞中心

提供最新的單片機資訊,行業消息以及公司新聞動態

PIC12C5XX 單片機指令集+程序設計技巧

更新時間: 2019-03-23
閱讀量:1808

十年專注單片機方案開發的方案公司英銳恩,分享PIC12C5XX 單片機指令集及程序設計技巧。英銳恩現提供服務產品涉及主控芯片:8位單片機、16位單片機、32位單片機及各類運算放大器等。

PIC12C5XX 單片機指令概述 

PIC12C5XX單片機每條指令長12位,指令由操作碼和操作數組成。PIC12C5XX單片機共有33條指令,按操作分成三大類: 1、面向字節操作類 2、面向位操作類 3、常數操作和控制操作類。

全部指令如表2.1所示。

面向字節操作類指令

(11-6)

(5)

(4-0)


OPCODE

d

f(FILE#)






二進制代碼 HEX 名稱 助記符,操作數 操作



狀態影響

0000 0000 0000

000

空操作

NOP





0000 001f ffff

02f

W送到f

MOVWF f

W→f



1,4

0000 0100 0000

040

W清零

CLRW -

0→W



Z


0000 011f ffff

06f

f清零

CLRF f

0→f



Z

4

0000 10df ffff

08f

f減去W

SUBWF f,d

f-W→d



C,DC,Z

1,2,4

0000 11df ffff

0Cf

f遞減

DECF f,d

f-1→d



Z

2,4

0001 00df ffff

10f

W和f做或運算

IORWF f,d

W∨f→d



Z

2,4

0001 01df ffff

14f

W和f做與運算

ANDWF f,d

W∧f→d



Z

2,4

0001 10df ffff

18f

W和f做異或運算

XORWF f,d

W〇f→d



Z

2,4 

0001 11df ffff

1Cf

W加f

ADDWF f,d

W+f→d



C,DC,Z

1,2,4

0010 00df ffff

20f

傳送f到d

MOVF f,d

f→d



Z

2,4

0010 01df ffff

24f

f取補

COMF f,d

f→d



Z

2,4

0010 10df ffff

28f

f遞增

INCF f,d

f+1→d



Z

2,4

0010 11df ffff

2Cf

f遞減,為0則跳

DECFSZ f,d

f-1→d,skip if zero

Z

2,4

0011 00df ffff

30f

f循環右移

RRF f,d

f(n)→d(n-1),f(0)→C,C→d(7)

C

2,4

0011 01df ffff

34f

f循環左移

RLF f,d

f(n)→d(n+1),f(7)→C,C→d(0)

C

2,4

0011 10df ffff

38f

f半字節交換

SWAPF f,d

f(0.3)←→f(4-7)→d

Z

2,4

0011 11df ffff

3Cf

f遞增,為0則跳

INCFSZ f,d

f+1→d,skip if zero

Z

2,4 






面向位操作類指令

(11-8)

(7-5)

(4-0)



OPCODE

b(BIT#)

f(FILE#)







二進制代碼 HEX 名稱 助記符,操作數 操作



狀態影響

0100 bbbf ffff

4bf

清除f的位b

BCF f,b

0→f(b)

Z

2,4

0101 bbbf ffff

5bf

設置f的位b

BSF f,b

1→f(b)

Z

2,4

0110 bbbf ffff

6bf

測試f的位b,為0則跳

BTFSC f,b

Test bit(b) in file(f):Skip if clear

Z


0111 bbbf ffff

7bf

測試f的位b,為0則跳

BTFSS f,b

Test bit(b) in file(f):Skip if clear

Z






常數操作和控制操作類指令

(11-8)

(7-0)



OPCODE

k(LITERAL)







二進制代碼 HEX 名稱 助記符,操作數 操作



狀態影響

0000 0000 0010

002

寫OPTION寄存器

OPTION -

W→OPTION register


0000 0000 0011

003

進入睡眠狀態

SLEEP -

0→WDT,stop oscillator

TO,PD


0000 0000 0100

004

清除WDT計時器

CLRWDT -

0→WDT(and prescaler,if assigned)

TO,PD


0000 0000 0fff

00f

設置I/O狀態

TRIS f

W→I/O control register f

3

1000 kkkk kkkk

8kk

子程序帶參數返回

RETLW k

k→W,Stack→PC


1001 kkkk kkkk

9kk

調用子程序

CALL k

PC+1→Stack,K→PC

1

101k kkkk kkkk

Akk

跳轉(K為9位)

GOTO k

k→PC(9 bits)


1100 kkkk kkkk

Ckk

常數置入W

MOVLW k

k→W

Z


1101 kkkk kkkk

Dkk

常數和W做或運算

IORLW k

k∨W→W

Z


1110 kkkk kkkk

Ekk

常數和W做與運算

ANDLW k

k∧W→W

Z


1111 kkkk kkkk

Fkk

常數和W做異或運算

XORLW k

k○W→W

Z



表2.1 PIC12C5XX 指令集

注:1、除GOTO指令外,任何有關寫PC(F2)的指令(例如 CALL、MOVWF 2)都將會把PC寄存器的第9位清零。

  2、若對I/O口寄存器進行操作,如“SUBWF 6,1”,則使用的F6的值是當前GP口上的狀態值,而非GP口輸出鎖存器里的值。

3、指令“TRIS 6”將W寄存器中的內容寫入GP的I/O口控制寄存器中:“1”關斷對應端口的輸出緩沖器,使其為輸入(高阻)狀態,“0”則使其為輸出態。

   4、當預分頻器(Prescaler)分配給TIMER0后,任何對TMR0寄存器(F1)寫操作的指令都將使預分頻器清零。

§2.2 PIC12C5XX 指令尋址方式

PIC12C5XX單片機尋址方式根據操作數的來源,可分為寄存器間接尋址、立即數尋址、直接尋址和位尋址四種。

一、寄存器間接尋址

這種尋址方式通過寄存器F0(INDF)、F4(FSR)來實現。實際的寄存器地址放在FSR中,通過INDF來進行間接尋址。

例: FSR EQU 4 INDF EQU 0 MOVLW 05H ; W=5 MOVWF FSR ; W(=5)→F4 MOVLW 55H ; W=55H MOVWF INDF ; W(=55H)→F5

上面這段程序把55H送入F5寄存器。間址尋址方式主要用于編寫查表、寫表程序,非常方便。請參考§2.7程序設計技巧。

二、立即數尋址

這種方式就是操作數為立即數,可直接從指令中獲取。

例:  MOVLW 16H ; 16H →W

三、直接尋址

這種方式是對任何一寄存器直接尋址訪問。對PIC12C508,寄存器地址(5位)直接包括在指令中,對PIC12C509,寄存器地址中最高1位由FSR(F4)寄存器中的bit5決定,即體選位。

例: MOVWF 8 ; W→F8寄存器

MOVF 8,W ; F8→W

四、位尋址

這種尋址方式是對寄存器中的任一位(bit)進行操作。

例: BSF 11,0 ; 把F11的第0位置為“1”。

§2.3 面向字節操作類指令 

這類指令共有18條,包括有數據傳送、算術和邏輯運算、數據移位和交換等操作。它們的操作都是在W數據寄存器f之間進行,其指令碼結構為:

(11—6)

(5)

(4—0)

OPCODE

d

f(File#)

高6位是指令操作碼。第6位d是方向位。d=1,則操作結果存入f(數據寄存器),d=0,則操作結果存入W。低5位是數據寄存器地址,可選中32個寄存器。對于PIC12C509,則還要參考寄存器體選擇器FSR的bit5選擇存入哪一個寄存器體(bank0或bank1)。

1、寄存器加法指令

格式: ADDWF f,d

指令碼:

000111

d

fffff

指令周期: 1 操作: W+f→d 影響狀態位: C,DC,Z 說明: 將f寄存器和w相加,結果存入f(d=1)或W(d=0)。 例: ADDWF 8,0 ; F8+W→W

─────────────────────────────────

2、寄存器與指令

格式: ANDWF f,d

指令碼:

000101

d

fffff

指令周期: 1 操作: W∧f→d 影響狀態位: Z 說明: 將f寄存器和w做邏輯與運算,結果存入f(d=1)或W(d=0)。 例: ANDWF 10,0 ; F10∧W→W ANDWF 10,1 ; F10∧W→F10

─────────────────────────────────

3、寄存器清零指令

格式: CLRF f

指令碼:

0000011

fffff

指令周期: 1 操作: 0→f ,1→z 影響狀態位:z 說明: 將f寄存器清零,狀態位Z將被置為1。 例: CLRF 8 ; F8清為零(0→F8)

─────────────────────────────────

4、W清零指令

格式: CLRW

指令碼:

000001

0

00000

指令周期: 1 操作: 0→W,1→Z 影響狀態位: Z 說明: 將W寄存器清零,狀態位Z將被置為1。 例: CLRW ;W清為零,Z置為1

─────────────────────────────────

5、寄存器取反指令

格式: COMF f,d

指令碼:

00

d

fffff

指令周期: 1 操作: f→d 影響狀態位: Z 說明: 將f寄存器內容做邏輯求反運算,結果存入f(d=1)或W(d=0)。 例: COMF 12,0 ; F12取反→F12 COMF 12,1 ; F12取反→W

─────────────────────────────────

6、寄存器減1指令

格式: DECF f,d

指令碼:

000011

d

fffff

指令周期: 1 操作: f-1→d 影響狀態位: C,DC,Z 說明: f寄存器內容減1存入f(d=1)或W(d=0)。    例: DECF 15,1 ; F15-1→F15 DECF 15,0 ; F15-1→W

─────────────────────────────────

7、寄存器減1,結果為零則跳指令

格式: DECFSZ f,d

指令碼:

0010

11df

ffff

指令周期: 1或2(產生跳轉時為2)

操作: f-1→d; 結果為零則跳(PC+1→PC)

影響狀態位: 無

說明: 將f寄存器內容減1存入f(d=1)或W(d=0)。如果結果為0,則跳過

下一條指令不執行。否則順序執行下一條指令。

例: ┌───DECFSZ 10,1 ; F10-1→F10,如果F10為0

   F10=0 │ MOVLW 55H ; 則跳過MOVLW 55H指令

    └──→MOVF 12,0

─────────────────────────────────

8、寄存器加1指令

格式: INCF f,d

指令碼:

001010

d

fffff

指令周期: 1

操作: f+1→d

影響狀態位: C,DC,Z

說明: f寄存器加1,結果存入f(d=1)或W(d=0)。

例: INCF 10,0 ; F10+1→W

INCF 10,1 ; F10+1→F10

─────────────────────────────────

9、寄存器加1,結果為零則跳指令

格式: INCFSZ f,d

指令碼:

001111

d

fffff

指令周期: 1或2(產生跳轉時為2)

操作:    f+1→d,結果為零則跳(PC+1→PC)

影響狀態位: 無

說明:    將f寄存器內容加1存入f(d=1)或W(d=0),如果結果為零則PC值

加1跳過下一條指令。

例: L00P ┌─INCFSZ 8,1 ; 將F8寄存器加1,結果存入F8,

│ GOTO LOOP ; 加1后結果為零則跳到MOVWFF9指令

F8=0 └→MOVWF 9

─────────────────────────────────

10、寄存器或指令

格式: IORWF f,d

指令碼:

000100

d

fffff

指令周期: 1

操作: W∨f→d

影響狀態位: Z

說明: 將f寄存器內容和W內容做邏輯或運算,結果存入f(d=1)或W(d=0)。

例: IORWF 18,1 ; F18∨W→F18

IORWF 18,0 ; F18∨W→W

─────────────────────────────────

11、f寄存器傳送指令

格式: MOVF f,d

指令碼:

001000

d

fffff

指令周期: 1

操作: f→d

影響狀態位: Z

說明: 將f寄存器內容傳送至W(d=0)或自己本身f(d=1)。如果是傳給

自己,一般是用來影響狀態位Z,即可判斷f是否為零。

例:   MOVF 10,1 ; F10→F10

BTFSS 3,2 ; 判斷F3的第二位,即Z狀態位。如果F10=0,則Z=1。

─────────────────────────────────

12、W寄存器傳送指令

格式: MOVWF f

指令碼:

000000

1

fffff

指令周期: 1

操作: W→f

影響狀態位: 無

說明: 將W內容傳給f寄存器。

例: MOVWF 6 ; W→F6(B口)

─────────────────────────────────

13、空操作指令

格式: NOP

指令碼:

000000

000000

指令周期: 1

操作: 無任何操作

影響狀態位: 無

說明: 不做任何操作,只有使PC加1。

─────────────────────────────────

14、帶進位位左移指令

格式: RLF f,d

指令碼:

001101

d

fffff

指令周期: 1

操作: f(n)→d(n+1),f(7)→c,c→d(0)

影響狀態位: C

說明: 將f寄存器左移,結果存入f(d=1)或W(d=0)。f左移時,其最高

位(bit7)移入狀態位C(進位位),如下圖:

進位位

┌──┐ ┌──┬──┬──┬──┬──┬──┬──┬──┐

┌─┤ C │← │D7 │ D6 │D5 │ D4 │D3 │ D 2│ D1 │ D0│ ←─┐

│ └──┘ └──┴──┴──┴──┴──┴──┴──┴──┘ │

└──────────────────────────────────┘

例: RLF 8,1 ; F8左移→F8

RLF 8,0 ; F8左移→W

─────────────────────────────────

15、帶進位位右移指令

格式: RRF f,d

指令碼:

001100

d

fffff

指令周期: 1

操作: f(n)→d(n-1),f(0)→c,c→d(7)

影響狀態位: C

說明: 將f寄存器右移,結果存入f(d=1)或W(d=0)。f右移時,其最低

位(bito)移入狀態位C,而原來的狀態位C移入f最高位(bit7),

如下圖:

┌────────────────────────────┐

│進位位 │

│ ┌─┐ ┌──┬─┬──┬─┬──┬─┬──┬─┐│

└─→│C │→│D7 │D6│D5 │D4│D3 │D2│ D1 │D0│─┘

└─┘ └──┴─┴──┴─┴──┴─┴──┴─┘

例: RRF 8 ,1 ;F8右移→F8

RRF 8,0 ;F8右移→W

─────────────────────────────────

16、寄存器減法指令

格式: SUBWF f,d

指令碼:

000010

d

fffff

指令周期: 1

操作: f-w→d

影響狀態位: C,DC,2

說明: 將f寄存器內容減去W內容,結果存入f(d=1)或W(d=0)。

例: CLRF 20 ;F20=0

MOVLW 1 ; W=1

SUBWF 20,1 ; F20-W=0-1=-1→F20

; C=0,運算結果為負。

─────────────────────────────────

17、寄存器交換指令

格式: SWAPF f,d

指令碼:

001110

d

fffff

指令周期: 1

操作: f(0-3)→d(4-7),f(4-7)→d(0-3)

影響狀態位: 無

說明: 將f寄存器內容的高4位(bit7-bit4)和低4位(bit3-bit0)交換

結果存入f(d=1)或W(d=0)。

例: MOVLW 56H

MOVWF 8 ; F8=56H

SWAPF 8,1 ; F8交換,結果存入F8,則F8=65H。

─────────────────────────────────

18、寄存器異或運算指令

格式: XORWF f,d

指令碼:

00010

d

fffff

指令周期: 1

操作: W○f→d

影響狀態位: Z

說明: 將f寄存器和W進行異或運算,結果存入f(d=1)或W(f=0)。

例: XORWF 5,1 ; F5○W→F5(A口)

XORWF 5,0 ; F5○W→W

§2.4 面向位操作類指令 

這類指令共有4條,指令碼基本結構為:

(11—8)

(7—5)

(4—0)

OPCODE

bbb

file#

高4位是操作碼。bit5-bit7是位地址(可尋址8個位),bito-bit4是寄存器地址。

XORWF 5,0 ; F5○W→W

§2.4 面向位操作類指令 

這類指令共有4條,指令碼基本結構為:

(11—8)

(7—5)

(4—0)

OPCODE

bbb

file#

高4位是操作碼。bit5-bit7是位地址(可尋址8個位),bito-bit4是寄存器地址。

XORWF 5,0 ; F5○W→W

§2.4 面向位操作類指令 

這類指令共有4條,指令碼基本結構為:

(11—8)

(7—5)

(4—0)

OPCODE

bbb

file#

高4位是操作碼。bit5-bit7是位地址(可尋址8個位),bito-bit4是寄存器地址。

影響狀態位: 無

联系我们: 桐梓县| 县级市| 徐闻县| 张北县| 永清县| 泽库县| 云南省| 淮南市| 南江县| 静安区| 商洛市| 固安县| 台南市| 来宾市| 肥西县| 霍林郭勒市| 子洲县| 错那县| 凤翔县| 得荣县| 济源市| 教育| 海原县| 山丹县| 公主岭市| 安顺市| 泾源县| 张掖市| 开远市| 乌鲁木齐市| 穆棱市| 邯郸市| 石家庄市| 汉中市| 唐海县| 明溪县| 双柏县| 黑山县| 永新县| 阳朔县| 本溪市|