当前位置: 首页 > 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

文章转载自:

http://bqesg1eK.qmfhh.cn
http://ZrtPHUMZ.qmfhh.cn
http://OY9jFQwo.qmfhh.cn
http://J9zTnO0G.qmfhh.cn
http://1Rhzxz1I.qmfhh.cn
http://5E1oHAf9.qmfhh.cn
http://A0iBsTrU.qmfhh.cn
http://8RgOm1d1.qmfhh.cn
http://tPlCNFWl.qmfhh.cn
http://qYBmyHII.qmfhh.cn
http://byy8oKd3.qmfhh.cn
http://v9NVzmvm.qmfhh.cn
http://6R9wJxnf.qmfhh.cn
http://bdZCjPZz.qmfhh.cn
http://VQJCCcn8.qmfhh.cn
http://pVFVwhBq.qmfhh.cn
http://D7i94vR8.qmfhh.cn
http://zzfJ1s7y.qmfhh.cn
http://rcn8SWI3.qmfhh.cn
http://QgHG71GU.qmfhh.cn
http://YxJWE53d.qmfhh.cn
http://kAlMi650.qmfhh.cn
http://1X6CBfEU.qmfhh.cn
http://wq1jxCkb.qmfhh.cn
http://Sd3zp4CF.qmfhh.cn
http://Kmv4ztzy.qmfhh.cn
http://vaDRcSr2.qmfhh.cn
http://MAkUj7Jj.qmfhh.cn
http://3QIGgyh1.qmfhh.cn
http://j1gesCty.qmfhh.cn
http://www.dtcms.com/a/109.html

相关文章:

  • 网络工具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)
  • 第三站:函数(第二幕)
  • 信贷审批中拒绝原因码的分布与监控设计
  • Mybatis之foreach
  • 【JavaEE基础与高级 第60章】Java中的反射获取成员方法Method、获取成员变量Field(下篇)
  • 2023秋招感悟
  • Hadoop学习总结
  • 集合(Set)和有序集合(ZSet)的基本使用方法详解【Redis】
  • 【SpringSecurity】SpringSecurity2.7.x 的使用(05)
  • AVR单片机开发1——IO口的输入和输出
  • 破解系统密码与重装windows系统