§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
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#)
分享到: