单片机的寄存器编程与位运算-焦点热讯

2023-06-21 11:10:08 来源:学嵌入式的钉子君

凡事都要脚踏实地去做,不弛于空想,不骛于虚声。努力只能做到合格,用心才能做到优秀。

这次一起来学习一下单片机开发时必备技术——位运算和寄存器编程


(相关资料图)

目前已经发布了几篇文章,文章多为个人观点,可能会有错误。欢迎朋友们指正错误或提出宝贵建议,必有重谢!

一、位运算符号

常用的位运算符有:

符号结合方向功能
&向右按位与
向右
^向右按位异或
~向左按位取反
<<向右数据左移
>>向右数据右移

二、单片机开发为什么需要学习位运算?

单片机开发常用的编程方法有:寄存器法 和 库函数法。其中基于寄存器编程是一种通用型的方法,即所有的单片机都可以采用寄存器方法进行编程。

那么寄存器又是什么?

初学者可以这样理解:

1.寄存器是在单片机中真实存在的(有明确的地址)、有明确功能的“开关”或者“指示器”。

一个单片机中一般含有大量的、功能各异的寄存器,这些寄存器都有自己独立的空间,分别控制着单片机的不同功能。

3.当需要控制单片机实现某种功能 或者 需要获取单片机的工作状态时,就必须要操作到对应的寄存器。

4.对于不同位数的单片机,其寄存器的位数也不同,并且一个寄存器可能通过不同的位来控制不同的功能。

总结:位运算在单片机开发中主要用途是操作寄存器,是单片机编程的基础!其重要性可见一斑。

三、位运算的重点内容

假设下表中的X是单片机中某个寄存器。

功能表达式
将寄存器第n位置位X

一共就4行,非常好记。但知识点仅记住是没用的,得实践!现在我们基于一款单片机的手册来模拟实操一下。有条件的朋友建议购买一套单片机套件,边学边练,效果加倍!

四、实例演示位运算

下方是一款单片机的一个寄存器表,来源于主流单片机型号STM32F1xx的参考手册。图中这个寄存器的功能是配置IO引脚的方向,比如配置引脚是作为输入还是输出。

若需要将单片机的PB4引脚配置为通用推挽输出,那应该如何配置此寄存器呢?

Step1,结合引脚正确表示出该寄存器。由于操作的引脚是PB4,属于GPIOB,故该寄存器写作GPIOB->CRL。

Step2,阅读表格中关于位功能的说明,找出需要操作该寄存器的哪些位。

由于待操作引脚序号为4,所以应操作该寄存器的第19~16位(因为这些位对应的功能是CNF4和MODE4,匹配该引脚)。

Step3,结合注释部分,确定待操作位的值。从图中可以看出MODE4(即第17、16位)可以配置为“01”以实现输出模式;CNF4(即第19、18位)可以配置为“00”以实现通用推挽输出模式。

Step4,将位运算与上一步结合,写出代码。

GPIOB- >CRL &=~(1< <19);GPIOB- >CRL &=~(1< <18);GPIOB- >CRL &=~(1< <17);GPIOB- >CRL |= (1< <16);化简上方四行位运算,整理得:GPIOB- >CRL &=~(0xF< <16);//清零[19:16]GPIOB- >CRL |= (0x1< <16);

ps: 以上代码仅是实现PB4引脚输出数据的部分代码。

若需要实现完整功能,还需要配置其他寄存器。

标签:

上一篇:环球报道:MCU的时钟树讲解
下一篇:最后一页