51单片机的五类指令(五)——位操作类指令

目录

一、位传送指令

[1、MOV C, bit](#1、MOV C, bit)

[2、MOV bit, C](#2、MOV bit, C)

3、位传送指令的应用场景

二、位变量修改指令

[1、CLR(清 0 指令)](#1、CLR(清 0 指令))

[2、SETB(置 1 指令)](#2、SETB(置 1 指令))

3、位变量修改指令的应用场景

三、位变量逻辑操作指令

[1、位变量逻辑与指令 ANL](#1、位变量逻辑与指令 ANL)

[2、位变量逻辑或指令 ORL](#2、位变量逻辑或指令 ORL)

[3、位变量取反指令 CPL](#3、位变量取反指令 CPL)

4、综合应用示例

四、位条件转移类指令

(一)以进位标志位C(Cy)为条件的转移

[1、JC rel](#1、JC rel)

[2、JNC rel](#2、JNC rel)

[(二)以直接寻址位 bit 为条件的转移指令](#(二)以直接寻址位 bit 为条件的转移指令)

[1、JB bit, rel](#1、JB bit, rel)

[2、JNB bit, rel](#2、JNB bit, rel)

[3、JBC bit, rel](#3、JBC bit, rel)

(三)位条件转移指令的应用


单片机中寻址是为了找到操作数,而各类指令则是为了对操作数进行操作。本篇文章将介绍51单片机中的第五类指令------位操作类指令。

51 单片机的位操作类指令是汇编语言编程里极为重要的一类指令,**它能够对单个二进制位进行操作,**以下是对这些指令的详细介绍。

一、位传送指令

1、MOV C, bit

**(1)指令作用:**把位地址 bit 中的内容传送到进位标志位 CY。

(2)示例代码

XML 复制代码
MOV C, P1.0  ; 把P1口的第0位传送到进位标志位CY

**(3)解释:**若 P1.0 的值为 1,那么 CY 也会变成 1;若 P1.0 的值为 0,CY 则变为 0。

2、MOV bit, C

**(1)指令作用:**把进位标志位 CY 的内容传送到位地址 bit。

(2)示例代码

XML 复制代码
MOV P1.0, C  ; 把进位标志位CY的值传送到P1口的第0位

**(3)解释:**要是 CY 的值为 1,P1.0 就会被置为 1;若 CY 的值为 0,P1.0 就会被清为 0。

注意:其中的一个操作数必须为进位标志(CY)另一个可以是任何直接寻址位 bit(直接寻址位就是通过直接给出位地址,进而对该地址对应的位数据进行操作)。

3、位传送指令的应用场景

位传送指令常用于对单片机的某些引脚状态进行读取和设置,或者对一些标志位进行操作。

二、位变量修改指令

1、CLR(清 0 指令)

**(1)功能:**将指定的位清 0

(2)格式:① CLR C: 把进位标志位 C 清 0。**② CLR bit:**把直接寻址位清 0。

(3)示例

XML 复制代码
CLR C      ; 清0进位标志位C
CLR P1.0   ; 清0P1.0引脚对应的位
2、SETB(置 1 指令)

**(1)功能:**将指定的位置 1。

(2)格式:① **SETB C:**把进位标志位 C 置 1。**② SETB bit:**把直接寻址位置 1。

(3)示例

XML 复制代码
SETB C     ; 把进位标志位C置1
SETB P1.1  ; 把P1.1引脚对应的位置1
3、位变量修改指令的应用场景

这些位变量修改指令能直接操作单个位,在控制外部设备的引脚状态、进行标志位的设置与清除等方面有广泛应用。例如,你可以利用这些指令来控制 LED 灯的亮灭。

XML 复制代码
ORG 0000H
START:
    SETB P1.0    ; 点亮P1.0引脚上连接的LED
    ACALL DELAY  ; 调用延时子程序
    CLR P1.0     ; 熄灭P1.0引脚上连接的LED
    ACALL DELAY  ; 调用延时子程序
    SJMP START   ; 跳转到START处,循环执行

DELAY:
    MOV R7, #250 ; 外层循环次数
DELAY1:
    MOV R6, #250 ; 内层循环次数
DELAY2:
    DJNZ R6, DELAY2 ; 内层循环
    DJNZ R7, DELAY1 ; 外层循环
    RET

END

在这个例子中,SETB P1.0 和 CLR P1.0 指令用于控制 LED 灯的亮灭,CPL 指令可用于实现 LED 灯状态的翻转。

三、位变量逻辑操作指令

1、位变量逻辑与指令 ANL

(1)指令格式与功能

**① ANL C, bit:**将进位标志位 C 和直接寻址位 bit 进行逻辑与运算,结果存于进位标志位C中。

**② ANL C, /bit:**将进位标志位 C 和直接寻址位 bit 的取反值进行逻辑与运算,结果存于进位标志位 C 中。

(2)示例

XML 复制代码
MOV C, 1 ; 将进位标志位C置1
MOV P1.0, 0 ; 假设P1.0引脚置0
ANL C, P1.0 ; 执行C = C AND P1.0,结果C为0
2、位变量逻辑或指令 ORL

(1)指令格式与功能

**① ORL C, bit:**将进位标志位 C 和直接寻址位 bit 进行逻辑或运算,结果存于进位标志位C中。

**② ORL C, /bit:**将进位标志位 C 和直接寻址位 bit 的取反值进行逻辑或运算,结果存于进位标志位 C 中。

(2)示例

XML 复制代码
MOV C, 0 ; 将进位标志位C置0
MOV P1.1, 1 ; 假设P1.1引脚置1
ORL C, P1.1 ; 执行C = C OR P1.1,结果C为1
3、位变量取反指令 CPL

**(1)功能:**对指定的位取反。

(2)格式:① CPL C: 对进位标志位 C 取反。**② CPL bit:**对直接寻址位取反。

(3)示例

XML 复制代码
CPL C      ; 对进位标志位C取反
CPL P1.2   ; 对P1.2引脚对应的位取反
4、综合应用示例

下面是一个简单的程序示例,展示了这些指令的综合运用。该程序依据 P1.0 和 P1.1 引脚的状态,对 P1.2 引脚进行相应的操作。

XML 复制代码
ORG 0000H
START:
    MOV C, P1.0 ; 将P1.0引脚状态传送到C
    ANL C, P1.1 ; C和P1.1进行逻辑与运算
    ORL C, /P1.3 ; C和P1.3取反后进行逻辑或运算
    CPL C ; 对C取反
    MOV P1.2, C ; 将C的值传送到P1.2引脚
    SJMP START ; 循环执行
END

在这个程序中:首先把 P1.0 引脚的状态传送到进位标志位 C;接着 C 和 P1.1 引脚状态进行逻辑与运算;然后 C 和 P1.3 引脚的取反值进行逻辑或运算;再对 C 取反;最后把 C 的值传送到 P1.2 引脚。程序会不断循环执行这些操作。

四、位条件转移类指令

(一)以进位标志位C(Cy)为条件的转移
1、JC rel

**(1)功能:**若进位标志位 C 为 1,则程序跳转到指定的目标地址执行;若 C 为 0,则顺序执行下一条指令。

**(2)格式:JC rel;**其中rel是相对偏移量,范围是 -128 到 +127。

(3)示例

XML 复制代码
JC NEXT ; 如果C = 1,跳转到NEXT处执行;若C = 0,继续执行下一条指令
NEXT:
    ; 跳转后执行的代码
2、JNC rel

**(1)功能:**若进位标志位 C 为 0,则程序跳转到指定的目标地址执行;若 C 为 1,则顺序执行下一条指令。

**(2)格式:JNC rel;**rel同样是相对偏移量。

(3)示例

XML 复制代码
JB P1.0, NEXT ; 如果P1.0引脚对应的位为1,跳转到NEXT处执行;若为0,继续执行下一条指令
NEXT:
    ; 跳转后执行的代码
(二)以直接寻址位 bit 为条件的转移指令
1、JB bit, rel

**(1)功能:**若直接寻址位为 1,则程序跳转到指定的目标地址执行;若该位为 0,则顺序执行下一条指令。

**(2)格式:JB bit, rel;**bit为直接寻址位,rel为相对偏移量。

(3)示例

XML 复制代码
JB P1.0, NEXT ; 如果P1.0引脚对应的位为1,跳转到NEXT处执行;若为0,继续执行下一条指令
NEXT:
    ; 跳转后执行的代码
2、JNB bit, rel

**(1)功能:**若直接寻址位为 0,则程序跳转到指定的目标地址执行;若该位为 1,则顺序执行下一条指令。

(2)格式:JNB bit, rel;bit是直接寻址位rel是相对偏移量

(3)示例

XML 复制代码
JNB P1.1, NEXT ; 如果P1.1引脚对应的位为0,跳转到NEXT处执行;若为1,继续执行下一条指令
NEXT:
    ; 跳转后执行的代码
3、JBC bit, rel

**(1)功能:**若直接寻址位为 1,则程序跳转到指定的目标地址执行,并且将该直接寻址位清 0;若该位为 0,则顺序执行下一条指令。

**(2)格式:JBC bit, rel;**bit为直接寻址位,rel为相对偏移量。

(3)示例

XML 复制代码
JBC P1.2, NEXT ; 如果P1.2引脚对应的位为1,跳转到NEXT处执行并将P1.2清0;若为0,继续执行下一条指令
NEXT:
    ; 跳转后执行的代码
(三)位条件转移指令的应用

这些位条件转移类指令可以让程序依据位的状态做出不同的处理,例如检测外部引脚的状态、判断标志位等,从而实现复杂的控制逻辑。下面是一个简单的示例程序,它通过检测 P1.0 引脚的状态来控制 LED 灯的亮灭

XML 复制代码
ORG 0000H
START:
    JB P1.0, TURN_ON ; 如果P1.0为1,跳转到TURN_ON处
    CLR P1.1 ; 若P1.0为0,熄灭连接在P1.1上的LED
    SJMP START ; 跳回START继续检测
TURN_ON:
    SETB P1.1 ; 点亮连接在P1.1上的LED
    SJMP START ; 跳回START继续检测
END

这个程序中,持续检测P1.0引脚的状态,若为高电平就点亮LED,若为低电平就熄灭LED

相关推荐
西城微科方案开发32 分钟前
体重秤PCBA电路方案组成结构
单片机·嵌入式硬件
深圳市青牛科技实业有限公司38 分钟前
「青牛科技 」GC4931P/4938/4939 12-24V三相有感电机驱动芯片 对标Allegro A4931/瑞盟MS4931
科技·单片机·扫地机器人吸尘·筋膜枪电机·驱动轮电机·服务机器人驱动轮电机·工业机器人减速电机
集和诚JHCTECH1 小时前
集和诚携手Intel重磅发布BRAV-7820边缘计算新品,为车路云一体化场景提供强大算力支撑
人工智能·嵌入式硬件·边缘计算
Qingniu011 小时前
「青牛科技」GC5849 12V三相无感正弦波电机驱动芯片
科技·单片机·嵌入式硬件·cpu散热风扇·vga显卡散热风扇·rgb机箱散热风扇·水冷泵及散热风扇
charlie1145141912 小时前
STM32F103C8T6单片机硬核原理篇:讨论GPIO的基本原理篇章1——只讨论我们的GPIO简单输入和输出
c语言·stm32·单片机·嵌入式硬件·gpio·数据手册
阿让啊2 小时前
bootloader+APP中,有些APP引脚无法正常使用?
c语言·开发语言·stm32·单片机·嵌入式硬件
可待电子单片机设计定制(论文)3 小时前
【51单片机】基于单片机的智能门禁系统设计
单片机·mongodb·51单片机
蝎蟹居3 小时前
GB/T 4706.1-2024 家用和类似用途电器的安全 第1部分:通用要求 与2005版差异(1)
人工智能·单片机·嵌入式硬件·物联网·安全
Lhj061613 小时前
stm32 can 遥控帧的问题
stm32·单片机·嵌入式硬件
三歪爱三玖15 小时前
【蓝桥杯】单片机设计与开发,速成备赛
单片机·职场和发展·蓝桥杯