技术热线: 4007-888-234

PIC12C5XX 单片机指令集及程序设计技巧

更新时间: 2019-03-22
阅读量:2950

单片机代理商深圳英锐恩为您分享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

    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     &nbs