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

pic单片机怎么用户汇编语言实现位取反,第1张

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

定义按键最好用:sbit P32=P3^2;

取反最好用: CY=!CY;

你按键没有去抖动,当你按下P32时很可能触发该语句多次,如果是偶数次的话就相当于没有取反。

如果还解决不了问题,请多贴点代码上来。

scanf("%o",&a);

//8进制读取

b=a>>4;

//右移4位,a是无符号的,左边补0,

--->

2的4次方=16,

所以

相当于

b

=

a

/

16

c=~(~0<<4);

对0先按位取反,

-1,再左移4位,,

低位补0,

-16

(1111110000),

再取反,得

(0000001111),

15

d=b&c;

//按位与,

因为

c=15

的二进制只有低4位是1,

也就是把b的二进制只取低4位,

其余位全置0,

相当于

d

=

b

%

16

所以,

最后的结果相当于

d

=

a

/

16

%

16

printf("%o\n%o\n",a,d);

//

以8进制输出

这个一般是对开关量或者某个字节的某些位,所做的 *** 作,比如某个开关量I00原来处于吸和状态,它是1,现在取反一下,就变成0;某个字节,里头的数据是11001100,那对它进行取反,就是00110011

以上就是关于pic单片机怎么用户汇编语言实现位取反全部的内容,包括:pic单片机怎么用户汇编语言实现位取反、C51 取反~怎么用啊,为什么不好使呢、c语言程序,按位取反问题,求帮助等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9767666.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存