在不改变其他位的值的情况下,对某些位设定值。
在该场景单片机的开发中经常使用的是,首先对设置的位用操作员进行清零操作,
|通过操作符设置值。 例如,要改变GPIOA-ODR的状态,首先将寄存器的值清零
操作
** GPIOA-ODR =0XFF0F; //将第 4-7 位清 0
然后再与需要设置的值进行|或运算
GPIOA-ODR |=0X0040; //设定相应位的值,不改变其他位的值**
2.移位操作提高代码的可读性。
GPIOA-ODR|=1 5;
此操作是将ODR寄存器的第5位设置为1。 为什么不直接设定,而是向左移动?
固定的值是多少? 其实,这是为了提高代码的可读性和复用性。 这个代码很直观
明白了。 将第五位设置为1,其他位的值不变。 如果你写的话
GPIOA-ODR=0x0020;
这样的代码可读性非常差,同时很难重用。
3. ~取反操作使用技巧
例如,GPIOA-ODR寄存器的各位用于设定IO端口的输出状态。 在某个时刻,我们
我想把一个位的值设为0,把其他位设为1,简单的方法是直接在寄存器中设定值。
GPIOA-ODR=0xFFF7;
这样的做法会把第三名定为0,但是这样的写法可读性很差。 看看使用逆操作会怎么样。
或实现:
GIOA-ODR=(uint16_t )~) 13;
看了这一行的代码应该很容易理解,ODR寄存器的第3位设定为0,其他位设定为1。 可读性
很强。