51单片机的五类指令(五)——位操作类指令
目录
一、位传送指令
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引脚上连接的LEDACALL DELAY ; 调用延时子程序CLR P1.0 ; 熄灭P1.0引脚上连接的LEDACALL DELAY ; 调用延时子程序SJMP START ; 跳转到START处,循环执行DELAY:MOV R7, #250 ; 外层循环次数
DELAY1:MOV R6, #250 ; 内层循环次数
DELAY2:DJNZ R6, DELAY2 ; 内层循环DJNZ R7, DELAY1 ; 外层循环RETEND
在这个例子中,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引脚状态传送到CANL 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上的LEDSJMP START ; 跳回START继续检测
TURN_ON:SETB P1.1 ; 点亮连接在P1.1上的LEDSJMP START ; 跳回START继续检测
END
这个程序中,持续检测P1.0引脚的状态,若为高电平就点亮LED,若为低电平就熄灭LED。
相关文章:
51单片机的五类指令(五)——位操作类指令
目录 一、位传送指令 1、MOV C, bit 2、MOV bit, C 3、位传送指令的应用场景 二、位变量修改指令 1、CLR(清 0 指令) 2、SETB(置 1 指令) 3、位变量修改指令的应用场景 三、位变量逻辑操作指令 1、位变量逻辑与指令 ANL…...
用python编写poc的流程
目录 一、POC 编写核心流程 二、常用 Python 库与工具 三、POC 框架推荐 四、高级优化技巧 五、安全规范与注意事项 六、实战案例:命令注入漏洞验证 一、POC 编写核心流程 漏洞分析 确定漏洞类型:根据目标特征判断漏洞类型(如 SQL 注入、…...
碰一碰发视频网页版本开发的源码搭建指南
引言 在数字化信息快速传播的时代,近场通信(NFC)技术为信息交互带来了新的便捷方式。通过网页版本实现碰一碰发视频功能,能够让用户在浏览器环境中轻松实现视频分享,拓展了视频传播的途径。本文将详细介绍碰一碰发视频…...
【含文档+PPT+源码】基于Python爬虫二手房价格预测与可视化系统的设计与实现
项目介绍 本课程演示的是一款基于Python爬虫二手房价格预测与可视化系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 带你从零开始部署运行本套系统 该项…...
多台服务器上docker部署 Redis 集群
规划集群节点 确保你的服务器有固定 IP,比如: 172.16.17.100 172.16.17.101 172.16.17.102 每台服务器运行 2 个 Redis 节点,总共 6 个节点,满足 Redis Cluster 最小节点数要求。 2. 在每台服务器上运行 Redis 在每台服务器上执行…...
Redis-16.在Java中操作Redis-Spring Data Redis使用方式-操作有序集合类型的数据
一. 操作有序集合类型的数据 package com.sky.test;import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.redis.core.*;imp…...
针对单台浪潮服务器运行Windows Server 2019和SQL Server的MES系统场景、高效能监控策略(兼顾软硬件健康)
--- ### **一、监控架构设计原则** - **轻量化**:优先使用Windows原生工具和免费方案,避免额外资源消耗 - **关键性聚焦**:仅监控直接影响MES运行的核心指标 - **自动化告警**:异常发生时主动触发通知,无需人工巡检 -…...
Vue Transition组件类名+TailwindCSS
#本文教学结合TailwindCSS实现一个Transition动画的例子# 举例代码: <transition enter-active-class"transition-all duration-300 ease-out"enter-from-class"opacity-0 translate-y-[-10px]"enter-to-class"opacity-100 translate-…...
Anaconda和Pycharm的区别,以及如何选择两者
目录 主要区别详细说明如何选择?Anaconda的使用步骤 主要区别 Anaconda 和 PyCharm 是 Python 开发中常用的两个工具,但它们的定位和功能完全不同。以下是它们的主要区别: 对比项AnacondaPyCharm类型Python 发行版 包管理工具Python 集成开…...
STM32智能手表——任务线程部分
RTOS和LVGL我没学过,但是应该能硬啃这个项目例程 ├─Application/User/Tasks # 用于存放任务线程的函数 │ ├─user_TaskInit.c # 初始化任务 │ ├─user_HardwareInitTask.c # 硬件初始化任务 │ ├─user_RunModeTasks.c…...
SQL命令
一、表的创建 SQL MS Access、MySQL 和 SQL Server 数据类型 | 菜鸟教程 SQL Server 和 MySQL 中的 Date 函数 | 菜鸟教程 1.1、创建表 CREATE TABLE Citys (CityID int PRIMARY KEY,CityName varchar(255) );CREATE TABLE Per (PersonID int PRIMARY KEY, …...
DRM_CLIENT_CAP_UNIVERSAL_PLANES和DRM_CLIENT_CAP_ATOMIC
drmSetClientCap(fd, DRM_CLIENT_CAP_UNIVERSAL_PLANES, 1); drmSetClientCap(fd, DRM_CLIENT_CAP_ATOMIC, 1); 这两行代码用于启用 Linux DRM(Direct Rendering Manager)客户端的两个关键特性,具体作用如下: 1. drmSetClientCap…...
anaconda安装 创建虚拟环境+pycharm中conda环境配置
miniconda下载安装参考以下链接: https://blog.csdn.net/2301_76831056/article/details/143165738?fromshareblogdetail&sharetypeblogdetail&sharerId143165738&sharereferPC&sharesourceweixin_63339973&sharefromfrom_link (注…...
EasyExcel导出导入excel工具类
接上一篇EasyExcel导出导入excel的文章,附上一份完整的工具类代码。对于字体颜色名称,请参考这篇文章。 POI字体颜色 小技巧 类转换用属性拷贝不同类如果有相同属性,则使用反射验证,减少代码量 private List<Person> vali…...
终端SSH连接工具SecureCRT安装和连接Linux
SecureCRT 9.5是一款集终端仿真与加密功能于一身的专业软件,其坚如磐石的安全性、高效的信息传输能力以及高度可定制的会话管理,使得它成为众多用户的首选。该软件不仅支持SSH2、SSH1、Telnet等多种协议,还提供了Relogin、Serial、TAPI、RAW等…...
赛逸展2025“创新引擎”启动:限量席位,点亮科技绿色新征程
当今时代,科技革新与绿色发展已然成为推动社会进步的双引擎。2025第七届亚洲消费电子技术贸易展(赛逸展)敏锐捕捉这一趋势,重磅打造“科技创新专区”,并面向科技、绿色企业吹响限量招募号角。 这个独具特色的专区紧扣…...
Spring的 init-method, @PostConstruct, InitializingBean 对比
Spring的 init-method, PostConstruct, InitializingBean 对比 在Spring框架中,init-method、PostConstruct和InitializingBean都是用于定义Bean初始化后执行逻辑的机制,但它们在实现方式、耦合度、执行顺序及适用场景上有所不同。以下是它们的对比总结…...
Gogs 精简备份与恢复方案(仅SQLite数据库和配置)
一、备份方案设计 1. 备份内容 SQLite数据库文件:/home/git/gogs/data/gogs.db 配置和附件:/home/git/gogs/custom 整个目录 2. 备份策略 每周日凌晨2点执行完整备份 保留最近4周的备份文件 备份存储在独立分区 /backup(使用永久化挂载…...
FPGA实现数码管显示分秒时间
目录 一. verilog实现 二. 烧录验证 三. 结果验证 使用开发板:DE2-115开发板 一. verilog实现 要实现分和秒,需要知道定时器的频率,通过查手册可知,我使用的开发板时钟为50hz,也就是时钟一个周期是2微秒。 5000000…...
读书记录九之《在峡江的转弯处-陈行甲人生笔记》
距离上本读完的书,写读后感有很长一段时间了,中间读了几本书,但都没写点文字,没错,是懒病又犯了。陈行甲这本书,一开始从网络上推荐看到,看之前介绍是一本人物自传的回忆录。我个人对这类贴近的…...
可视化开发:用Qt实现Excel级动态柱状图
Qt柱状图 QtChart 首先我们介绍一下 图表建立的基础:Qt Charts QtChart 是Qt框架的一个模块,专注与提供交互式数据可视化功能 俗话就是 用于用户轻松创建各种类型的图表和图形界面 它包含的图表类型有很多:折线图,饼图&#x…...
从零实现Json-Rpc框架】- 项目实现 - 基于Dispatcher模块的RPC框架
📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...
kubekey -实现懒人一键部署K8S集群
kubekey -实现懒人一键部署K8S集群 操作步骤 官网: https://kubesphere.io/zh/ 一、执行以下命令快速创建一个 Kubernetes 集群。 Master节点 如果您访问 GitHub/Googleapis 受限,请登录 Linux 主机,执行以下命令设置下载区域。 [roottest ~]…...
Android设计模式之模板方法模式
一、定义: 定义一个操作中的算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 二、结构: AbstractClass抽象类:定义算法的骨架,包含模板方法和若干…...
李宏毅机器学习笔记(1)—机器学习基本概念+深度学习基本概念
机器学习基本概念 1、获取模型 步骤 1.1、假定未知函数 带未知参数的函数 1.2、定义损失函数 真实值:label MAE MSE 几率分布,cross-entropy? 1.3、优化 单独考虑一个参数 让损失函数最小,找导数为零的点 单独考虑w,w…...
数字IC后端项目常见问题之streamOut layermap和innovus drc violation
Q1:我需要将Innovus设计GDS导出到Virtuoso,但发现写出GDS的过程会报如下所示的警告。这里写出GDS使用的是Virtuoso (DFII) streamOut mapping文件! Clock Gen模块Routing DRC,Timing分析及解决 streamOut tease.gds2 -mapFile cd…...
短剧系统开发动漫短剧系统源码开发上线小程序app教程
一、市场规模与用户增长:突破677亿,Z世代成主力 整体扩张 2025年短剧市场预计同比增长15%,规模达677.9亿元,用户规模6.62亿(占网民59.7%)。动漫短剧作为细分领域,增速显著受益于二次元文化渗透&…...
太阳能高杆路灯:照亮未来的新光
在全球能源转型进程加速以及可持续发展理念日益深入人心的背景下,太阳能高杆路灯作为融合新能源技术、智能控制技术与多功能集成特性的创新产品,正逐步革新传统路灯的格局。其不仅有效解决了传统路灯对电网供电的依赖问题,更为城市及乡村的照…...
《C++Linux编程进阶:从0实现muduo 》-第8讲.C++面试如何高效获取线程ID
章节重点 在C面试时,经常被问到如果高效获取线程ID,但不少同学都不知道如何回答。 重点是通过__thread关键字。 重点内容 视频讲解:《CLinux编程进阶:从0实现muduo C网络框架系列》-第8讲. C面试如何高效获取线程ID 测试获取线…...
【Tauri2】011——菜单menu(2)
前言 前面简单地创建了菜单,接下来就来试试菜单中的action Rust中菜单项注册action AppHandle in tauri - Rusthttps://docs.rs/tauri/2.4.0/tauri/struct.AppHandle.html#method.on_menu_event这就需要用到App或者AppHandle中的方法on_menu_event #[must_use] …...
