1
我確信這已被問到,但我無法理解如何屏蔽8位寄存器。位屏蔽位寄存器
假設我有一個8位寄存器。這些位通過PORTD
設置。我想改變除2個LSB以外的所有位。
PORTD |= 0b111011XX;
XX是我不想改變的2個LSB。
我該怎麼做?
我確信這已被問到,但我無法理解如何屏蔽8位寄存器。位屏蔽位寄存器
假設我有一個8位寄存器。這些位通過PORTD
設置。我想改變除2個LSB以外的所有位。
PORTD |= 0b111011XX;
XX是我不想改變的2個LSB。
我該怎麼做?
如果你想保留明確你的目的,你可以在屏蔽部分從您所設置的值分開,如:
PORTD |= 0b11101100 & ~0b00000011
這將在任何情況下得到優化,但將清楚地解釋你正在設置的內容以及你想保留的內容。
試試這個:
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
「我想改變除[...]之外的所有位」 - 6位高位全部被翻轉?這需要XOR('^')而不是OR('|')... – mafso 2014-10-04 13:18:30