您当前的位置:五五电子网电子知识单片机-工控设备PIC单片机PIC12C508 PIC12C509 指令集及程序设计技巧 正文
PIC12C508 PIC12C509 指令集及程序设计技巧

PIC12C508 PIC12C509 指令集及程序设计技巧

点击数:7816 次   录入时间:03-04 12:03:42   整理:http://www.55dianzi.com   PIC单片机
PIC12C5XX 指令集及程序设计技巧

§2.1  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

[1] [2]  下一页


本文关键字:技巧  程序设计  PIC单片机单片机-工控设备 - PIC单片机