51单片机是8位的,寄存器有8位,每一位都代表不同的含义;STM32单片机是32位的,寄存器也是32位的,每一位也有不同的含义。在配置寄存器时,同一个寄存器会用到多次,如果直接赋值而不用“与”、“或”会发生什么情况呢?下面分析一下。

为什么要用逻辑“与”、逻辑“或”赋值

在操作寄存器时,可能需要对同一个寄存器要配置多次,如果每次都要直接赋值的话,最后的赋值会把前面的赋值覆盖掉,这样程序就无法实现应有的功能了。所以,为了不改变前面的设置,通常会用逻辑“与”、逻辑“或”来赋值

如何用逻辑“或”给寄存器赋值

逻辑或的特性是,有1输入即输出1;全0输入时才输出0。所以,可以看出,如果要不改变某一位的值的话,可以用0与其做或运算。

所以,在设置寄存器时,如果要将某一位置1,而将其他位保持不变的话,可以将该位和1作或运算,比如下面的语句:

GPIOA->CRH|=0X00000003;//低两位置1

上面的语句就是将低两位设置为了11,而其他位保持不变。

如何用逻辑“与”给寄存器赋值

逻辑与的特性是,有0输入即输出0;全1输入时才输出1。可以看出,如果要不改变某一位的值的话,可以用1与其做与运算。如下图所示:

所以,在设置寄存器时,如果要将某一位清零,而将其他位保持不变的话,可以将该位和0作与运算,比如下面的语句:

GPIOA->CRH&=0XFFFFFFF0;//低两位清零

上面的语句就是将低两位设置为了00,而其他位保持不变。

由上可知,合理的运用逻辑与、逻辑或运算可以其到只改变某几位,而不影响其他位的目的,并且可以大大提高到编写代码的效率。

  • UC3846控制芯片工作原理控制图 逆变焊机原理与用途
  • 数字万用表电阻档测试二极管正反向没有阻值(使用万用表测量二极管的正向电阻,为什么各档)
  • 学单片机需要学数电模电吗(学单片机要先学数电模电吗)
  • 电工怎么选择适合自己用的万用表(电工初学者买什么样的万用表好)
  • 单片机需要同时运行多个任务怎么办(单片机怎么同时执行多个任务)
  • 电机保护的方案取决于负载的机械特性
  • 绝缘电阻表正负搭接不复零位是怎么回事
  • 短路怎么用万用表查