微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51单片机提问一个小问题 P0 &= ~0x01 直接写P0 = 0xfe区别

51单片机提问一个小问题 P0 &= ~0x01 直接写P0 = 0xfe区别

时间:10-02 整理:3721RD 点击:

[/table][table=98%,rgb(239, 245, 249)]
#define    RED_EW_ON()        P0 &= ~0x01   
#define    RED_EW_OFF()        P0 |=  0x01
#define YELLOW_EW_BLINK() P0 ^= 0x02
谁能告诉我啊 P0 &= ~0x01   直接写P0 = 0xfe
                  P0 |= ~0x01   直接写P0 = 0xff
                  P0 ^= 0x02   直接写P0 = 0xfd
有什么区别啊;非要整得让人看不懂吗;
还是有什么好处啊

让我这个老菜鸟给你回答吧,与或非你知道是啥意思了吧?PO = 0XFE;也就是二进制的1111 1110,对不对?0x01取反等价于~0X01也就是0XFE,&是什么作用呢?让某一位清零,也就是最低位清零,而其他位保持不变,|呢?让某一位置1,其他保持不变,但是为什么要这样用呢?以后如果你有机会同时用到了两个定时器(特指51),比如说TMOD这个寄存器,他是不能进行单独的位操作的,一次必须操作整个8位数据,如果你只用到了定时器0或者是定时器1,那么你设置TMOD = 0X01;也对,但是已经影响到了定时器1的设置了,定时器1不用还好,如果用的话,就容易出错,所以你应该这样写TMOD &= 0XF0;即低四位清零,高四位不变,TMOD |= 0X01;最低位置1,高7位不改变,这就达到了互不干扰的目的,明白了吗?不明白,加QQ597627977,详聊

回复太详细了,赞一个

二楼回答的很详细啦~ 谢谢二楼

很好很好,这么厉害还这么谦虚。

有收获,解决了我在32位机上的疑惑。

终于明白了,谢谢二楼~

回答很好,按位与和或是很有用的,有的单片机无位操作功能,必须用这个办法。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top