我有以下三个值:
PORTB = 00011011
Mask = 00000111
Value = 00100110
使用这些值,我试图将PORTB设置为Mask设置为1的值。输出如下:
Output = 00011110
如您所见,我不会弄错PORTB的前5位。尽管我正在设置最后三位。当然,如果“掩码”和“值”更加复杂,情况就不会如此。似乎没有一个运算符可以帮助我解决这个问题,我做了以下尝试:
Mask = 00000111
Value = 00100110
------------------ AND
PORTB = 00011011
Output1 = 00000110
------------------ ??? This is where I get stuck, my first step doesn't seem to help much...
Output2 = 00011110
我希望有人能帮助我,因为我在网上找不到任何可以帮助我的解决方案/答案。
最佳答案
如果我正确理解,这应该是您要寻找的
PORTB = (PORTB & ~Mask) | (Value & Mask);
这就是它的作用
PORTB = 00011011
~Mask = 11111000
------------------ AND
Output1 = 00011000
Value = 00100110
Mask = 00000111
------------------ AND
Output2 = 00000110
Output1 = 00011000
Output2 = 00000110
------------------ OR
Output = 00011110