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

发布网友 发布时间:2022-04-23 19:44

我来回答

5个回答

热心网友 时间:2023-10-05 10:17

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键空出一格,网络标号必须顶格
;*******************************************************************

热心网友 时间:2023-10-05 10:18

用COMF指令。
例如对于一个自定义的变量TEMP
PIC10、PIC12、PIC16系列单片机用 COMF TEMP,1
PIC18系列单片机用 COMF TEMP,1,0
PIC24、dsPIC系列单片机用 COM TEMP (注意这两个系列的单片机用的汇编的不是COMF,而是COM)
另外PIC32系列单片机没用过其汇编,所以没法说是怎么写。

热心网友 时间:2023-10-05 10:18

一般单片机都有按位异或指令,
比如对二进制数10101010b的bit2和bit3进行取反
10101010b^00001100B=10100110b
即与其异或的常熟相应位为0,则原数的相应位不变;若常熟相应位为1,则原数的相应位取反

热心网友 时间:2023-10-05 10:19

最简单的办法就是:XORLW b'00001000',例子就是将第三位取反。

按照逻辑异或的法则,任何数和1异或,结果为其反码。故此指令可以把任意位数据反转。

热心网友 时间:2023-10-05 10:20

你要哪位,拿去与“1”异或一下
比如RAM1位1
MOVLW B'00000010'
XORWF RAM1,F

这个很方便

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com