单片机的寄存器编程与位运算

控制/MCU

1878人已加入

描述

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

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

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

一、位运算符号

常用的位运算符有:

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

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

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

那么寄存器又是什么?

初学者可以这样理解:

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

  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引脚输出数据的部分代码。

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

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分