前面介绍了单片机为什么要用C语言编程、单片机编程要使用哪些编程环境。从本节开始介绍单片机编程的基本知识。第一节要介绍的是按位操作。因为在配置单片机的寄存器时,位操作是非常常用的,比如将某个单片机的GPIO配置为输出方向、且输出为0时,用位操作就非常方便。
单片机的位操作
位操作包含哪些操作呢?常用的有六种操作:按位与“&”、按位或“|”、按位取反“~”、按位异或“^”、左移“<<”、右移“>>”等,表格如下:
按位与"&"计算逻辑
按位与"&"的逻辑是输入中只要有一个0时,输出为0;输入都为1时,输出才为1。真值表格如下:
输入A | 0 | 0 | 1 | 1 |
输入B | 0 | 1 | 0 | 1 |
输出 | 0 | 0 | 0 | 1 |
按位或“|”计算逻辑
按位“|”的逻辑是输入中只要有一个1时,输出为1;输入都为0时,输出才为0。真值表格如下:
输入A | 0 | 0 | 1 | 1 |
输入B | 0 | 1 | 0 | 1 |
输出 | 0 | 1 | 1 | 1 |
按位取反(~)计算逻辑
按位取反(~)可以理解为非,即翻转,输入为0时,输出为1;输入为1时,输出为0。真值表格如下:
输入 | 0 | 1 |
输出 | 1 | 0 |
按位异或“^”计算逻辑
按位异或(^)是用来判断输入是否一致的,如果两个输入一致则为0;输入不一致则为1。真值表格如下:
输入A | 0 | 0 | 1 | 1 |
输入B | 0 | 1 | 0 | 1 |
输出 | 0 | 1 | 1 | 0 |
左移“<<”和右移">>"计算逻辑
移位操作要考虑数据是否有符号,在单片机编程时,无符号类型用的比较多,所以这里介绍无符号的移位。
无符号数据左移时,右侧补零,左侧被移走。
无符号数据右移时,左侧补零,右侧被移走。
按位计算的意义
前面说过,按位逻辑计算对寄存器的配置非常方便,因为寄存器是可“位”操作的,要寄存器的某位操作时,不能更改其他位的数值。
后面还会继续介绍位操作的编程实现方式。
如果文章有所帮助,请关注、评论并转发吧。