HC18指令详解HC18指令详解数据手册DOC.VERSION1.4芯圣电子-1-2010年3月HC18指令详解修正记录版本日期描述Ver1.002010-03-01第一版-2-HC18指令详解1指令表助记符操作数说明周期数14位操作码受影响的状态位ADDWFf,dW和f相加1011110dfffffffC,DC,ZADDLWk将立即数和W相加1001000kkkkkkkkC,DC,ZSUBWFf,df减去W1011011dfffffffC,DC,ZSUBLWk立即数减去W1001010kkkkkkkkC,DC,ZDAW-W寄存器值进行BCD调整1000101xxxxxxxxC,DCANDWFf,dW和f作逻辑与运算1011100dfffffffZANDLWk立即数和W作逻辑与运算1001110kkkkkkkkZIORWFf,dW和f作逻辑或运算1011101dfffffffZIORLWk立即数和W作逻辑或运算1001111kkkkkkkkZXORWFf,dW和f作逻辑异或运算1011111dfffffffZXORLWk立即数和W作逻辑异或运算1001101kkkkkkkkZCOMFf,df取反1010000dfffffffZCLRW-将W清零10110000xxxxxxxZCLRFf将f清零10110001fffffffZINCFf,df加11010011dfffffffZINCFSZf,df加1,为0则跳过1(2)010110dfffffffDECFf,df减11011010dfffffffZDECFSZf,df减1,为0则跳过1(2)010010dfffffffBCFf,d将f中的d位清011011bbbfffffffBSFf,d将f中的d位置111010bbbfffffffBTFSCf,d检测f中的d位,为0则跳过1(2)1001bbbfffffffBTFSSf,d检测f中的d位,为1则跳过1(2)1000bbbfffffffMOVWFf将W的内容传送到f10110011fffffffMOVFf,d将f的内容送到目标寄存器1010001dfffffffZMOVLWk将立即数k传送到W1000100kkkkkkkkRLFf,d对f执行带进位的循环左移1010100dfffffffCRRFf,d对f执行带进位的循环右移1010101dfffffffCSWAPFf,d将f的两个半字节进行交换1010111dfffffffCALLk调用子程序2110kkkkkkkkkkkGOTOk无条件跳转2111kkkkkkkkkkkRETFIE-从中断返回200000000000001GIERETURN-从子程序返回200000000000010RETLWk返回时将立即数传送到W2000001kkkkkkkkCLRWDT-清零看门狗定时器100000000000100TO,PDSLEEP-进入待机模式100000000000011TO,PDNOP-空操作100000001100000-3-HC18指令详解-4-2指令详细说明ADDLW立即数和W相加语法:ADDLWk操作数:0≤k≤255操作:(W)+k→(W)受影响状态位:C、DC和Z说明:将W寄存器的内容和8位立即数k相加,结果存入W寄存器。ADDWFW和f相加语法:ADDWFf,d操作数:0≤f≤127(d∈[0,1])操作:(W)+(f)→(目标寄存器)受影响状态位:C、DC和Z说明:W寄存器内容和f寄存器内容相加。如果d为0,结果存入W寄存器;如果d为1,结果存入f寄存器。BCF将f中的某位清0语法:BCFf,b操作数:0≤f≤127(0≤b≤7)操作:0→(f[b])受影响状态位:无说明:将f寄存器中的b位清0。BTFSC检测f中的某位,为0则跳过语法:BTFSCf,b操作数:0≤f≤127(0≤b≤7)操作:如果(f[b])=0则跳过受影响状态位:无说明:如果f寄存器中的b位为1,则执行下一条指令;如果b位为0,则丢弃下一条指令,转而执行一条NOP指令,从而使该指令成为双周期指令。CLRF将f寄存器清0语法:CLRFf操作数:0≤f≤127操作:00h→(f)、1→Z受影响状态位:Z说明:f寄存器的内容被清0,Z位置1。ANDLW立即数和W逻辑与运算语法:ANDLWk操作数:0≤k≤255操作:(W)ANDk→(W)受影响状态位:Z说明:将W寄存器的内容和8位立即数k作逻辑与运算,结果存入W寄存器。ANDWFW和f逻辑与运算语法:ANDWFf,d操作数:0≤f≤127(d∈[0,1])操作:(W)AND(f)→(目标寄存器)受影响状态位:Z说明:W寄存器和f寄存器作逻辑与运算。如果d为0,结果存入W寄存器;如果d为1,结果存入f寄存器。BSF将f中的某位置1语法:BSFf,b操作数:0≤f≤127(0≤b≤7)操作:1→(f[b])受影响状态位:无说明:将f寄存器的b位置1。BTFSS检测f中的某位,为1则跳过语法:BTFSSf,b操作数:0≤f≤127(0≤b≤7)操作:如果(f[b])=1则跳过受影响状态位:无说明:如果f寄存器中的b位为0,则执行下一条指令;如果b位为1,则丢弃下一条指令,转而执行一条NOP指令,从而使该指令成为双周期指令。CLRW将W寄存器清0语法:CLRW操作数:无操作:00h→(W)、1→Z受影响状态位:Z说明:W寄存器被清0,Z位置1。HC18指令详解COMFf取反语法:COMFf,d操作数:0≤f≤127(d∈[0,1])操作:(f)→(目标寄存器)受影响状态位:Z说明:将f寄存器的内容取反。如果d为0,结果存入W寄存器;如果d为1,结果存入f寄存器。CALL调用子程序语法:CALLk操作数:0≤k≤2047操作:(PC)+1→Stack,k→PC[10:0]受影响状态位:无说明:调用子程序。首先将返回地址(PC+1)压入堆栈,然后11位立即数地址装入PC。这是一条双周期指令。DECFf减1语法:DECFf,d操作数:0≤f≤127(d∈[0,1])操作:(f)-1→(目标寄存器)受影响状态位:Z说明:将f寄存器的内容减1。如果d为0,结果存入W寄存器;如果d为1,结果存入f寄存器。DECFSZf减1,为0则跳过语法:DECFSZf,d操作数:0≤f≤127(d∈[0,1])操作:(f)-1→(目标寄存器),结果为0则跳过受影响状态位:无说明:将f寄存器的内容减1。如果结果非0,则执行下一条指令;如果结果为0,则执行NOP指令,使该指令成为双周期指令。如果d为0,结果存入W寄存器;如果d为1,结果存入f寄存器。CLRWDT看门狗定时器清0语法:CLRWDT操作数:无操作:00h→WDT、0→WDT预分频器1→TO、1→PD受影响状态位:TO和PD说明:看门狗定时器和WDT预分频器(分配给WDT)清0。状态位TO和PD置1。GOTO无条件跳转语法:GOTOk操作数:0≤k≤2047操作:k→PC[10:0]受影响状态位:无说明:GOTO是无条件跳转指令。11位立即数地址装入PC。这是一条双周期指令。INCFf加1语法:INCFf,d操作数:0≤f≤127(d∈[0,1])操作:(f)+1→(目标寄存器)受影响状态位:Z说明:将f寄存器的内容加1。如果d为0,结果存入W寄存器;如果d为1,结果存入f寄存器。INCFSZf加1,为0则跳过语法:INCFSZf,d操作数:0≤f≤127(d∈[0,1])操作:(f)+1→(目标寄存器),结果为0则跳过受影响状态位:无说明:将f寄存器的内容加1。如果结果非0,则执行下一条指令;如果结果为0,则执行NOP指令,使该指令成为双周期指令。如果d为0,结果存入W寄存器;-5-如果d为1,结果存入f寄存器。HC18指令详解IORLW立即数和W作逻辑或运算语法:IORLWk操作数:0≤k≤255操作:(W)OR(k)→(W)受影响状态位:Z说明:将W寄存器的内容和8位立即数k作逻辑或运算。结果存入W寄存器。IORWF将W和f作逻辑或运算语法:IORWFf,d操作数:0≤f≤127(d∈[0,1])操作:(W)OR(f)→(目标寄存器)受影响状态位:Z说明:W寄存器与f寄存器作逻辑或运算。如果d为0,结果存入W寄存器;如果d为1,结果存入f寄存器。MOVWF将W的内容传送到f语法:MOVWFf操作数:0≤f≤127操作:(W)→(f)受影响状态位:无说明:将W寄存器中的数据传送到f寄存器。RLF对f执行带进位的循环左移语法:RLFf,d操作数:0≤f≤127(d∈[0,1])操作:参见下面的说明受影响状态位:C说明:将f寄存器和进位标志循环左移1位。如果d为0,结果存入W寄存器;如果d为1,结果存入f寄存器。RETLW带立即数返回语法:RETLWk操作数:0≤k≤255操作:k→(W),Stack→PC受影响状态位:无说明:将8位立即数k存入W寄存器。栈顶内容装入PC。这是一条双周期指令。MOVLW将立即数传送到W语法:MOVLWk操作数:0≤k≤255操作:k→(W)受影响状态位:无说明:将8位立即数k存入W寄存器。MOVF将f的内容送到目标寄存器语法:MOVFf,d操作数:0≤f≤127(d∈[0,1])操作:(f)→(目标寄存器)受影响状态位:Z说明:将f的内容存入目标寄存器。如果d为0,结果存入W寄存器;如果d为1,结果存入f寄存器。NOP无操作语法:NOP操作数:无操作:空操作受影响状态位:无说明:不执行任何操作。RRF对f执行带进位的循环右移语法:RRFf,d操作数:0≤f≤127(d∈[0,1])操作:参见下面的说明受影响状态位:C说明:将f寄存器和进位标志循环右移1位。如果d为0,结果存入W寄存器;如果d为1,结果存入f寄存器。RETURN子程序返回语法:RETURN操作数:无操作:Stack→PC受影响状态位:无说明:从子程序返回。执行出栈操作,栈顶内容装入PC。这是一条双周期指令。CCf寄存器f寄存器-6-HC18指令详解RETFIE中断返回DAWBCD调整语法:RETFIE语法:DAW操作数:无操作数:无操作:Stack→PC,1→GIE操作:二进制码→BCD码受影响状态位:无受影响状态位:C和DC说明:从中断返回。执行出栈操作,栈顶内容装入PC。这是一条双周期指令。说明:W内容从二进制码调整为BCD码SLEEP休眠SWAPF将f中的两个半字节交换语法:SLEEP语法:SWAPFf,d操作数:无操作数:0≤f≤127(d∈[0,1])操作:00h→WDT,0→WDT预分频器操作:(f[3:0])→(目标寄存器[7:4]),(f[7:4])→(目标寄存器[3:0])1→TO,0→PD受影响状态位:无受影响状态位:TO和PD说明:将f寄存器高半字节和低半字节交换。如果d为0,结果存入W寄存器;说明:看门狗定时器和预分频器(分配给WDT)清0。振荡器停振,系统进入休眠模式。状态位PD清0,TO置1。如果d为1,结果存入f寄存器。SUBLW立即数减去W寄存器内容XORLW立即数和W作逻辑异或运算语法:SUBLWk语法:XORLWk操作数:0≤k≤255操作数:0≤k≤255操作:k-(W)→(W)操作:(k)XOR(W)→(W)受影响状态位:C、DC和Z受影响状态位:Z说明:8位立即数k减去W寄存器的内容,结果存入W寄存器。说明:8位立即数k与W寄存器的内容作逻辑异或运算,结果存入W寄存器。SUBWFf减去WXORWFW和f作逻辑异或运算语法:SUBWFf,d语法:XORWFf,d操作数:0≤f≤127(d∈[0,1])操作数:0≤f≤127(d∈[0,1])操作:(f)-(W)→(目标寄存器)操作:(W)XOR(f)→(目标寄存器)受影响状态位:C、DC和Z受影响状态位:Z说明:f寄存器内容减去W寄存器内容。说明:W与f寄存器的内容作逻辑异或运算。如果d为0,结果存入W寄存器;如果d为0,结果存入W寄存器;如果d为1,结果存入f寄存器。如果d为1,结果存入f寄存器。备注:W:工作寄存器