当前位置: 首页 > news >正文

修改寄存器值的方法

修改寄存器值的方法

法1:直接使用十六进制对寄存器操作

库文件中定义了这些寄存器的地址,我们只需要通过他的名字访问他就行,通过寄存器例程手册中的寄存器描述来弄清楚设置什么数值。

GPIOA->CRL = 0x44444444;

法2:使用C语言的位操作

约定:以变量 a 代表寄存器,并假设寄存器中本来已有数值。

把变量的某位清零

把某一位清零,且其它位不变。

使用 & 操作,与1&不变,与0&得0

//定义一个变量 a = 1001 1111 b (二进制数)
unsigned char a = 0x9f;

//对 bit2 清零
a &= ~(1<<2);

//括号中的 1 左移两位,(1<<2)得二进制数:0000 0100 b
//按位取反,~(1<<2)得 1111 1011 b
//假如 a 中原来的值为二进制数: a = 1001 1111 b
//所得的数与 a 作”位与&”运算,a = (1001 1111 b)&(1111 1011 b),
//经过运算后,a 的值 a=1001 1011 b
// a 的 bit2 位被被零,而其它位不变。

把变量的某几个连续位清零

把某几个连续位清零,且其它位不变。

使用 & 操作,对二进制位分组,对组内所有位都为 1 时的值按组号左移每组的位数这么多位

//定义一个变量 a = 1001 1111 b (二进制数)
unsigned char a = 0x9f;

//若把 a 中的二进制位分成 2 个一组
//即 bit0、bit1 为第 0 组,bit2、bit3 为第 1 组,
// bit4、bit5 为第 2 组,bit6、bit7 为第 3 组
//要对第 1 组的 bit2、bit3 清零

a &= ~(3<<2*1);

//括号中的 3 左移两位,(3<<2*1)得二进制数:0000 1100 b
//按位取反,~(3<<2*1)得 1111 0011 b
//假如 a 中原来的值为二进制数: a = 1001 1111 b
//所得的数与 a 作”位与&”运算,a = (1001 1111 b)&(1111 0011 b),
//经过运算后,a 的值 a=1001 0011 b
// a 的第 1 组的 bit2、bit3 被清零,而其它位不变。

//上述(~(3<<2*1))中的(1)即为组编号;如清零第 3 组 bit6、bit7 此处应为 3
//括号中的(2)为每组的位数,每组有 2 个二进制位;若分成 4 个一组,此处即为 4
//括号中的(3)是组内所有位都为 1 时的值;若分成 4 个一组,此处即为二进制数“1111 b”即为(15)

//例如对第 2 组 bit4、bit5 清零
a &= ~(3<<2*2);

对变量的某几位进行赋值

对某几位写入所需要的数值了,且其它位不变。

使用 | 操作,与1或变1,与0或不变

//定义一个变量 a = 1001 1111 b (二进制数)
unsigned char a = 0x9f;

//此时对清零后的第 2 组 bit4、bit5 设置成二进制数“01 b ”

a |= (1<<2*2); //括号内的(1)是要设置成的值01 b
//a = 1001 0011 b,成功设置了第 2 组的值,其它组不变

对变量的某位取反

使用 ^ 操作,与1异或取反,与0异或不变

//定义一个变量 a = 1001 1111 b (二进制数)
unsigned char a = 0x9f;

//把 bit6 取反,其它位不变

a ^=(1<<6);
//a = 1101 0011 b

相关文章:

  • 网络工具Netwox和Wireshark详解
  • Linux如何写C语言
  • PyTorch1.13 亮点一览,TorchEval、MultiPy 、TorchSnapshot 新库大解读
  • VCS工具学习笔记(3)
  • 初识C++(三)
  • C++ 【多态】
  • Codeforces 1750A. Indirect Sort
  • 7.10 操作系统的启动
  • 项目计划要趁早
  • 【阅读笔记】理解表驱动设计
  • [C语言、C++]数据结构作业:用递归实现走迷宫(打印正确通路即可)
  • JVM垃圾回收系列之垃圾收集器二
  • 2023年,前端开发未来可期
  • mysql 常用查询优化策略详解
  • 区块链的认识
  • Kubernetes中的yaml文件
  • Python编程挑战赛
  • Windows下安装RabbitMQ的步骤
  • 欢迎女神科学家颜宁回国,并祝她如愿以偿
  • 学习笔记-IPC$(Internet Process Connection)
  • 美法官裁定特朗普援引战时法律驱逐黑帮违法,系首次永久性驳回
  • 印巴局势紧张或爆发军事冲突,印度空军能“一雪前耻”吗?
  • 大学2025丨对话深大人工智能学院负责人李坚强:产学研生态比“造天才”更重要
  • 央行就《关于规范供应链金融业务引导供应链信息服务机构更好服务中小企业融资有关事宜的通知》答问
  • “女乘客遭顺风车深夜丢高速服务区”续:滴滴永久封禁两名涉事司机账号
  • 华夏银行一季度营收降逾17%、净利降逾14%,公允价值变动损失逾24亿