马上注册,获取阅读精华内容及下载权限
您需要 登录 才可以下载或查看,没有帐号?注册
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
|