迅维网
标题: PIC16系列指令集 [打印本页]
作者: バ幸福De右岸 时间: 2016-2-28 09:16
标题: PIC16系列指令集
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
C=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
C=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
欢迎光临 迅维网 (https://www.chinafix.com/) |
Powered by Discuz! X3.4 |