打印
[开发资料]

单片机C语言,位操作的编程实现:置位和清零,GPIOx_CRL |= (0x01<<1)

[复制链接]
243|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
LOVEEVER|  楼主 | 2023-12-11 15:00 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
C语言编程的6种位操作,分别是按位与“&”、按位“或|”、按位取反“~”、异或“^”、左移“<<”以及右移“>>”,这6种位操作在操作单片机的寄存器时非常方便,尤其是对寄存器的某一位清零或者置位,而不影响其他位。

(单片机端口方向配置寄存器)


以8位单片机为例,如果要将第1位设置为输出,而其他7位保持不变,根据寄存器说明只需要将第1位配置为1即可。这里就要用到“置1”的C语言语句。直接操作寄存器时,可以直接通过置1和清0来将某一个bit设置为1或者0,如下图所示。

(置1和清0位操作)


使用特权

评论回复
沙发
LOVEEVER|  楼主 | 2023-12-16 13:35 | 只看该作者
1."置1"C语言语句

//Var |= ( A<
其中Var是变量,B是从第几位开始,而A则是要修改的位数,操作结果是置1。读法为:将Var从第B位开始的连续A位置1,其他保持不变。

2.“置1”C语言语句推导

假设将Var中从第1位开始的3位置1,那么C语句的写法应该为:Var |= (0x7<<1);那么推导过程如下:

Var = Var | ( 0x07<<1 );//等效写法
0x07:        0000 0111
0x07<<1: 0000 1110//可以看到第1、2、3位变为了1;
//Var做按位或运算时,只要有1则结果为1
由上面的推导可以看到,(0x07<<1)从第1位开始的连续3位已经变为了1,再跟变量Var做或运算时,这三位就完成了置1操作,而其他位不受影响

使用特权

评论回复
板凳
LOVEEVER|  楼主 | 2023-12-16 13:37 | 只看该作者
3."清0"C语言语句
//Var &= ~ ( A<

其中Var是变量,B是从第几位开始,而A则是要修改的位数,操作结果是清0。读法为:将Var从第B位开始的连续A位清0,其他保持不变。

按位或的真值表参考如下:



使用特权

评论回复
地板
LOVEEVER|  楼主 | 2023-12-16 13:39 | 只看该作者
4.“清0”C语言语句推导

假设将Var中从第1位开始的3位清0,那么C语句的写法应该为:Var &=~ (0x7<<1);那么推导过程如下:

Var = Var &(~( 0x07<<1 ));//等效写法
0x07:              0000 0111
0x07<<1:        0000 1110//可以看到第1、2、3位变为了1;
~( 0x07<<1 ): 1111 0001//按位取反,可以看到第1、2、3位变为了0;
//Var做按位与运算时,只要有0则结果为0

由上面的推导可以看到,~(0x07<<1)从第1位开始的连续3位已经变为了0,再跟变量Var做与运算时,这三位就完成了清零操作,而其他位不受影响。

按位与的真值表参考如下:



使用特权

评论回复
5
LOVEEVER|  楼主 | 2023-12-16 13:41 | 只看该作者
5.“清0”和“置1”总结

按位操作的这种用法在初次接触时非常的难理解,需要反复练习才能熟悉,下面将置1和清0做了总结,以方便大家**。

按位操作的“置1”规律如下图所示:


按位操作的“清0”规律如下图所示:



使用特权

评论回复
6
AdaMaYun| | 2023-12-16 14:32 | 只看该作者
GPIO操作是基本的单片机操作规范,尤其是真值表使用

使用特权

评论回复
7
jf101| | 2023-12-19 09:48 | 只看该作者
真值表一个很重要的工具,建议多使用

使用特权

评论回复
8
OKAKAKO| | 2023-12-19 10:16 | 只看该作者
按位操作的这种用法在初次接触时非常的难理解,需要反复练习才能熟悉

使用特权

评论回复
9
小小蚂蚁举千斤| | 2023-12-19 10:38 | 只看该作者
移位和基础异或等运算很重要

使用特权

评论回复
10
中国龙芯CDX| | 2023-12-21 09:09 | 只看该作者
按位与“&”、按位“或|”、按位取反“~”、异或“^”、左移“<<”以及右移“>>”,这6种位操作在操作单片机的寄存器时非常方便

使用特权

评论回复
11
星辰大海不退缩| | 2023-12-21 12:30 | 只看该作者
GPIO操作是基本的单片机操作规范很重要

使用特权

评论回复
12
szt1993| | 2023-12-22 12:12 | 只看该作者
基础与或非移位等操作很重要

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

171

主题

1398

帖子

4

粉丝