设计与开发

单片机右移 单片机C语言编程,位操作

小编 2024-11-23 设计与开发 23 0

单片机C语言编程,位操作

前面介绍了单片机为什么要用C语言编程、单片机编程要使用哪些编程环境。从本节开始介绍单片机编程的基本知识。第一节要介绍的是

按位操作 。因为在配置单片机的寄存器时,位操作是非常常用的,比如将某个单片机的GPIO配置为输出方向、且输出为0时,用位操作就非常方便。

单片机的位操作

位操作包含哪些操作呢?常用的有六种操作:按位与“&”、按位或“|”、按位取反“~”、按位异或“^”、左移“<<”、右移“>>”等,表格如下:

位操作表格

按位与"&"计算逻辑

按位与"&"的逻辑是输入中只要有一个0时,输出为0;输入都为1时,输出才为1。真值表格如下:

输入A

0

0

1

1

输入B

0

1

0

1

输出

0

0

0

1

按位或“|”计算逻辑

按位“|”的逻辑是输入中只要有一个1时,输出为1;输入都为0时,输出才为0。真值表格如下:

输入A

0

0

1

1

输入B

0

1

0

1

输出

0

1

1

1

按位取反(~)计算逻辑

按位取反(~)可以理解为非,即翻转,输入为0时,输出为1;输入为1时,输出为0。真值表格如下:

输入

0

1

输出

1

0

按位异或“^”计算逻辑

按位异或(^)是用来判断输入是否一致的,如果两个输入一致则为0;输入不一致则为1。真值表格如下:

输入A

0

0

1

1

输入B

0

1

0

1

输出

0

1

1

0

左移“<<”和右移">>"计算逻辑

移位操作要考虑数据是否有符号,在单片机编程时,无符号类型用的比较多,所以这里介绍无符号的移位。

无符号数据左移时,右侧补零,左侧被移走。

左移"<<"图解

无符号数据右移时,左侧补零,右侧被移走。

右移“>>”图解

按位计算的意义

前面说过,按位逻辑计算对寄存器的配置非常方便,因为寄存器是可“位”操作的,要寄存器的某位操作时,不能更改其他位的数值。

后面还会继续介绍位操作的编程实现方式。

如果文章有所帮助,请关注、评论并转发吧。

单片机编程好学吗?单片机初学者怎样看懂代码?

单片机在很多人看来好像门槛很高,在某些人看来很简单。

所以,单片机编程好不好学,这取决于谁去学,有没有基础,有没有兴趣。

我自己是通过自学学会的,我个人认为相对java那些纯软件,单片机比较好学。

单片机编程只需要学习C语言,很多人也会把汇编也学了,但是实际产品开发汇编一般用的还是比较少。

反正我从来没用汇编做过项目,所以只需要学习C语言就可以了。

至于单片机嘛,入门51的单片机也很简单,就是看手册配置单片机的寄存器而已。

就像你买一个冰箱,它配一个说明书给你,教你怎么用。

学习编程的过程才是最枯燥,连续看1个月视频,敲一个月的代码,只能在屏幕前显示冷冰冰一些字符。

而单片机则有趣得多,你只要会C语言入门语句,再加一点单片机寄存器配置就能点亮电路板上的一个灯。

这个时候你会更有成就感,感觉你学的东西可以很快看到成果,很快你天马行空的脑袋就会去思考,我怎么用程序控制家里的灯打开和关闭。

有了这些想法以后,你就更有动力去学习,把自己的想法变现。

所以很多时候,我经常对学员说,只要你有兴趣,其实最后你是玩会单片机的

就像我们玩游戏,只要有兴趣,我相信一个小学生都能玩得很好。

单片机初学者怎么看懂代码?

在看代码之前,我们首先要背下C语言的一些关键词和语句都有什么作用,这是基础,这一步没做到,不要想着能看懂代码。

那是不是知道C语言所有关键词和语句就一定能看懂代码呢?

答案肯定是不一定的,一段代码就是一个功能,如果你不了解功能的情况下看代码,你会越看越迷茫。

一般我看代码的正确流程是:

1. 先搞懂功能原理,然后思考如果是我的话,我会怎么去写,我会先尝试着用自己的思维去实现一下代码,只有写的时候你才会发现问题。

2. 抱着这些问题去研究别人的代码,看下别人的实现思路。

3. 如果有条件,可以尝试改改别人的代码,调试一下会有什么反应。

做到以上三步,基本上你就能吃透别人的代码。

学会看懂别人的代码是一项非常重要的能力,我的编程水平都是这样去提升的。

很多时候虽然你重写代码也能实现同样的功能,但是其中涉及到2个东西会直接影响整个产品的稳定性和效率。

1.代码架构

2.代码算法

代码架构 决定你的程序移植性和可扩展性,同时也会影响做出来产品的稳定性。

关于程序架构这块,一般需要经过大量的实际项目沉淀,才能知道实际产品开发当中的痛点,才会理解架构的重要性。

所以我在19年录制了一套专门针对单片机C语言的程序架构,架构采取模块化编程,内核文件负责任务调度,并提供任务创建和管理接口。

还有就是队列算法,回调函数等等,通过使用c语言高级语法的一些技巧来解决产品可扩展性和移植性的问题。

这个教程也是无偿给大家看的,需要的找无际单片机编程领取。

如果对大家有帮助的话,就给我来个鼓励(赞)就行了,不然下次没什么动力分享这些有价值的东西了,浪费时间又没好处对吧?哈哈哈。

代码算法 决定你的程序执行的效率,举个例子,右移运算也能当除法去,并且执行的机器周期比除法运算短。

这两个概念主要体现在中大型的项目上,如果你的项目是51单片机级别的,基本上可以忽略,因为芯片的资源有限,你想做出好的架构,芯片的ROM都不够用。

相关问答

单片机 C语言 右移 指令怎么用?

用这种移位语句,就是这种结果。你试试:_crol_()和_cror_()移位函数。需要先加上头文件:#include用这种移位语句,就是这种结果。你试试:_crol_()和_cror_()移...

单片机 汇编语言画程序框图的时候, 右移 怎么表达啊?

用RLCA左移,其中包括了进位位Cy了,A左移两位以后不一定变成11111100,因为原来Cy的状态未知,所以,不是亮两个LED,当然需要是LED的负极接在I/O脚上,是0有效...

rl 单片机 含义?

单片机RL指令,是左移指令(参加左移的是8个位,也就是一个字节)。是属于单片机的位移指令。RR指令:是右移指令(参加左移的是8个位,也就是一个字节)。相对...

CY在 单片机 里面是什么意思?

CY是进位标志,比如二进制数10101100,左移一次CY=1,第二次CY=0,因为左向右数第二个数为0无进位。采用这种方法可位读取!CY是进位标志,比如二进制数10101100,左...

单片机 里RL A是循环向左移一位(不带进位),为什么相当于把A乘2?

首先,RLC表示A带进位标志(CY)循环左移一次,相当于乘以2;进位标志CY=1,则A=7AH=123D(十进制的123)的带进位标志用二进制表示为101111010,将其整体左移...首先,...

单片机 中rel什么作用?-ZOL问答

号数,从-128到127.用更好理解的话来说,就是要跳转的新的地址与本条指令所在的地址上下不能超过127个地址空间。通...REL是相对值测量模式,就是在...

单片机 的CY位有什么作用-ZOL问答

单片机CY(Carry):用于表示加法进算中的进位和减法运算中的借位,加法运算中有进...为状态标志位还常用于同步工作:它与其它标志配合使用可以实现数据的左移或右...

单片机 中TH0和TL0是什么意思?-ZOL问答

51单片机有两个定时器T0和T1一:定时器有16位工作模式二:TH0代表定时器的高八位,TH0中的H代表High即高的意思,TL0是定时器的低八位,其中L为LOW即低...

菜鸟提问 单片机 c语言函数_crol_?

这么说吧,举个例子,假如原来b=0xBA;即二进制的(10111010),p1=_crol_(b,1);其执行过程是这样的,1,首先把b循环左移,结果是01110101,即b=0x75;2,把循环后的...

什么是 单片机 的查表法

先说第一个问题:比如用查表法将结果保存到变量i中,查表变量为x,则i=table[x],记住C语言里面数组是从0开始的,比如说上面的0x01就是table[0],0x02...

猜你喜欢