产品概述

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

小编 2024-10-12 产品概述 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

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

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

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

左移"<<"图解

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

右移“>>”图解

按位计算的意义

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

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

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

单片机位操作指令

前面那些流水灯的例程,我们已经习惯了“位”一位就是一盏灯的亮和灭,而我们学的指令却全都是用“字节”来介绍的:字节的移动、加法、减法、逻辑运算、移位等等。用字节来处理一些数学问题,比如说:控制冰箱的温度、电视的音量等等很直观,能直接用数值来表在。可是如果用它来控制一些开关的打开和合上,灯的亮和灭,就有些不直接了,记得我们上次课上的流水灯的例程吗?我们知道送往P1口的数值后并不能马上知道哪个灯亮和来灭,而是要化成二进制才知道。工业中有很多场合需要处理这类开关输出,继电器吸合,用字节来处理就显示有些麻烦,所以在8031单片机中特意引入一个位处理机制。

位寻址区

在8031中,有一部份RAM和一部份SFR是具有位寻址功能的,也就是说这些RAM的每一个位都有自已的地址,能直接用这个地址来对此进行操作。

内部RAM的20H-2FH这16个字节,就是8031的位寻址区。看图1。可见这里面的每一个RAM中的每个位我们都可能直接用位地址来找到它们,而不必用字节地址,然后再用逻辑指令的方式。

能位寻址的特殊功能寄存器

8031中有一些SFR是能进行位寻址的,这些SFR的特点是其字节地址均可被8整除,如A累加器,B寄存器、PSW、IP(中断优先级控制寄存器)、IE(中断允许控制寄存器)、SCON(串行口控制寄存器)、TCON(定时器/计数器控制寄存器)、P0-P3(I/O端口锁存器)。以上的一些SFR我们还不熟,等我们讲解相关内容时再作详细解释。

位操作指令

MCS-51单片机的硬件结构中,有一个位处理器(又称布尔处理器),它有一套位变量处理的指令集。在进行位处理时,CY(就是我们前面讲的进位位)称“位累加器”。有自已的位RAM,也就是我们刚讲的内部RAM的20H-2FH这16个字节单元即128个位单元,还有自已的位I/O空间(即P0.0…..P0.7,P1.0…….P1.7,P2.0……..P2.7,P3.0……..P3.7)。当然在物理实体上它们与原来的以字节寻址用的RAM,及端口是完全相同的,或者说这些RAM及端口都能有两种使用办法。

相关问答

【举例说明 单片机 位地址的四种表示方式】作业帮

[最佳回答]表示位地址是在汇编语言中才用的,而在keilc中是不用的.举例说明吧,如寄存器PSW中的8个位是可位寻址的,PSW的单元地址是D0H,其中的进位标志位Cy,可表...

单片机 写程序时如何设置标志位?

用汇编语言在单片机程序中定义标志位,很简单。单片机内存从20H开始的8个字节是布尔变量区,也就是为变量区。C语言定义unsignedcharflag=0;,实际也是存储在...

单片机 怎么算位地址?

在单片机中,位地址是指内存中最小的存储单位。计算位地址的方法是将字节地址乘以8,得到对应的位地址。这是因为每个字节包含8个位。例如,如果某个变量的字节地...

单片机 的位域是什么意思?如何使用?

位域是指信息在存储时,并不需要占用一个完整的字节,而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1两种状态,用一位二进位即可。为了节省...

单片机 填空求助1.MCS-51系列单片机为()位单片机.2.8051单片...

[最佳回答]1.MCS-51系列单片机为(8)位单片机.2.8051单片机有两种复位方式,既上电复位和手动复位.复位后SP=(07H),PC=(0000H),PSW=(00H),P0=(F...

单片机 中怎样取位地址?

在单片机中,取位地址是通过位操作来实现的。首先,需要确定要操作的寄存器或变量的地址。然后,使用位操作指令(如AND、OR、XOR等)来对该地址进行操作。通过设...

单片机 有4位、8位、16位、32位以及64位现在,请问的是在4位、8位这些个事什么意思?

首先要知道这里的“位数定义”:CPU内部总线的位数就是单片机的位数。这里的位也就是就是指单片机中CPU处理的数据是位数的。比如:51单片机属于8位机,就是CPU...

单片机 的每一个引脚是不是都有一个与它对应的地址呢?

1.是的,每一个单片机的引脚都有一个与之对应的地址。2.这是因为单片机是一种集成电路,其中的每一个引脚都有特定的功能和作用。为了能够对引脚进行控制和访...

单片机 中的 按位 取反是什么意思,请给出例子并解释?

就是0变1,1变0比如一个布尔型的数据,false,占一位,0取反后就是1,也就是true一个byte型变量,比如55,占一个字节,就是00110111取反后就是11001000,也...就...

为什么 单片机 有左高右低的?

问的是单片机是高级单片机和低级单片机吗?1.低端单片机主要是51内核,8位机,处理简单运算,输入信号采集,输出控制,对实时性不高的场合如小家电,电磁炉,...问...

猜你喜欢