我有以下三个值:

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

08-15 22:26