迅维网

查看: 1629|回复: 0
打印 上一主题 下一主题

PIC16系列指令集

[复制链接]
跳转到指定楼层
1#
发表于 2016-2-28 09:16:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式 来自: 山东青岛 来自 山东青岛

马上注册,获取阅读精华内容及下载权限

您需要 登录 才可以下载或查看,没有帐号?注册

x
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;CONTINUEC=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;CONTINUEC=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:  C=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
      
                     
              
              
      



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

本版积分规则

快速回复 返回顶部 返回列表
附近
店铺
微信扫码查看附近店铺
维修
报价
扫码查看手机版报价
信号元
件查询
点位图 AI维修
助手



芯片搜索

快速回复