PIC指令详解解读_第1页
PIC指令详解解读_第2页
PIC指令详解解读_第3页
PIC指令详解解读_第4页
PIC指令详解解读_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中档PIC单片机汇编指令详解-----老罗整理NOP空操作指令语法形式:NOP操作数:无执行时间:一个指令周期执行过程:除了消耗一个指令周期之外,无任何其他影响,所以通常被用来作为延时使用状态标志影响:无说明:指令操作没有任何操作数参与,也不影响任何寄存器的内容和状态,所以通常都是被作为延时使用的。指令范例:BSFPORTB,0;PORTB的第0位输出高电平(1)NOP;延时,使电平稳定操作数:f为数据寄存器的低7位地址(0x00~0x7F)执行时间:一个指令周期执行过程:把W寄存器的内容传送到f数据寄存器,可寄存器的内容保持不变,类似于Copy状态标志影响:无说明:该指令是对数据寄存器赋值的主要方式指令范例:MOVLW0x55;W寄存器赋值MOVWFData;W寄存器值传送给Data;此时Data=0x55CLRWW寄存器内容清0语法形式:CLRW操作数:无执行时间:一个指令周期执行过程:0x00—W1-Z状态标志影响:Z说明:该指令对W寄存器内容清零,并置位0标志Z另外使用MOVLW0x00也可以使W寄存器内容为0,但是这条指令不影响0标志Z指令范例:CLRW;W=0,Z=1CLRF数据寄存器内容清零语法形式:CLRFf操作数:f为数据寄存器的低7位地址(0x00~0x7F)执行时间:一个指令周期执行过程:0x00—f1-Z状态标志影响:Z说明:指令对数据寄存器清零,并置位0标志Z指令范例:CLRFTRISB;端口B所有I/O引脚设为输出语法形式:SUBWFf,d操作数:f为数据寄存器的低7位地址(0x00~0x7F)d为目的寄存器的低7位地址(0x00~0x7F)当d=f时,结果放在f数据寄存器,W寄存器内容不变当d=W时,结果放在W寄存器中,数据寄存器f内容不变执行时间:一个指令周期执行过程:【f】-【W】-d状态标志影响:ZDCC说明:要特别注意W寄存器在这条指令中是减数当【f】=【W】时,相减的结果为0,则Z=1当【f】>【W】时,没有借位发生,则C=1当【f】<【W】时,有借位发生,则C=0实际上在PIC单片机中这条指令是通过先对W寄存器的内容求补码,然后与被减数相加,所以在判断是否有借位时和其他单片机不同,请注意指令范例:MOVLW0x23;W=0x23MOVWFtmp;tmp=0x23MOVLW0x32;W=0x32SUBWFtmp,W;tmp-W将结果存入W中,W=0xF1,tmp=0x23过程:tmp=0x23,W求补码为0xCD,所以0x23+0xCD=0xF1,又因tmp<W,所以C=0DECF数据寄存器的内容递减1语法形式:DECFf,d操作数:f为数据寄存器的低7位地址(0x00~0x7F)d为目的寄存器的低7位地址(0x00~0x7F)当d=f时,结果放在f数据寄存器,f数据寄存器自减1当d=W时,结果放在W寄存器中,W寄存器内容自减1执行时间:一个指令周期执行过程:【f】-1-d状态标志影响:Z说明:该指令对数据寄存器的内容做减1运算。如果减1后的结果为0,则置位0标志寄存器Z指令范例:CLRFCount;Count=0x00DECFCount,f;Count=0x00,f=0xFFDECFf,W;f=0xFF,W=0xFEINCF数据寄存器的内容递增1语法形式:INCFf,d操作数:f为数据寄存器的低7位地址(0x00~0x7F)d为目的寄存器的低7位地址(0x00~0x7F)当d=f时,结果放在f数据寄存器,f数据寄存器自增1当d=W时,结果放在W寄存器中,W寄存器内容自增1执行时间:一个指令周期执行过程:【f】+1-d状态标志影响:Z说明:该指令对数据寄存器的内容增加1。如果增加后的结果为0,则置位0标志寄存器Z指令范例:CLRFCount;Count=0x00INCFCount,f;Count=0x00,f=0x01INCFf,W;f=0x01,W=0x02IORWF数据寄存器f和W寄存器做逻辑或操作语法形式:IORWFf,d操作数:f为数据寄存器的低7位地址(0x00~0x7F)d为目的寄存器的低7位地址(0x00~0x7F)当d=f时,结果放在f数据寄存器,W寄存器的内容不变当d=W时,结果放在W寄存器中,f数据寄存器的内容不变执行时间:一个指令周期执行过程:【f】|【W】-d状态标志影响:Z说明:数据寄存器内容和W寄存器的内容逻辑或,结果按照d的指定位置存放,按照逻辑或有1出1的规则,使用该命令可以将任意位设置为1指令范例:MOVLWb’00001111’;将W寄存器的低4位设置为1IORWFPORTB,f;将PORTB的低4位设置为1,不影响高4位ANDWF数据寄存器f和W寄存器做逻辑与操作语法形式:ANDWFf,d操作数:f为数据寄存器的低7位地址(0x00~0x7F)d为目的寄存器的低7位地址(0x00~0x7F)当d=f时,结果放在f数据寄存器,W寄存器的内容不变当d=W时,结果放在W寄存器中,f数据寄存器的内容不变执行时间:一个指令周期执行过程:【f】&【W】-d状态标志影响:Z说明:数据寄存器内容和W寄存器的内容逻辑与,结果按照d的指定位置存放。按照逻辑与有0出0的规则,使用该命令可以将任意位设置为0。利用其影响标志2的特性,可以判断寄存器任意位的组合是否为全0。照留金昌Q一:回期互Nf亚业昱M风器旦果郢暮J'中器旦旱M丑酒[凿形’期M=P呆亚业昱M风器旦旱M'器旦果郢否幻丑酒[凿形盘叮=P呆("XO~OOXO)并麻目匕刘风器旦果风目区P("X0〜00X0)并再还〃刘风器旦果郢暮区J:WWfP7idM^OX:鼬湾1墉阵昔营倒腿M器柴M曜M器柴郢暮zIMMX国风器旦果甜回修喜浮业'中器旦旱M丑酒[凿形劫爵风金鄂印:谒螳器旦旱旱凹Z町70专冯悝麻Dl^Od:M7Dl^OddMQNV(导肉风1:工散潴)1喜冯17刘风器旦旱M:zTTTTOOOO,qM1AON使显晋导肉冯翼科器旦果蜩昧:小0显业科者两您尸o皇四17景风ai^od;i1ai^oddMQNV(导肉风0壬散潴)0皇捱用景器旦旱M:zTTTTOOOO,qM1AON蠢皇四套王僵果:邛0:阻邸朝执行过程:【f】人【W】-d状态标志影响:Z说明:数据寄存器内容和W寄存器的内容逻辑异或,结果按照d的指定位置存放。按照逻辑异或的规则,任何数(0或1)和1异或,结果为反码;任何数和其本身异或,结果为0。所以此指令可以把寄存器的任意位数据反转(0变1,1变0),或者判断寄存器的内容是否为一特定值。指令范例:例1:寄存器任意位数据反转MOVLWb’00000011’;W寄存器低2位置1XORWFPORTB,f;PORTB的高6位不变,低2位数据反转例2:判断寄存器的内容是不是特定值MOVLW0xAA;W=0xAA(可以是任意值)XORWFPORTC,W;如果PORTC=0xAA,则Z标志就为1;此指令的操作结果放在W寄存器中,不会影响原寄存器的值ADDWFW寄存器内容和f数据寄存器内容相加语法形式:ADDWFf,d操作数:f为数据寄存器的低7位地址(0x00~0x7F)d为目的寄存器的低7位地址(0x00~0x7F)当d=f时,结果放在f数据寄存器,W寄存器的内容不变当d=W时,结果放在W寄存器中,f数据寄存器的内容不变执行时间:一个指令周期执行过程:【f】+【W】-d状态标志影响:ZDCC说明:数据寄存器内容和W寄存器内容相加,结果放入d指定的地方指令范例:MOVLW0x55;W=0x55,假定Sum=0xAAADDWFSum,f;W不变,Sum=0xFFMOVF传送f数据寄存器的内容到目的寄存器语法形式:MOVFf,d操作数:f为数据寄存器的低7位地址(0x00~0x7F)d为目的寄存器的低7位地址(0x00~0x7F)当d=f时,把数据寄存器的内容放回自己本身,目的用于判断数据寄存器的内容是否为0。当d=W时,结果放在W寄存器中,将数据寄存器f的内容传送至W寄存器执行时间:一个指令周期执行过程:【f】-d状态标志影响:Z说明:将数据寄存器的内容传送至它处,或者对f数据寄存器的内容做判0操作,如果传送的数据是0,则置位Z标志。指令范例:例1:数据传送MOVFVari,W;Vari内容传送至W寄存器MOVWFVar2;W寄存器内容传送至Var2,此时Var1=Var2例2:数据判0MOVFVar3,f;Var3寄存器内容被送往自身,其他寄存器内容不变,但是影响Z标志BTFSCSTATUS,Z;如果Var3不等于0,则跳过下一条指令GOTOVar3Zero;如果Var3等于0,则转向其他操作COMFf数据寄存器内容取反语法形式:COMFf,d操作数:f为数据寄存器的低7位地址(0x00~0x7F)d为目的寄存器的低7位地址(0x00~0x7F)当d=f时,结果放在f数据寄存器,W寄存器的内容不变当d=W时,结果放在W寄存器中,f数据寄存器的内容不变执行时间:一个指令周期执行过程:!【f】-d状态标志影响:Z说明:求数据寄存器内容的反码,求一个数的补码可以使用这个指令完成(按位求反再加一)指令范例:COMFnum,f;对num变量取反码INCFnum,f;反码加1就是其补码DECFSZ数据寄存器内容递减1,并作判0标志语法形式:DECFSZf,d操作数:f为数据寄存器的低7位地址(0x00~0x7F)d为目的寄存器的低7位地址(0x00~0x7F)当d=f时,结果放在f数据寄存器,W寄存器的内容不变当d=W时,结果放在W寄存器中,f数据寄存器的内容不变执行时间:一个指令周期或两个指令周期执行过程:【f】-1—d状态标志影响:Z说明:该指令将首先将f数据寄存器的内容做减1运算,结果放到d指定的目的地址内,同时它还会对Z标志进行判0操作(进行分支跳转控制);如果f数据寄存器减1后结果非0,那么Z=0,程序将顺序执行下一条指令,本次指令操作耗费一个指令周期;如果结果为0,那么Z=1,此时程序将会跳过紧跟其后的第一条指令,去执行紧跟其后的第二条指令,本次指令操作耗费两个指令周期。该指令常用于计数次数或者循环次数的控制。指令范例:MOVLW0x10;准备给循环计数器赋初值MOVWFCount;此时循环计数器Count=0x10Loop:DECFSZCount,f;Count递减1,结果放入Count中,并进行Z标志判GOTOLoop;断,如果递减后结果不为0,继续执行Loop操作,;总共循环0x10(16进制)次。NOP;如果递减后结果为0,就跳到这条指令INCFSZf数据寄存器内容递增1,并作判0标志语法形式:INCFSZf,d操作数:f为数据寄存器的低7位地址(0x00~0x7F)d为目的寄存器的低7位地址(0x00~0x7F)当d=f时,结果放在f数据寄存器,W寄存器的内容不变当d=W时,结果放在W寄存器中,f数据寄存器的内容不变执行时间:一个指令周期或两个指令周期执行过程:【f】+1-d状态标志影响:Z说明:该指令首先对数据寄存器的内容做加1操作,结果按照d的指示保存到相应的地方,然后对Z进行判0操作(分支跳转控制):如果加1之后的结果非0,也就是Z=0,程序将会按照顺序执行下一条指令,使用1个指令周期;如果加1之后结果为0;也就是Z=1,那么程序将会跳过INCFSZ指令之后的第一条指令,开始执行第二条指令,使用2个指令周期。该指令常用于计数次数和循环次数的控制。指令范例:MOVLW0xC0;循环计数数据赋初值MOVWFCount;此时循环计数器初值Count=0xC0Loop:INCFSZCount,f;Count内容加1,放回Count中,并进行Z标志判断GOTOLoop;如果加1之后的结果不为0,则循环执行Loop的内容,总共循环次数为0x00-0xC0=0x40次NOP;结果为0,则跳到这条指令RRF数据寄存器内容带进位的循环右移语法形式:RRFf,d操作数:f为数据寄存器的低7位地址(0x00~0x7F)d为目的寄存器的低7位地址(0x00~0x7F)当d=f时,结果放在f数据寄存器,W寄存器的内容不变当d=W时,结果放在W寄存器中,f数据寄存器的内容不变执行时间:一个指令周期执行过程:~寄存耕二I—状态标志影响:C说明:该指令把C进位寄存器(借位寄存器)和数据寄存器的8位数据结合在一起做9位的循环右移1位的操作。操作的结果是把C移到数据寄存器的最高位,原数据寄存器的最低位放到C中。指令范例:例1:实现数据寄存器自身8位的循环右移RRFData,W;数据寄存器Data的内容右移1位,结果放入W寄存器,Data本身的内容不变,但是最低位已经移到C中RRFData,f;再次进行右移,结果写入Data自身。这时上一条指令移入C中的最低位现在已经变成Data的最高位,实现了最低位变最高位,最高位变成第二高位的目的例2:实现数据寄存器算数右移(除2操作)BCFSTATUS,C;确保C=0RRFData,f;数据寄存器右移1位,最高位现在为0,结果放入自身RLF数据寄存器内容进行带进位的循环左移操作语法形式:RLFf,d操作数:f为数据寄存器的低7位地址(0x00~0x7F)d为目的寄存器的低7位地址(0x00~0x7F)当d=f时,结果放在f数据寄存器,W寄存器的内容不变当d=W时,结果放在W寄存器中,f数据寄存器的内容不变执行时间:一个指令周期执行过程:r-~~寄存器f・Fi・■I状态标志影响:C说明:该指令将C和8位数据寄存器的数据结合起来进行9位的循环左移操作,结果放入d指定的位置。操作结果是把C移到数据寄存器的最低位,将原数据寄存器的最高位移入C中。指令范例:例1:实现数据寄存器的8位内容循环左移RLFData,W;Data的内容左移1位放入W寄存器中,Data的内容不变,Data的最高位放入C中RLFData,f;Data的内容经操作后放回自身,C的内容(经上步操作后变成了原Data的最高位)放入Data的最低位。例2:实现数据寄存器的算数左移(结果乘以2)BCFSTATUS,C;确保C=0RLFData,f;数据寄存器Data左移1位,最低位补充为0,实现乘以2SWAPF数据寄存器高低半字节内容进行交换语法形式:SWAPFf,d操作数:f为数据寄存器的低7位地址(0x00~0x7F)d为目的寄存器的低7位地址(0x00~0x7F)当d=f时,结果放在f数据寄存器,W寄存器的内容不变当d=W时,结果放在W寄存器中,f数据寄存器的内容不变执行时间:一个指令周期执行过程:【f<3:0>】—【f<7:4>】状态标志影响:无说明:该指令实现把数据寄存器的高低半字节的内容进行交换,结果放入d指定的地址。该指令在中断服务程序退出前恢复W寄存器的内容的过程中起着不可或缺的作用。不影响状态寄存器。指令范例:SWAPFw_temp,f;w_temp的高低半字节内容交换,结果放回w_temp本身SWAPFw_temp,W;w_temp的高低半字节内容再次交换,但是结果放入W寄存器中,在不影响状态寄存器的前提下,实现了把w_temp的原内容复制到W寄存器中。位操作指令详述BCF数据寄存器指定位清0语法形式:BCFf,b操作数:f为数据寄存器的低7位地址(0x00~0x7F)B为数据位编号(0~7)执行时间:一个指令周期执行过程:使数据寄存器f的的b位清0状态标志影响:无说明:该指令可对任何数据寄存器的任意一个位置清0,常用于标志位的设定和清除,或者把某一管脚置成低电平。指令范例:BCFSTATUS,C;进位(借位)标志C清0BCFPORTD,7;PORTD的第7位输出低电平BSF数据寄存器的指定位b置1语法形式:BSFf,b操作数:f为数据寄存器的低7位地址(0x00~0x7F)b为数据位编号(0~7)执行时间:一个指令周期执行过程:使数据寄存器f的的b位置1状态标志影响:无说明:该指令可对任何数据寄存器的任意一个位置置1,常用于标志位的设定和清除,或者把某一管脚置成高电平。指令范例:BSFINTCON,GIE;INTCON寄存器的GIE位置1,打开全局中断BSFPORTD,6;PORTD第6位输出高电平BTFSC判断数据寄存器中的指定位,为0则跳过下一条指令语法形式:BTFSCf,b操作数:f为数据寄存器的低7位地址(0x00~0x7F)b为数据位编号(0~7)执行时间:一个指令周期或两个指令周期执行过程:如果数据寄存器f的b位为0,则跳过下一条指令状态标志影响:无说明:该指令可以对数据寄存器的任意一位做0/1的判断,如果数据位为1,程序将按顺序执行其下一条指令,此时一个指令周期;如果数据位为0,那么将跳过紧跟该指令之后的第一条指令,从第二条指令开始执行,此时使用两个指令周期。该指令最常用于按标志位实现程序的分支跳转的控制。指令范例:BTFSCSTATUS,Z;测试状态寄存器的Z标志GOTOZero;如果Z=1,执行此处指令GOTONotZero;如果Z=0,执行此处指令BTFSS判断数据寄存器的指定位,为1则跳过下条指令语法形式:BTFSSf,b操作数:f为数据寄存器的低7位地址(0x00~0x7F)b为数据位编号(0~7)执行时间:一个指令周期或两个指令周期执行过程:如果数据寄存器f的b位为1,则跳过下一条指令状态标志影响:无说明:该指令可以对数据寄存器的任意一位做0/1的判断,如果数据位为0,程序将按顺序执行其下一条指令,此时一个指令周期;如果数据位为1,那么将跳过紧跟该指令之后的第一条指令,从第二条指令开始执行,此时使用两个指令周期。该指令最常用于按标志位实现程序的分支跳转的控制。指令范例:BTFSSPORTB,7;测试PORTB端口,位7sK-枪冥骚长tt。里mms槌母g止榕K-宿宿螂骚长槌&里vffl姓Hg/底『陞忌止a-H丞同外ssdLULU_ls」Sdd0」蓄艳辰枪奖。舰菁辰=£=S雀ttsnMS冠归循辰OLS雀ttsnl—<1—Sowiislt^psowit^ps-胃Ih奁slfI-ss氐-8®d出_ls-宿能坦ffid出_ls、彳眯反-q6一H—z爵01—OD眯反M01—Z爵01—OD内部寄存器的内容保持不变,直到出现某一条件将单片机从休眠状态下唤醒。指令范例:CALLPrepSleep;关闭所有不需要的负载,准备进入休眠模式SLEEP;现在进入休眠模式NOP;唤醒后开始执行指令CLRWDT清除看门狗计数器语法形式:CLRWDT操作数:无执行时间:一个指令周期执行过程:看门狗计数器清0看门狗计数器的预分频器清0STATUS寄存器的“TO”标志位置1STATUS寄存器的“PD”标志位置1状态标志影响:TOPD说明:如果芯片在编程烧写时启用了独立的片上看门狗电路,则在程序运行的过程中必须隔一段时间就执行这条清除看门狗的命令。如果过了足够长的时间而没有执行这条指令,到了看门狗计数器计数溢出时就会让单片机产生复位,程序将会从复位地址处重新运行。PIC单片机的看门狗一旦被打开就不能通过软件的方式关闭,在芯片休眠的时候照样工作,故可以作为让单片机退出休眠的一个条件。通过启用看门狗可以避免软件死循环的故障。需要强调的是在一个好的程序设计中CLRWDT这条指令只在程序的主循环中出现一次,尽量避免到处放置清看门狗指令,绝对不能把这条指令放到中断服务程序中。指令范例:MainLoop:;程序主循环CLRWDT;清看门狗CALLKeyCheck;检查按键CALLDisplay;显示刷新GOTOMainLoop;重复主循环体RETLW子程序结束返回并在W寄存器内赋一8位立即数语法形式:RETLWk操作数:k为8位立即数执行时间:2个指令周期执行过程:弹出栈顶内容到PCk—W状态标志影响:无说明:除了在子程序返回时从W寄存器带出一个8位立即数外,其他的执行情况和指令“RETURN”完全相同。该指令经常被用于查表功能中。指令范例:MOVFIndex,W;W中设定查表索引值(0~3)CALLLookup;调用查表子程序……;其他指令Lookup:ADDWFPCL,f;对PC值作修改RETLW‘0’;返回0对应的ASCII码RETLW‘1’;返回1对应的ASCII码RETLW‘2’;返回2对应的ASCII码RETLW‘3’;返回3对应的ASCII码RETFIE中断服务程序结束并返回语法形式:RETFIE操作数:无执行时间:2个指令周期执行过程:弹出栈顶内容到PCINTCON寄存器的第7位GIE自动置1状态标志影响:无说明:该指令把硬件堆栈栈顶的内容(中断发生时的返回地址)弹送到程序计数器PC内,对堆栈的影响如下图所示地址指令备注0122CALLSUB】t调用子程序0123HOP控握作SURI0200REIVRN■于程序返回但)压枝前(b)由栈后(班弹出后和指令“RETURN”的情形基本相同,关键区别是该指令会把INTCON寄存器的第7位全局中断使能位(GIE)置1(在响应中断时该位自动清0)。然后返回到中断发生时的下一条指令处继续运行。指令范例:MOVFstatus_temp,w;准备恢复STATUS寄存器的内容MOVWFSTATUS;STATUS寄存器被恢复SWAPFw_temp,f;准备恢复W寄存器内容SWAPFw_temp,w;W寄存器被恢复RETFIE;中断返回并允许新的中断响应RETURN子程序结束返回语法形式:RETURN操作数:无执行时间:2个指令周期执行过程:弹出栈顶内容到PC状态标志影响:无说明:该指令将栈顶的内容(子程序调用时的返回地址)弹送到程序计数器PC内。注意特殊寄存器PCLATH的内容不会因此改变。程序将会回到在子程序调用时的下一条指令处开始执行。影响见该图地址指令备注0122CALLSUB1,凋用于程序0123NOP*空操作SUB10200RETUKH,子程序返回00001012310000000100000001000200010002000300C2000300040003000400050004000500060005000600070006不硝定但)压枝前(b)压枝后后指令范例:CALLDly4Tcy;延时4个指令周期……;其他指令Dly4Tcy:RETURN;CALL和RETURN总共消耗4个指令周期GOTO程序无条件跳转到指定的地址操作数:m为11位立即数指定的目标地址执行时间:2个指令周期执行过程:m-PC【10:0】PCLATH【4:3】-PC【12:11】状态标志影响:无说明:程序无条件立即强行跳转到目的地址处继续执行。目的地址由本指令内含的11位地址码和特殊寄存器PCLATH中的【4:3】一起构成完整的13位地址。指令范例:ORG0x000;伪指令指定程序的起始地址GOTOMain;程序跳转到标号指定的位置处继续执行MOVLWW寄存器赋立即数语法形式:MOVLWk操作数:k为8位立即数执行时间:一个指令周期执行过程:k-W状态标志影响:无说明:该指令对W寄存器赋一个初值。任何其他数据寄存器如果要赋一个立即数值,必须通过W寄存器传送。指令范例:MOVLW0x55

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论