- PIC单片机常用模块与综合系统设计实例精讲
- 夏彬彬 任明全 屈金学编著
- 3275字
- 2020-08-28 05:06:45
3.2 PIC16F87X指令集
1.数据传送指令
① 立即数传送指令
句法: MOVLW k 操作范围: 0<k<255 指令周期: 0 影响标志位: 无 操作内容: k→W 操作说明: 把8位立即数传送给W寄存器。
② f寄存器传送指令
句法: MOVF f,d 操作范围: 0<f127,d∈[0,1] 指令周期: 1 影响标志位: Z 操作内容: f→d 操作说明:将f寄存器内容传送给f本身(d=1)或W寄存器(d=0)。
③ W寄存器传送指令
句法: MOVWF f 操作范围: 0<f<127 指令周期: 1 正影响标志位:无 操作内容: W→f 操作说明:将W寄存器内容传送给f寄存器。
2.算术运算指令
(1)加法运算指令
① 立即数加法指令
句法: ADDLW k 操作范围: 0<k<225 指令周期: 1 影响标志位: C、DC、Z 操作内容: k+W→W 操作说明:将立即数与W寄存器内容相加,结果传送给W寄存器。
② W寄存器加法指令
句法: ADDWF f,d 操作范围: 0<f<127,d∈[0,1] 指令周期: 1 影响标志位: C、DC、Z 操作内容: W+f→d 操作说明:将W寄存器内容与f寄存器内容相加,结果传送给f本身(d=l)或W寄 存器(d=0)。
③ f寄存器加1指令
句法: INCF f,d 操作范围: 0<f<127,d∈[0,1] 指令周期: 1 影响标志位:Z 操作内容: f+1→d 操作说明:将f寄存器内容加1,结果传送给f本身(d=1)或W寄存器(d=0)。
(2)减法运算指令
① 立即数减法指令
句法: SUBLW k 操作范围: 0<k<225 指令周期: 1 影响标志位: C、DC、Z 操作内容: k-W→W 操作说明:将立即数与W寄存器内容相减,结果传送给W寄存器。
② W寄存器减法指令
句法: SUBWF f,d 操作范围: 0<f<127,d∈[0,1] 指令周期: 1 影响标志位: C、DC、Z 操作内容: f-W→d
操作说明:将f寄存器内容与W寄存器内容相减,结果传送给f本身(d=l)或W寄存器(d=0)。
③ f寄存器减1指令
句法: DECF f,d 操作范围: 0<f<127,d∈[0,1] 指令周期: 1 影响标志位: Z 操作内容: f-1→d 操作说明:将f寄存器内容减1,结果传送给f本身(d=1)或W寄存器(d=0)。
3.逻辑指令
(1)逻辑运算指令
① 寄存器取反指令
句法: COMF f,d 操作范围: 0<f<127,d∈[0,1] 指令周期: 1 影响标志位: Z 操作内容: f取反→d 操作说明:将f寄存器内容取反,结果传送给f本身(d=1)或W寄存器(d=0)。
② 寄存器半字节交换指令
句法: SWAPE f,d 操作范围: 0<f<127,d∈[0,1] 指令周期: 1 影响标志位:无 操作内容: f<0,3>→d<4,7>,f<4,7>→d<0,3> 操作说明:将f寄存器内容高4位和低4位交换,结果传送给f本身(d=1)或W寄 存器(d=0)。
③ 立即数逻辑与指令
句法:ANDLW k 操作范围: 0<k<255 指令周期:1 影响标志位: Z 操作内容:k∧W→W 操作说明:将8位立即数与W寄存器内容相“与”,结果传送给W寄存器。
④ 立即数逻辑或指令
句法: IORLW k 操作范围: 0<k<255 指令周期: 1 影响标志位: Z 操作内容: k∨W→W 操作说明:将8位立即数与W寄存器内容相“或”,结果传送给W寄存器。
⑤ 立即数逻辑异或指令
句法:XORLW k 操作范围: 0<k<255 指令周期: 1 影响标志位: Z 操作内容:k + W→W 操作说明:将8位立即数与W寄存器内容相“异或”,结果传送给W寄存器。
⑥ 寄存器逻辑与指令
句法: ANDWF f,d 操作范围: 0<f<127,d∈[0,1] 指令周期: 1 影响标志位: Z 操作内容:f∧W→d 操作说明:将f寄存器内容与W寄存器内容相“与”,结果传送给f本身(d=1)或W 寄存器(d=0)。
⑦ 寄存器逻辑或指令
句法: IORWF f,d 操作范围: 0<f<127,d∈[0,1] 指令周期: 1 影响标志位: Z 操作内容: f∨W→d 操作说明:将f寄存器内容与W寄存器内容相“或”,结果传送给f本身(d=l)或 W寄存器(d=0)。
⑧ 寄存器逻辑异或指令
句法: XORWF f,d 操作范围: 0<f<127,d∈[0,1] 指令周期; 1 影响标志位: Z 操作内容: f + W→d 操作说明:将f寄存器内容与W寄存器内容相“异或”,结果传送给f本身(d=1) 或W寄存器(d=0)。
(2)移位指令
① 寄存器带进位循环左移指令 句法: RLF f,d 操作范围: 0<f<127,d∈[0,1] 指令周期: 1 影响标志位: C 操作内容: f(n)→d(n+l), f(7)→C,C→d(0) 操作说明:将f寄存器内容带进位循环左移一位,结果传送给f本身(d==l)或W 寄存器(d=0),如图3-1所示。
② 寄存器带进位循环右移指令
图3-1 带进位循环左移指令示意图
句法: RRF f,d 操作范围: 0<f<127 d∈[0,l] 指令周期: 1 影响标志位:C 操作内容: f(n)→d(n-l), f(0)→C, C→d(7) 操作说明:将f寄存器内容带进位循环右移一位,结果传送给f本身(d=1)或W寄 存器(d=0),如图3-2所示。
4.控制转移指令
图3-2 带进位循环右移指令示意图
① 递增跳转指令 句法: INCFSZ f,d 操作范围:0<f<127,dE∈[0,1] 指令周期: 1或2 影响标志位:无 操作内容: f+1→d,f+1= 0则PC+1→PC 操作说明:f寄存器内容加1,结果传送给f本身(d=1)或W寄存器(d=0):如果 结果为0则跳过下一条指令;否则顺序执行。
② 递减跳转指令
句法: DECFSZ f,d 操作范围:0<f<127,d∈[0,1] 指令周期: 1或2 影响标志位:无 操作内容: f-1-d,f-1=0则PC+1→PC 操作说明:f寄存器内容减1,结果传送给f本身(d=1)或W寄存器(d=0),如果
结果为0则跳过下一条指令;否则顺序执行。
③ 子程序调用指令
句法: CALL k 操作范围: 0<k<2047 指令周期: 2 影响标志位:无 操作内容: PC+1→堆栈,k→PC(10~0) PCLATH(4,3)→PC(12,11) 操作说明:将PC+1的值送入堆栈,然后将11位常数k值送入PC(10~0),同时将 PCLATH的第4、3位送PC的第12、11位,从而将于程序入口地址送给PC。
④ 无条件跳转指令
句法: GOTO k 操作范围:0<k<2047 指令周期: 2 影响标志位:无 操作内容:k→PC(10~0),PCLATH(4,3)→PC(12,11) 操作说明:将11位常数k值送入PC(10~0),同时将PCLATH的第4、3位送PC 的第12、11位,从而将新的地址送给PC。
⑤ 子程序返回指令
句法:RETURN 操作范围:无 指令周期:2 影响标志位:无 操作内容:TOS→PC 操作说明:将栈顶(TOS)内容弹出送给PC。
⑥ 子程序带参数返回指令
句法: RETLW k 操作范围: 0<k<255 指令周期: 2 影响标志位:无 操作内容:TOS→PC, k→W 操作说明:将栈顶(TOS)内容弹出送给PC,且将立即数k送给W寄存器。
⑦ 中断服务子程序返回指令
句法:RETFIE 操作范围:无 指令周期:2 影响标志位:无 操作内容:TOS→PC,1→GIE 操作说明:将栈顶(TOS)内容弹出送给PC,且将全局中断使能位GIE置1,重新开 启中断。
5.位操作指令
① 位清零指令
句法: BCF f,b 操作范围: 0<f<127,0<b<7 指令周期: 1 影响标志位:无 操作内容: 0→f(b) 操作说明:将寄存器f的第b位清零。
② 位置1指令
句法: BSF f,b 操作范围: 0<f<127,0<b<7 指令周期: 1 影响标志位:无 操作内容: 1→f(b) 操作说明:将寄存器f的第b位置1。
③ 位测试为0跳转指令
句法:BTFSC f,b 操作范围: 0<f<127,0<b<7 指令周期:1或2 影响标志位:无 操作内容:若f(b)=0,则PC+1→PC 操作说明:若寄存器f的第b位为零,则跳过下一条指令;否则顺序执行。
④ 位测试为1跳转指令
句法: BTFSS f,b 操作范围: 0<f<127,0<b<7 指令周期:1或2 影响标志位:无 操作内容:若f(b)=1,则PC+1→PC 操作说明:若寄存器f的第b位为1,则跳过下一条指令;否则顺序执行。
6.清零指令
① 看门狗定时器清零指令
句法:CLRWDT 操作范围:无 指令周期:1 影响标志位:TO,PD 操作内容:0→WDT,0→WDT预分频器,1→TO,1→PD 操作说明:将WDT寄存器及其预分频器全部清零。
② 寄存器清零指令
句法:CLRF f 操作范围: 0<f<127 指令周期:1 影响标志位:Z 操作内容:0→f,1→Z 操作说明:将寄存器f清零。
③ W寄存器清零指令
句法:CLRW f 操作范围:无 指令周期:1 影响标志位:Z 操作内容:0→W,1→Z 操作说明:将寄存器W清零。
7.处理器控制指令
① 进入低功耗睡眠状态指令
句法:SLEEP 操作范围:无 指令周期:1 影响标志位:TO,PD 操作内容:0→WDT,0→WDT预分频器,1→TO,0→PD 操作说明:将WDT寄存器及其预分频器全部清零,掉电标志位PD清零,定时 时间溢出标志位TO置1,芯片进入低功耗睡眠状态,芯片振荡器停止工作。
② 空操作指令
句法:NOP 操作范围:无 指令周期:1 影响标志位:Z 操作内容:无 操作说明:不产生任何操作,仅使PC加1,消耗一个指令周期。