pic单片机怎么用户汇编语言实现位取反?

如题所述

1、pic单片机的汇编语言中,目前还没有直接能对位取反的指令,只有对寄存器取反的指令,比如:
COMF F,d ;
这条语句中“F”是寄存器的名称,当“d=1”时,结果存入“F”,当“d=0”时,结果存入“W”。这个“W”书面解释是工作寄存器。可理解为过渡寄存器或临时寄存器,做中转数据用。
2、在汇编语言中要实现位取反,可通过位状态检测判断来对位进行“置1”或“清零”,详见以下程序。
目的:将寄存器 PROTB,3 取反
;*******************************************************************
BTFSS PORTB,3 ; 检测PORTB,3位,为1跳转QINGLING。
GOTO ZHIYI ; 为0跳转到ZHIYI。

QINGLING ; 清零程序段,这是网络标号,可理解为一段程序的名称。
BCF PORTB,3 ; 判断之前PORTB,3位为1,这句作用是将 PORTB,3 清零 。

GOTO WORK ; 跳转到 WORK 程序段继续运行。
ZHIYI ; 置1程序段, 这是网络标号,可理解为一段程序的名称。
BSF PORTB,3 ; 判断之前PORTB,3位为0,这句作用是将 PORTB,3 置1。
GOTO WORK ; 跳转到 WORK 程序段继续运行。

WORK
... ...

;********************************************************************
;注意注意,编程时,指令必须用TAB键空出一格,网络标号必须顶格
;*******************************************************************
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-04
用COMF指令。
例如对于一个自定义的变量TEMP
PIC10、PIC12、PIC16系列单片机用 COMF TEMP,1
PIC18系列单片机用 COMF TEMP,1,0
PIC24、dsPIC系列单片机用 COM TEMP (注意这两个系列的单片机用的汇编的不是COMF,而是COM)
另外PIC32系列单片机没用过其汇编,所以没法说是怎么写。本回答被提问者和网友采纳
第2个回答  2016-04-11
一般单片机都有按位异或指令,
比如对二进制数10101010b的bit2和bit3进行取反
10101010b^00001100B=10100110b
即与其异或的常熟相应位为0,则原数的相应位不变;若常熟相应位为1,则原数的相应位取反
第3个回答  2015-11-06
最简单的办法就是:XORLW b'00001000',例子就是将第三位取反。

按照逻辑异或的法则,任何数和1异或,结果为其反码。故此指令可以把任意位数据反转。
第4个回答  推荐于2018-03-20
你要哪位,拿去与“1”异或一下
比如RAM1位1
MOVLW B'00000010'
XORWF RAM1,F

这个很方便
相似回答