位屏蔽位寄存器

时间:2014-10-04 13:11:16

标签: c avr bitmask

我确信这已被问到,但我无法理解如何对8位寄存器进行位掩码。

假设我有一个8位寄存器。这些位通过PORTD设置。我想更改除2 LSB之外的所有位。

PORTD |= 0b111011XX;

XX是我不想改变的2 LSB。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

试试这个:

PORTD |= 0b11101100; // bitwise-OR-ing with 0 retains the original

如果要翻转高6位并希望保留较低的2位,则需要执行以下操作:

PORTD ^= 0b11111100; // bitwise-XOR-ing with 1 reverses the bit and with 0 retains

答案 1 :(得分:2)

如果你想清楚你的意图,你可以将掩蔽部分与你设定的值分开,例如:

PORTD |= 0b11101100 & ~0b00000011

这将在任何情况下得到优化,但会清楚地解释您的设置以及您希望保留的内容。

相关问题