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

发布于:2025-04-02 ⋅ 阅读:(17) ⋅ 点赞:(0)

目录

一、位传送指令

1、MOV C, bit

2、MOV bit, C

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

二、位变量修改指令

1、CLR(清 0 指令)

2、SETB(置 1 指令)

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

三、位变量逻辑操作指令

1、位变量逻辑与指令 ANL

2、位变量逻辑或指令 ORL

3、位变量取反指令 CPL

4、综合应用示例

四、位条件转移类指令

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

1、JC rel

2、JNC rel

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

1、JB bit, rel

2、JNB bit, rel

3、JBC bit, rel

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


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

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

一、位传送指令

1、MOV C, bit

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

(2)示例代码

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)示例代码

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)示例

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

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

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

(3)示例

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

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

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)示例

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)示例

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)示例

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

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

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)示例

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

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

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

(3)示例

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)示例

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

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

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

(3)示例

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)示例

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

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

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


网站公告

今日签到

点亮在社区的每一天
去签到