找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9058|回复: 3
打印 上一主题 下一主题
收起左侧

PIC16系列指令集

[复制链接]
跳转到指定楼层
楼主
ID:105323 发表于 2016-2-22 20:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

PIC16系列指令集

一、字节操作指令(d=0时目标寄存器为W;d=1时目标寄存器为F)

指令

指令名称

指令操作说明

范例

ADDWF f,d

寄存器加法指令

W寄存器中的值和f寄存器中的值相加,结果存于目标寄存器

ADDWF  FSR,0 ;W中的值加FSR的中的值

SUBWF f,d

寄存器减法指令

f寄存器中的值减去W寄存器中的值,运算存于目标寄存中

SUBWF  REG1,1;REG1减去W中的值(结果为正C=1、Z=0;结果为零C=1,Z=0;结果为负时C=0、Z=0

INCF f,D

寄存器加1指令

f寄存器中的值递增1,操作算存于目标寄存中

INCF CNT,1 ;CNT=0xFF(Z=0)时执行后CNT=0x00(Z=1)

DECF f,d

寄存器减1指令

f寄存器中的值递减1,操作算存于目标寄存中

DECF CNT,1 ;CNT=0x01(Z=0)时执行后CNT=0x00(Z=1)

ANDWF f,d

寄存器与指令

W寄存器中的值和f寄存器中的值做AND运算,结果存于目标寄存器中

ANDWF FSR,1 ;W=0x17,FSR=0xC2时执行后W=0x17,FSR=0x02(做运算时要把十六进制转成二进制)(全真为真,有假为假)

IORWF f,d

寄存器或指令

W寄存器中的值和f寄存器中的值做OR运算,结果存于目标寄存器中

IORWF RESULT,0;RESULT=0x13,W=0x91时执行后RESUL=0x13,W=0x93(有真为真,全假为假)

XORWF f,d

寄存器异或指令

W寄存器中的值和f寄存器中的值做XOR运算,结果存于目标寄存器中

XORWF REG,1;REG=0xAF,W=0xB5时执行后REG=0x1A, W=0xB5(XOR两个值不相同异或结果为真,反之,为假)

COMF f,d

寄存器取反指令

f寄存器中的值做补码运算后,运算结果存于目标寄存器中

COMF REG1,0;REG1=0x13时执行后REG1=0x13,W=0xEC(CO运算时位补1,其它取反。

CLRF Clear f

寄存器清零指今

f寄存器中的值清0,Z标志位值1

XCLRF FLAG_REG ;FLAG_REG =0x5时执行后FLAG_REG =0x00,Z=1

CLRW

W清零指令

f寄存器中的值清0,Z标志位值1

CLRW  ;W=0x1D时执行后W=0x00,Z=1

MOVF f,d

f寄存器传送指令

把f寄存器中的值存于目标寄存器中,当目标寄存器也是f时,可以用来测试f内容是否为零

MOVF FSR,0 FSR=0x1A时执行后W=0x1A

MOVWF f

W寄存器传送指令

把W寄存器中的值传送到目标寄存器f中

MOVWF OPTION ;OPTION=0xFF,W=0xE5时执行后OPTION=0xE5,W=0xE5

INCFSZ f,d

寄存器加1,为零时跳指令

f寄存器中值加1,结果存于目标寄存器,结果为1执行下一条指令,结果为0忽略并用NOP代替.

HERE INCFSZ CNT,1;GOTO LOOP;CONTINUE;PC=HERER执行后, CNT=CNT加1,当CNT=0,PC=CONTINUE,当CNT≠0时PC=HERE加1

DECFSZ f,d

寄存器减1,为零时跳指令

f寄存器中值减1,结果存于目标寄存器,结果为1执行下一条指令,结果为0忽略并用NOP代替.

HERE DECFSZ CNT,1;GOTO LOOP;CONTINUE;PC=HERER执行后, CNT=CNT减1,当CNT=0,PC=CONTINUE,当CNT≠0时PC=HERE减1

RLF f,d

带进位左移指令

C位放在f值的MSB之前当作9位,然后每个位向左移,C位移到0,结果存于目标寄储器

RLF REG1,0;REG1=1110 0110,C=0时执行后                    REG1=1110 0110,W=11001100,C=1

RRF f,d

带进位左移指令

C位放在f值的MSB之前当作9位,然后每个位向左移,0位移到C,结果存于目标寄储器

RRF REG1,0;REG1=1110 0110,C=0时执行后                    REG1=1110 0110,W=0111 0011,C=0

SWAPF f,d

寄存器交换指令

F寄存器中的上半字节与下半字节内容调换,运算结果存于目标寄存器

SWAPF REG,0;REG=0x1F时执行后REG=0x1F,W=0xF1

二、位操作指令

指令

指令名称

指令操作说明

范例

BCF f,b

位清0指令

f寄存器中位b清0

BCF REG,7;REG=0xF1时执行后REG=0xF1,W=71

BSF f,b

位置1指令

f寄存器中位b置1

BSF REG,7;REG=0x04K时执行后REG=0x84

BTFSC f,b

位测试,为0则跳指令

查f寄存器b位,为1时执行下一条,为0时跳过下一条并执行NOP代替

HERE BTFSC FLAG,1;FALSE GOTO PE;TRUE:  ;PC=HERE时执行后,当FLAG=0时,PC=TRUE;当FLAG=1,PC=FALSE

BTFSS f,b

位测试,为1则跳指令

查f寄存器b位,为0时执行下一条,为1时跳过下一条并执行NOP代替

HERE BTFSS FLAG,1;FALSE GOTO PE;TRUE:  ;PC=HERE时执行后,当FLAG=1时,PC=TRUE;当FLAG=0,PC=FALSE

三、常数和控制操作类指令

指令

指令名称

指令操作说明

范例

ADDLW k

常数加法指令

W寄存器中的值和k相加,结果存W寄存器中

ADDLW 0xD1;W=0x11时执行后W=0xE2

SUBLW k

常数减法指令

W寄存器中的值和k相减,结果存W寄存器中

SUBLW 0xD1;W=0x11时执行后W=0xC0

ANDLW k

常数与指令

W寄存器中的值和k做与运算,结果存W寄存器中

ANDLW 0x5F;W=0xA3时执行后W=0x03

IORLW k

常数或指令

W寄存器中的值和k做或运算,结果存W寄存器中

IORLW 0x35;w=0x9A时执行后W=0xBF

XORLW k

常数异或指令

W寄存器中的值和k做异或运算,结果存W寄存器中

XORLW 0xAF;W=0xB5时执行后W=0x1A

CLRWDT

看门狗计数器清0令

复位看门狗定时器、WDT预分频(清0),TO、PD位置1

CLRWDT ;WDT Counter=?时执行后WDT Counter=0x00,WDT Prescaler=0,TO=1,PD=1

MOVLW k

常数传送指令

把k值传送到W寄存器中

MOVLW 0x5A ;时执行后W=0x5A

CALL k

子程序调用指令

首先将返回地址((PC)+1)压栈保护,再转入所调用的子程序入口地址执行

HERE CALL THERE;PC=HERE时执行后PC=THERE,TOS=HERE+1

GOTO k

无条件跳转指令

无条件跳转,11个位的k值放PC(10:0),PC(12:11)值从PCLATH(4:3)

GOTO HERE 执行后PC=HERE

RETURN

子程序返回指令

从子程序中返回,堆栈顶端的值会存放PC中

RETURN ;执行后PC从子程序返回

RETLW k

子程序带参数返回指令

W寄存器中会放入k值,堆栈中弹出值放入PC

CALL ABC;ABC:ADDWF PC;RETLW k1;RETLW k2…;W=0x07时执行后W=K?

RETFIE

中断服务子程序返回指令

从中断程序中返回,堆栈顶的值会存入PC中,全局中断位置1

RETFIE ;PC从中断子程序返回,GIE=1

SLEEP

睡眠指令

省电状态清0超时位置1,看门狗、预分频清0,振荡器无输出

SLEEP

NOP

空操作指令

不做任何操作

NOP

 

 

 

 

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:116389 发表于 2016-5-25 10:58 | 只看该作者
我是一楼,我坐沙发,楼下抢板凳
回复

使用道具 举报

板凳
ID:160143 发表于 2017-1-5 15:35 来自触屏版 | 只看该作者
感谢,太辛苦了…
回复

使用道具 举报

地板
ID:162136 发表于 2017-4-11 15:37 | 只看该作者
CLRW
W清零指令
f寄存器中的值清0,Z标志位值1
CLRW  ;W=0x1D时执行后W=0x00,Z=1
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表