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

相关推荐
清风6666661 天前
基于单片机与DAC0832的双路波形信号发生系统设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
azwsm1 天前
电路元器件和GPIO控制器
单片机·嵌入式硬件
kebidaixu1 天前
FreeRTOS 移植到 STM32F407VETX 记录(一)
stm32·单片机·嵌入式硬件
CSDN官方博客1 天前
「谁说嵌入式只是调包和焊板子?」—— 2026嵌入式全栈技术征锋令
嵌入式硬件·物联网·embedding
点灯小铭1 天前
基于单片机的数码管定时插座设计与定时开关功能实现
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
云栖梦泽1 天前
玩转RK3506SDK
linux·嵌入式硬件
数智工坊1 天前
机器人四大主控板系统分层选型指南:树莓派、ESP32、STM32与Arduino的能力边界与实战定位
stm32·嵌入式硬件·机器人
进击的小头1 天前
第8篇:IGBT 从零到精通:核心原理、关键参数、选型指南与工业级应用要点
经验分享·嵌入式硬件·学习
点灯小铭1 天前
基于单片机的多模式智能洗衣机设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
项目題供诗1 天前
STM32-AD单通道&AD多通道(十九)
stm32·单片机·嵌入式硬件