文档详情

PIC指令详解.doc

小**
实名认证
店铺
DOC
285.50KB
约36页
文档ID:86978288
PIC指令详解.doc_第1页
1/36

中档PIC单片机汇编指令详解 -----老罗整理NOP 空操作指令语法形式:NOP操作数:无执行时间:一个指令周期执行过程:除了消耗一个指令周期之外,无任何其他影响,所以通常被用来作为延时使用状态标志影响:无说明:指令操作没有任何操作数参与,也不影响任何寄存器的内容和状态,所以通常都是被作为延时使用的指令范例:BSF PORTB,0 ;PORTB的第0位输出高电平(1) NOP ;延时,使电平稳定MOVWF 将W寄存器的内容传送到数据寄存器语法形式:MOVWF f操作数:f为数据寄存器的低7位地址(0x00~0x7F)执行时间:一个指令周期执行过程:把W寄存器的内容传送到f数据寄存器,W寄存器的内容保持不变,类似于Copy状态标志影响:无说明:该指令是对数据寄存器赋值的主要方式指令范例:MOVLW 0x55 ;W寄存器赋值MOVWF Data ;W寄存器值传送给Data;此时Data=0x55CLRW W寄存器内容清0语法形式:CLRW操作数:无执行时间:一个指令周期执行过程:0x00→W1→Z状态标志影响:Z说明:该指令对W寄存器内容清零,并置位0标志Z另外使用MOVLW 0x00也可以使W寄存器内容为0,但是这条指令不影响0标志Z指令范例:CLRW ;W=0,Z=1CLRF 数据寄存器内容清零语法形式:CLRF f操作数:f为数据寄存器的低7位地址(0x00~0x7F)执行时间:一个指令周期执行过程:0x00→f1→Z状态标志影响:Z说明:指令对数据寄存器清零,并置位0标志Z指令范例:CLRF TRISB ;端口B所有I/O引脚设为输出SUBWF 将数据寄存器的内容减去W寄存器内容语法形式:SUBWF f,d 操作数:f为数据寄存器的低7位地址(0x00~0x7F)d为目的寄存器的低7位地址(0x00~0x7F)当d=f时,结果放在f数据寄存器,W寄存器内容不变当d=W时,结果放在W寄存器中,数据寄存器f内容不变执行时间:一个指令周期执行过程:【f】-【W】→d状态标志影响:Z DC C说明:要特别注意W寄存器在这条指令中是减数当【f】=【W】时,相减的结果为0,则Z=1当【f】>【W】时,没有借位发生,则C=1当【f】<【W】时,有借位发生,则C=0实际上在PIC单片机中这条指令是通过先对W寄存器的内容求补码,然后与被减数相加,所以在判断是否有借位时和其他单片机不同,请注意指令范例:MOVLW 0x23 ;W=0x23MOVWF tmp ;tmp=0x23MOVLW 0x32 ;W=0x32SUBWF tmp,W ;tmp-W将结果存入W中,W=0xF1,tmp=0x23;过程:tmp=0x23,W求补码为0xCD,所以0x23+0xCD=0xF1,又因tmp

如果减1后的结果为0,则置位0标志寄存器Z指令范例:CLRF Count ;Count=0x00DECF Count,f ;Count=0x00,f=0xFFDECF f,W ;f=0xFF,W=0xFEINCF 数据寄存器的内容递增1语法形式:INCF f,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指令范例:CLRF Count ;Count=0x00INCF Count,f ;Count=0x00,f=0x01INCF f,W ;f=0x01,W=0x02IORWF 数据寄存器f和W寄存器做逻辑或操作语法形式:IORWF f,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指令范例:MOVLW b’00001111’ ;将W寄存器的低4位设置为1IORWF PORTB,f ;将PORTB的低4位设置为1,不影响高4位ANDWF 数据寄存器f和W寄存器做逻辑与操作语法形式:ANDWF f,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利用其影响标志Z的特性,可以判断寄存器任意位的组合是否为全0指令范例:例1:寄存器任意位清零MOVLW b’00001111’ ;W寄存器高4位清0(取决于0的组合)ANDWF PORTB,f ;PORTB的高4位清0,低4位保持不变例2:判断寄存器任意位组合是否全0MOVLW b’00001111’ ;W寄存器的低4位置1(取决于1的组合)ANDWF PORTC,W ;只要PORTC的低4位全0,则Z标志寄存器就置1;此指令的操作结果放在W寄存器中,不会影响原寄存器的值XORWF 数据寄存器内容和W寄存器内容做逻辑异或操作语法形式:XORWF f,d操作数:f为数据寄存器的低7位地址(0x00~0x7F)d为目的寄存器的低7位地址(0x00~0x7F)当d=f时,结果放在f数据寄存器,W寄存器的内容不变当d=W时,结果放在W寄存器中,f数据寄存器的内容不变执行时间:一个指令周期执行过程:【f】^【W】→d状态标志影响:Z说明:数据寄存器内容和W寄存器的内容逻辑异或,结果按照d的指定位置存放按照逻辑异或的规则,任何数(0或1)和1异或,结果为反码;任何数和其本身异或,结果为0。

所以此指令可以把寄存器的任意位数据反转(0变1,1变0),或者判断寄存器的内容是否为一特定值指令范例:例1:寄存器任意位数据反转MOVLW b’00000011’ ;W寄存器低2位置1XORWF PORTB,f ;PORTB的高6位不变,低2位数据反转例2:判断寄存器的内容是不是特定值MOVLW 0xAA ;W=0xAA(可以是任意值)XORWF PORTC,W ;如果PORTC=0xAA,则Z标志就为1;此指令的操作结果放在W寄存器中,不会影响原寄存器的值ADDWF W寄存器内容和f数据寄存器内容相加语法形式:ADDWF f,d操作数:f为数据寄存器的低7位地址(0x00~0x7F)d为目的寄存器的低7位地址(0x00~0x7F)当d=f时,结果放在f数据寄存器,W寄存器的内容不变当d=W时,结果放在W寄存器中,f数据寄存器的内容不变执行时间:一个指令周期执行过程:【f】+【W】→d状态标志影响:Z DC C说明:数据寄存器内容和W寄存器内容相加,结果放入d指定的地方指令范例:MOVLW 0x55 ;W=0x55,假定Sum=0xAAADDWF Sum,f ;W不变,Sum=0xFFMOVF 传送f数据寄存器的内容到目的寄存器语法形式:MOVF f,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:数据传送MOVF Var1,W ;Var1内容传送至W寄存器MOVWF Var2 ;W寄存器内容传送至Var2,此时Var1=Var2例2:数据判0MOVF Var3,f ;Var3寄存器内容被送往自身,其他寄存器内容不变,但是影 响Z标志BTFSC STATUS,Z ;如果Var3不等于0,则跳过下一条指令GOTO Var3Zero ;如果Var3等于0,则转向其他操作COMF f数据寄存器内容取反语法形式:COMF f,d操作数:f为数据寄存器的低7位地址(0x00~0x7F)d为目的寄存器的低7位地址(0x00~0x7F)当d=f时,结果放在f数据寄存器,W寄存器的内容不变当d=W时,结果放在W寄存器中,f数据寄存器的内容不变执行时间:一个指令周期执行过程:!【f】→d状态标志影响:Z说明:求数据寄存器内容的反码,求一个数的补码可以使用这个指令完成(按位求反再加一)指令范例:COMF num,f ;对num变量取反码INCF num,f ;反码加1就是其补码DECFSZ 数据寄存器内容递减1,并作判0标志语法形式:DECFSZ f,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,此时程序将会跳过紧跟其后的第一条指 令,去执行紧跟其后的第二条指令,本次指令操作耗费两个指令周期。

该指令常用于计数次数或者循环次数的控制指令范例: MOVLW 0x10 ;准备给循环计数器赋初值 MOVWF Count ;此时循环计数器Count=0x10Loop:DECFSZ Count,f ;Count递减1,结果放入Count中,并进行Z标志判 GOTO Loop ;断,如果递减后结果不为0,继续执行Loop操作, ;总共循环0x10(16进制)次 NOP ;如果递减。

下载提示
相似文档
正为您匹配相似的精品文档