STM32學習筆記-常用寄存器操作
常用的寄存器位操作總結
1. 常用的位操作
操作 |
含義 |
|
& |
與 |
相同為1,不同為0 |
| |
或 |
不同為1,相同為0 |
^ |
異或 |
相同為0,相異為1 |
~ |
取反 |
0變1,1變0 |
<< |
左移 |
左移若干位,高位丟棄,低位補0 |
>> |
右移 |
右移若干位,正數補0,負數補1 |
2. 把變量的某位清零
//定義一個變量 a = 1001 1111 b (二進制數)
unsigned char a = 0x9f;
//對 bit2 清零
a &= ~(1<<2);
//括號中的 1 左移兩位,(1<<2)得二進制數:0000 0100 b
//按位取反,~(1<<2)得 1111 1011 b
//假如 a 中原來的值為二進制數: a = 1001 1111 b
//所得的數與 a 作”位與&”運算,a = (1001 1111 b)&(1111 1011 b),
//經過運算后,a 的值 a=1001 1011 b
// a 的 bit2 位被被零,而其它位不變。
3. 把變量的某幾個連續位清零
//若把 a 中的二進制位分成 2 個一組
//即 bit0、bit1 為第 0 組,bit2、bit3 為第 1 組,
// bit4、bit5 為第 2 組,bit6、bit7 為第 3 組
//要對第 1 組的 bit2、bit3 清零
a &= ~(3<<2*1);
//括號中的 3 左移兩位,(3<<2*1)得二進制數:0000 1100 b
//按位取反,~(3<<2*1)得 1111 0011 b
//假如 a 中原來的值為二進制數: a = 1001 1111 b
//所得的數與 a 作”位與&”運算,a = (1001 1111 b)&(1111 0011 b),
//經過運算后,a 的值 a=1001 0011 b
// a 的第 1 組的 bit2、bit3 被清零,而其它位不變。
//上述(~(3<<2*1))中的(1)即為組編號;如清零第 3 組 bit6、bit7 此處應為 3
//括號中的(2)為每組的位數,每組有 2 個二進制位;若分成 4 個一組,此處即為 4
//括號中的(3)是組內所有位都為 1 時的值;若分成 4 個一組,此處即為二進制數“1111 b”
//例如對第 2 組 bit4、bit5 清零
a &= ~(3<<2*2);
3. 對變量的某幾位進行賦值。
//a = 1000 0011 b
//此時對清零后的第 2 組 bit4、bit5 設置成二進制數“01 b ”
a |= (1<<2*2);
//a = 1001 0011 b,成功設置了第 2 組的值,其它組不變
4. 對變量的某位取反
//先清零
//a = 1001 0011 b
//把 bit6 取反,其它位不變
a ^=(1<<6);
//a = 1101 0011 b