最近在学习单片机,而在单片机里,比较常见的一个操作就是移位操作,我们经常需要对寄存器里的位进行操作,比如置零或者是置一。
首先,我们来说一下与操作&。与操作简单来说就是,任何数与上0都为0,只有当两个数都为1时,与的结果才是1。所以根据与操作的特性,我们可以对想要的位进行屏蔽或者是保留。如果我们想要进行屏蔽操作,也可以说是置零操作,那我们就可以把需要的位&0,那么这一位自然就变成了0,例如我们想要将0000 1111的前两位置零,那么我们可以这样操作,将0000 1111 & 0000 0011,那么结果就变成了0000 0011。如果我们想要对需要的位进行保留,那我们就可以把需要的位&1,那么这一位的数自然会不变,例如我们想要保留1110 1011的后四位,那么我们可以这样操作,将1110 1011 & 0000 1111,那么结果就变成了0000 1011。
接下来我们来看一下或操作|。或操作简单来说就是,任何数或上1都为1,只有当两个数都为0的时候,或的结果才是0。所以根据或操作的特性,我们可以对特定的位进行置一操作。例如,我们想要把1000 1111中的0全部置一,那么我们可以这样操作,将1000 1111 | 0111 0000,那么结果就是1111 1111。
在单片机中,我们经常进行移位操作,例如我们想要将BSRR 寄存器的第 pinpos 位设置为 1。那么,我们可以这样操作。GPIO->BSRR = (((uint32_t)0x01)<<pinpos);。那么这样就可以将我们需要的位进行置一操作。