产品选型

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

小编 2024-10-25 产品选型 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

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

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

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

左移"<<"图解

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

右移“>>”图解

按位计算的意义

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

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

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

单片机为什么一直用C语言,不用其他编程语言?只有学过的知道

单片机为什么还在用C语言编程?答案是:C语言是最适合单片机编程的高级语言。

这个问题的意思应该是:现在有很多很好用的高级语言,如java,python,VC等等,为什么这些语言不能用来编写单片机程序呢?那么这个问题的答案就是:不能不能,而是不合适。

一、单片机编程的特点

对单片机编程来说,首先要考虑的是单片机的程序空间和数据空间都是有限的,所以要让程序尽量短小精悍,以节省程序占用的存储空间。

第二、单片机编程的一个主要对象是对单片机的端口和内部寄存器的操作和配置,这个需要比较精确的时序控制。

第三、单片机算法运算中,尽量使用加法、减法、移位运算,因为乘法和除法运算会非常费时间,尤其是除法,会耗费很多时间,这对于速度本身就有限制的单片机来说,是一个很大的负担。

二、高级语言编写单片机程序的缺陷

高级语言可以实现更为优化的算法,更为方便的执行方案,但是,高级语言对程序存储空间的占用要比汇编和C语言多很多。这是最致命的一点,单片机有限的存储空间需要靠精打细算来设计程序,根本经不起高级语言臃肿的代码体积。

高级语言无法实现精确的时序控制。

三、C语言是一个折中选择

其实用C语言开发单片机也是一个折中方案,因为最适合单片机开发的编程语言实在太过晦涩难懂,并且每一种单片机的汇编指令有很大区别,所以想把一个程序从这种单片机移植到另一种单片机简直是痴心妄想,还不如重新写一遍程序。

而C语言代码执行效率高,也比较精简,更便于移植......所以在现今的单片机编程语言中,C语言才会占据绝对主导地位

作者丨悟空问答:老马识途单片机

想要在程序员生涯内有更高的成就的话,C/C++就是一个既可以强化思维能力,又可以打好编程基础的编程语言,你想要做软件开发,成为核心程序员的话,学习C/C++的话笔者有一个C/C++的编程俩千人羣(Q艘索:C/C++编程学习13群 )你如果感觉自学C语言/C++语言有困难的话,有兴趣学习或者了解一下C/C++编程的小伙伴就可以进来交流。

相关问答

单片机移位 指令讲解?

单片机移位指令是指可以将一个二进制数向左或向右移动指定的位数的指令。其中向左移动相当于进行乘2的运算,向右移动相当于进行除2的运算。移位指令是单片机中...

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

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

单片机 进行 移位 操作右移时,为什么最高位保持原数,最低位移出?

关于这个问题,需要好好学习一下C语言中的移位操作(由于你问题中没有说明是在汇编语言环境下,还是C语言环境下,所以在这里我就假设你是在C语言环境下进行的移...

单片机 循环 移位 指令中A=7AH?

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

51 单片机 左移原理?

左循环本征函数:函数原型:unsignedchar_crol_(unsignedchara,unsignedcharn);单片机左移函数用法:例如,P2=0xff;P2=_crol...

单片机 中汇编 语言 RLC是什么意思?

RLC是带进位的循环左移,RLCA即将A的内容左移一位,将进位位C中的值移到累加器A的最低位,A的最高位移到C里。譬如说:设A=01000001,C=1;则如果执行RL,则A=...

单片机 为什么还在用 C语言 编程-牌子网

C语言是最适合单片机编程的高级语言。对单片机编程来说,首先要考虑的是单片机的程序空间和数据空间都是有限的,所以要让程序尽量短小精悍,以节省程...

...51 单片机 控制16个流水灯,依次左移点亮,.用汇编 语言 写】作业帮

[最佳回答]低电平点亮START:MOVR0,#8MOVR1,#8SETBCMOVA,#0FEHMOVP1,AS1:RLCACALLDELAYMOVP1,ADJNZR0,S1SETBCMOV...

51 单片机 ,有8个流水灯,每个之间延迟1秒,这个延迟用 c 程序编写怎么写?

1、用精确定时的方法,设置流水灯运行时的时间间隔,延时时间为500MS。2、#include"reg51.h"首先写出单片机的头函数。3、#include"int...

51 单片机 LED灯点亮的 c语言 编程方法?

*在用表格进行程序设计的时候,要用以下的指令来完成*(1).利用MOVDPTR,#DATA16的指令来使数据指针寄存器指到表的开头。*(2).利用MOVCA,@A+DP...*(2).利...

猜你喜欢