当前位置: 首页 > news >正文

续上一篇文章在0-99自动计数中再加入程序复位功能(汇编语言,proteus,AT89C51中断的使用)

1.电路原理图(Proteus仿真)

2.中断按钮

之前的电路采用复位电路用于是实现复位功能,现在在原来的电路原理图中新增了一颗按钮BUTTON-2用于编程实现复位功能

按钮BUTTON-2采用中断方式实现复位,其与 外部中断0(P3.2接口)引脚接通

按钮BUTTON-1采用中断方式实现0-99计数器的开始与暂停

3.复位按钮思想

(1) 如何在自动计数期间用查询实现复位

此效果为复位后重新计数不会和复位电路一样暂停计数

因为0-99自动计数的主程序放在了中断程序(外部中断1)里面,所以想要在自动计数时实现复位可以采用查询中断标志位的方式实现如下图:

LOP: ;自动计数主程序 MOV A,R4 ;用减法判断个位计数是否满9 SUBB A,#09H ……………… TIME: JB IE0,CLRS ;判断中断0标志位用于复位 ……………… CLRS: ;计数器未暂停时的复位程序 MOV R4,#00 ;个位计数器清零 MOV R3,#00 ;十位计数器清零 CLR IE0 ;中断0标志位释放 MOV P0,#3FH ;十位晶体管初始化 LJMP LOP ………………

JB IE0 判断外部中断0是否发出中断请求(置1), 是则执行CLRS清零否则继续计数

之所以采用查询方式其一是因为计数程序本身在中断程序内,不会响应同级中断,要使用中断嵌套中断就只能修改中断优先级,难度较大。其二:不采用查询接布尔值方式,是因为其响应不灵敏,采用查询中断标志位响应速度快

(2) 如何在暂停计数时实现复位

主程序在暂停计数后会跳出中断继续等待中断指令

此时上阶段的中断已经结束,可以使用中断方式实现暂停时的复位功能, 基本就结构如下:

……………… ORG 0003H ;中断方式0起始地址 LJMP INT_0 ……………… INT_0: ;在自动计数器暂停时实现复位的中断程序 MOV R4,#00 ;计数器清零 MOV R3,#00 MOV P0,#3FH ;数码管初始化 MOV P2,#3FH RETI ;中断返回

4.汇编语言代码及注释

ORG 0000H LJMP MAIN ORG 0003H ;中断方式0起始地址 LJMP INT_0 ORG 0013H ;中断方式1起始地址 LJMP INT_1 ORG 0100H MAIN: MOV DPTR,#TAP ;赋值DPTR查表首地址 MOV P0,#03FH ;数码管初始化 MOV P2,#03FH ;数码管初始化 MOV R4,#00H ;计数初始化 MOV R3,#00H ;计数初始化 MOV R1,#200 ;计时器初始化 SETB IT1 ;开中断1 SETB EA ;开总中断 SETB EX1 ;设置中断0触发方式 SETB IT0 ;开中断0 SETB EX0 ;设置中断0触发方式 MOV SP,#60H ;堆栈初始化 SJMP $ ;等待中断 INT_1: ;中断主程序 CLR IE1 ;清楚中断INT_1标志位为暂停计数做准备 LOP: ;自动计数主程序 MOV A,R4 ;用减法判断个位计数是否满9 SUBB A,#09H JZ LOOP ;个位计数满9跳转清零程序 MOV A,R4 ;个位查表赋值 MOVC A,@A+DPTR MOV P2,A ;个位数码管赋值 INC R4 ;个位计数+1 TIME: JB IE0,CLRS ;判断中断0标志位用于复位 JB IE1,LMP ;判断中断1标志位用于暂停计数 MOV R2,#250 ;延时程序0.3S左右 DJNZ R2,$ MOV R2,#250 DJNZ R2,$ DJNZ R1,TIME LJMP LUP ;跳转LUP LOOP: MOV R4,#00H ;个位计数器清零 INC R3 ;十位计数器+1 MOV A,R3 ;用减法判断十位计数是否满10 SUBB A,#0AH JZ LUU ;满10跳转请零程序 MOV A,R3 ;否则查表赋值十位数码管 MOVC A,@A+DPTR MOV P0,A LJMP LUP ;跳转LUP LUU: MOV R3,#00H ;十位计数器清零 MOV A,R3 ;重新查表赋值十位数码管 MOVC A,@A+DPTR MOV P0,A SJMP LUP LUP: LJMP LOP ;跳转主程序继续计数 CLRS: ;计数器未暂停时的复位程序 MOV R4,#00 ;个位计数器清零 MOV R3,#00 ;十位计数器清零 CLR IE0 ;中断0标志位释放 MOV P0,#3FH ;十位晶体管初始化 LJMP LOP LMP: CLR IE1 NOP RETI INT_0: ;在自动计数器暂停时实现复位的中断程序 MOV R4,#00 ;计数器清零 MOV R3,#00 MOV P0,#3FH ;数码管初始化 MOV P2,#3FH RETI ;中断返回 TAP:DB 3FH,6H,5BH,4FH,66H,6DH,7DH,7H,7FH,6FH;晶体管编码表 END
http://www.jsqmd.com/news/778575/

相关文章:

  • setup-cowork:把 Cowork 上手从「逛 marketplace」翻成「报岗位」
  • 信奥赛-二进制学习
  • 初创公司如何利用多模型选型平衡效果与预算
  • WinCC组态没问题,数据就是存不进U盘?手把手教你诊断西门子触摸屏USB接口‘假死’
  • 私有化AI对话应用GeekChat部署指南:从架构解析到实战配置
  • Spring Boot与Angular全栈预约系统实战:环境搭建到联调部署
  • 桌面应用Docker化实战:解决环境依赖与分发难题
  • 2026最新大数据技术学校/民办学校/大专学校推荐!华中优质院校权威榜单发布,实力靠谱湖南衡阳等地院校助力高质量升学就业 - 十大品牌榜
  • LogCabin数据模型揭秘:Tree结构在分布式存储中的应用
  • 软件定义无线电与认知无线电技术解析及应用
  • 科研小白必看:手把手教你用ChatGPT润色Response to reviewer(附中英文模板)
  • 2026年佛山打圈机厂家口碑推荐榜:佛山数控打圈机、佛山空心管打圈机、佛山钢带打圈机、佛山桶箍抱箍卡箍打圈机、佛山弹簧打圈机选择指南 - 海棠依旧大
  • Go语言CatClaw爬虫框架:模块化设计与实战应用解析
  • 企业网络改造实录:用一台H3C防火墙替换老旧路由器,实现固定IP上网+内网DHCP
  • 从零构建个性化AI智能体:基于开源框架的实践指南
  • Next.js实战:构建高性能疫情信息平台的技术架构与工程实践
  • r 看排队,cs 看风暴,nvcswch 看锁,wa 看磁盘,in 看网络 - 小镇
  • containers-from-scratch性能优化:容器启动速度提升的5个关键点
  • YOLOv11改进 | 主干/Backbone篇 | 目标检测网络EfficientNetV1均衡缩放网络改进特征提取层 (适配yolov11全系列N、S、M、L、X)
  • Agent 记忆系统也需要 GC:拆解 Cowork 的 consolidate-memory
  • MiniMax-01系列大模型:超长上下文与多模态能力深度解析与部署指南
  • YOLOv11改进 | 特殊场景检测篇 | 低照度增强网络PE-YOLO改进主干(改进暗光条件下的物体检测模型,全网独家首发改进)
  • ISM波段开关模式功率放大器设计与优化
  • Office激活命令ospp.vbs全解析:从/dstatus到/act,每个参数到底怎么用?(避坑0xC004F074)
  • 大语言模型逻辑推理能力测试与优化方案
  • 告别手动gcc!VSCode配置tasks.json一键编译C/C++多文件项目(含三子棋/扫雷实战)
  • nvcswch - 小镇
  • 基于Next.js 14与Prisma的全栈电商项目实战解析
  • YOLOv11改进 | 特殊场景检测篇 | 适用多种复杂场景的全能图像修复网络AirNet助力yolov11检测(全网独家首发)
  • 告别条件构造器!MyBatis-Plus 3.x 用 LambdaQueryChainWrapper 一行代码搞定复杂查询