对寄存器的操作有时候要考虑对其不同的位进行先后顺序不同的设置,但是对寄存器操作的方法是固定的。
首先要明白逻辑运算符(!,&&,||)和位运算符(<<,>>,~,|,^,&)的区别:
对寄存器的操作使用的是位运算符,
逻辑运算符一般用于在程序中判断逻辑中使用。
例如 定义一个8位的寄存器(0xf0是寄存器的地址): #define REG 0xF0
1)对单个的位进行赋值
(1)将寄存器REG的第5位置“1”: REG |= (1 << 5);
(2)将寄存器REG的第5位清“0”: REG &= ~(1 << 5);
(3)将寄存器REG的第3和第5位置“1”:REG |= (1 << 5) | (1 << 3);
(4)将寄存器REG的第3和第5位清“0”:REG &= ~( (1 << 5) | (1 << 3) );
该段总结如下:
将某位置1,移位后使用位运算"|" ;
将某位清0,移位取反后,使用位运算"&"
2)直接赋值
(1)将寄存器REG的1、2、3、5、7位置“1”
REG = 0x5E; (即给寄存器REG1赋值为1010 1110,这种方法多在初始化中使用)
(2)分别将寄存器REG的1、3、5、7位置“1”;0、2位清“0”
u8 temp;
temp = REG;
temp |= (1 << 1); //将第1位置“1”
temp |= (1 << 3);
temp |= (1 << 5);
temp |= (1 << 7);
temp &= ~(1 << 0) ; //将第0位清“0”,等价于temp &= ~0x01
temp &= ~(1 << 2); //将第2位清“0”
REG = temp;