微机课设--汇编语言在51单片机上写一个四位十进制加法器

代码如下

  

KEYVAL EQU 30HKEYTM EQU 31HKEYSCAN EQU 32HDAT  EQU 33HSCANLED EQU 37HS_DAT EQU 38HD_DAT EQU 39HR_DATL EQU 3AHR_DATH EQU 3BH
CALFLAG EQU 3CHFLAG BIT 00HORG 0000HLJMP MAINORG 000BHLJMP T0ISRORG 0030HMAIN:MOV SP,#5FHMOV TMOD,#01HMOV TH0,#0D8HMOV TL0,#0F0HMOV KEYVAL,#0MOV P2,#00HMOV SCANLED,#0MOV 33H,#0HMOV 34H,#0HMOV 35H,#0HMOV 36H,#0HMOV S_DAT,#0MOV D_DAT,#0CLR FLAGSETB EASETB ET0SETB TR0LOOP:LCALL KEYSELMOV A,KEYVALCJNE A,#0FFH,LOOP1SJMP LOOPLOOP1:CJNE A,#11,LOOP2 ;“=”MOV A,33HMOV B,#10MUL ABADD A,34HMOV D_DAT,ALCALL DEALDATLCALL HB2MOV A,R5ANL A,#0FHMOV 34H,AMOV A,R5SWAP AANL A,#0FHMOV 33H,AMOV A,R4ANL A,#0FHMOV 36H,AMOV A,R4SWAP AANL A,#0FHMOV 35H,ASJMP LOOPLOOP2:CJNE A,#15,LOOP3 ;“+”LCALL GETDATSJMP LOOPLOOP3:CJNE A,#14,LOOP4 ;“-”MOV CALFLAG,#1LCALL GETDATSJMP LOOPLOOP4:CJNE A,#13,LOOP5 ;“*”MOV CALFLAG,#2LCALL GETDATSJMP LOOPLOOP5:CJNE A,#12,LOOP6 ;"/"MOV CALFLAG,#3LCALL GETDATSJMP LOOPLOOP6:CJNE A,#10,LOOP7  ;数字键LOOP7:JC LOOP8LJMP LOOPLOOP8:MOV 33H,34HMOV 34H,KEYVALLJMP LOOP;------------------HB2:MOV R6,R_DATHMOV R7,R_DATLCLR  A   ;BCD码初始化MOV  R3,AMOV  R4,AMOV  R5,AMOV  R2,#10H   ;转换双字节十六进制整数HB3:MOV  A,R7   ;从高端移出待转换数的一位到 CY 中RLC  AMOV  R7,AMOV  A,R6RLC  AMOV  R6,AMOV  A,R5   ;BCD码带进位自身相加,相当于乘2ADDC  A,R5DA  A   ;十进制调整MOV  R5,AMOV  A,R4ADDC  A,R4DA  AMOV  R4,AMOV  A,R3ADDC  A,R3MOV  R3,A   ;双字节十六进制数的万位数不超过6,不用调整DJNZ  R2,HB3   ;处理完16bitRET;------------------GETDAT:MOV A,33HMOV B,#10MUL ABADD A,34HMOV S_DAT,AMOV 33H,#0MOV 34H,#0MOV 35H,#0MOV 36H,#0RET;------------------DEALDAT:MOV A,CALFLAGJNZ DEAL01DEAL00:    ;+MOV A,S_DATADD A,D_DATMOV R_DATL,ACLR AADDC A,#0MOV R_DATH,ARETDEAL01:    ;=DEC AJNZ DEAL02CLR CMOV A,S_DATSUBB A,D_DATMOV R_DATL,ASUBB A,#0MOV R_DATH,ARETDEAL02:    ;*DEC AJNZ DEAL03MOV A,S_DATMOV B,D_DATMUL ABMOV R_DATL,AMOV R_DATH,BRETDEAL03:    ;/MOV A,S_DATMOV B,D_DATDIV ABMOV R_DATL,AMOV R_DATH,#0RET;------------------KEYSEL: MOV KEYVAL,#0MOV KEYSCAN,#0EFHLCALL GETKEYMOV A,KEYTMJZ KEYS1MOV KEYVAL,ASJMP KEYRTNKEYS1: MOV KEYSCAN,#0DFHLCALL GETKEYMOV A,KEYTMJZ KEYS2CLR CADD A,#4MOV KEYVAL,ASJMP KEYRTNKEYS2: MOV KEYSCAN,#0BFHLCALL GETKEYMOV A,KEYTMJZ KEYS3CLR CADD A,#8MOV KEYVAL,ASJMP KEYRTNKEYS3: MOV KEYSCAN,#7FHLCALL GETKEYMOV A,KEYTMJZ KEYRTNCLR CADD A,#12MOV KEYVAL,AKEYRTN: LCALL CHGKEYRET;--------------------GETKEY: MOV KEYTM,#0MOV A,KEYSCANMOV P3,ANOPMOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEYMOV R2,#10LCALL DELAYMOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEYMOV A,P3ANL A,#0FHMOV R7,ASF:MOV A,P3ANL A,#0FHXRL A,#0FHJNZ SFMOV A,R7CJNE A,#0EH,NK1MOV KEYTM,#1SJMP NOKEYNK1:CJNE A,#0DH,NK2MOV KEYTM,#2SJMP NOKEYNK2:CJNE A,#0BH,NK3MOV KEYTM,#3SJMP NOKEYNK3:CJNE A,#07H,NOKEYMOV KEYTM,#4NOKEY: RET;--------------------DELAY:MOV R3,#50DELAY1:MOV R4,#100DJNZ R4,$DJNZ R3,DELAY1DJNZ R2,DELAYRET;--------------------T0ISR:PUSH ACCCLR TR0MOV TH0,#0D8HMOV TL0,#0F0HSETB TR0MOV DPTR,#LEDTABT000:      ;数字显示MOV R0,#DATMOV A,SCANLEDADD A,R0MOV R0,AMOV A,SCANLEDJNZ T001MOV P2,#01HSJMP T0DIST001:DEC AJNZ T002MOV P2,#02HSJMP T0DIST002:DEC AJNZ T003MOV P2,#04HSJMP T0DIST003:MOV P2,#08HT0DIS:MOV A,@R0MOVC A,@A+DPTR;  CPL AMOV P0,AINC SCANLEDMOV A,SCANLEDANL A,#03HMOV SCANLED,APOP ACCRETI;--------------------CHGKEY:MOV A,KEYVALJZ KV16DEC AJNZ KV01MOV KEYVAL,#7RETKV01:DEC AJNZ KV02MOV KEYVAL,#4RETKV02:DEC AJNZ KV03MOV KEYVAL,#1RETKV03:DEC AJNZ KV04MOV KEYVAL,#10RETKV04:DEC AJNZ KV05MOV KEYVAL,#8RETKV05:DEC AJNZ KV06MOV KEYVAL,#5RETKV06:DEC AJNZ KV07MOV KEYVAL,#2RETKV07:DEC AJNZ KV08MOV KEYVAL,#0RETKV08:DEC AJNZ KV09MOV KEYVAL,#9RETKV09:DEC AJNZ KV10MOV KEYVAL,#6RETKV10:DEC AJNZ KV11MOV KEYVAL,#3RETKV11:DEC AJNZ KV12MOV KEYVAL,#11 ;=RETKV12:DEC AJNZ KV13MOV KEYVAL,#12 ;/RETKV13:DEC AJNZ KV14MOV KEYVAL,#13 ;*RETKV14:DEC AJNZ KV15MOV KEYVAL,#14 ;-RETKV15:DEC AJNZ KV16MOV KEYVAL,#15 ;+RETKV16:MOV KEYVAL,#0FFHRET;--------------------LEDTAB:DB 0C0H ;"0" 00HDB 0F9H ;"1" 01HDB 0A4H ;"2" 02HDB 0B0H ;"3" 03HDB 99H ;"4" 04HDB 92H ;"5" 05HDB 82H ;"6" 06HDB 0F8H ;"7" 07HDB 80H ;"8" 08HDB 90H ;"9" 09HDB 88H ;"A" 0AHDB 83H ;"B" 0BHDB 0C6H ;"C" 0CHDB 0A1H ;"D" 0DHDB 86H ;"E" 0EHDB 8EH ;"F" 0FHDB 0FFH ;" " 10H;--------------------END

proteus仿真测试

ps:

我对汇编也是只只了解一点点,这里的代码和仿真都是看贴吧大佬的,我只是做一下整合

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/170853.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java中BigDecimal的介绍及使用(二)

系列文章目录 java中BigDecimal的介绍及使用,BigDecimal格式化,BigDecimal常见问题java中BigDecimal的介绍及使用(二) 文章目录 系列文章目录一、前言二、BigDecimal提供的方法2.1、stripTrailingZeros() 去除小数尾部所有的02.2、int signum()2.3、int…

Linux网络——网络层

目录 一.IP协议(IPv4) 二.子网划分 三.特殊的IP地址 四.IP地址的数量限制 五.私有IP地址和公网IP地址 六.路由 七.分片 一.IP协议(IPv4) IP协议:提供一种能力使得数据从一个主机发送到另一个主机的能力。 TCP协…

深度学习第1天:深度学习入门-Keras与典型神经网络结构

☁️主页 Nowl 🔥专栏《机器学习实战》 《机器学习》 📑君子坐而论道,少年起而行之 文章目录 神经网络 介绍 结构 基本要素 Keras 介绍 导入 定义网络 模型训练 前馈神经网络 特点 常见类型 代码示例 反馈神经网络 特点 …

JDK、JRE、JVM的特点和关联

Java 的三个重要的概念是 JDK(Java Development Kit)、JRE(Java Runtime Environment)和 JVM(Java Virtual Machine)。它们之间有着密切的关联,同时又有不同的职责和特点。 JDK(Java…

laravel实现发送邮件功能

Laravel提供了简单易用的邮件发送功能,使用SMTP、Mailgun、Sendmail等多种驱动程序,以及模板引擎将邮件内容进行渲染。 1.在项目目录.env配置email信息 MAIL_MAILERsmtp MAIL_HOSTsmtp.qq.com MAIL_PORT465 MAIL_FROM_ADDRESSuserqq.com MAIL_USERNAME…

【代码】基于量子粒子群算法(QPSO)优化LSTM的风电、负荷等时间序列预测算法matlab

程序名称:基于量子粒子群算法(QPSO)优化LSTM的风电、负荷等时间序列预测算法 实现平台:matlab 代码简介:代码是基于QPSO-LSTM的负荷、光伏、风电等时间序列预测,MATLAB编写。包含LSTM(长短时记…

2、用命令行编译Qt程序生成可执行文件exe

一、创建源文件 1、新建一个文件夹&#xff0c;并创建一个txt文件 2、重命名为main.cpp 3、在main.cpp中添加如下代码 #include <QApplication> #include <QDialog> #include <QLabel> int main(int argc, char *argv[]) { QApplication a(argc, argv); QDi…

(附源码)SSM环卫人员管理平台 计算机毕设36412

目 录 摘要 1 绪论 1.1背景及意义 1.2国内外研究概况 1.3研究内容 1.4 ssm框架介绍 1.5论文结构与章节安排 2 环卫人员管理平台系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1数据增加流程 2.2.2数据修改流程 2.2.3数据删除流程 2.3 系统功能分析 2.3.1 功能性…

C++二分查找:统计点对的数目

本题其它解法 C双指针算法&#xff1a;统计点对的数目 本周推荐阅读 C二分算法&#xff1a;得到子序列的最少操作次数 本文涉及的基础知识点 二分查找算法合集 题目 给你一个无向图&#xff0c;无向图由整数 n &#xff0c;表示图中节点的数目&#xff0c;和 edges 组成…

Proteus仿真--基于PG12864LCD设计的指针式电子钟

本文介绍基于PG12864LCD设计的指针式电子钟&#xff08;完整仿真源文件及代码见文末链接&#xff09; 仿真图如下 本设计中时间芯片选用DS1302芯片&#xff0c;液晶选用PG12864LCD模块&#xff0c;按键K1-K3&#xff0c;K1用于时分选择&#xff0c;K2用于调整功能&#xff0c…

Docker Swarm总结+CI/CD Devops、gitlab、sonarqube以及harbor的安装集成配置(3/4)

博主介绍&#xff1a;Java领域优质创作者,博客之星城市赛道TOP20、专注于前端流行技术框架、Java后端技术领域、项目实战运维以及GIS地理信息领域。 &#x1f345;文末获取源码下载地址&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb;…

C语言指针——从底层原理到应用

参考&#xff1a;C语言指针-从底层原理到花式技巧&#xff0c;用图文和代码帮你讲解透彻 目录 一、前言二、变量与指针的本质1. 内存地址2. 32位与64位系统3. 变量4. 指针变量5. 操作指针变量5.1 指针变量自身的值5.2 获取指针变量所指向的数据5.3 以什么样的数据类型来使用/解…

Ceph----RBD块存储的使用:详细实践过程实战版

RBD 方式的 工作 流程&#xff1a; 1、客户端创建一个pool&#xff0c;并指定pg数量&#xff0c;创建 rbd 设备并map 到文件系统&#xff1b; 2、用户写入数据&#xff0c;ceph进行对数据切块&#xff0c;每个块的大小默认为 4M&#xff0c;每个 块名字是 object序号&#xff…

分布式篇---第七篇

系列文章目录 文章目录 系列文章目录前言一、如何将长链接转换成短链接,并发送短信?二、长链接和短链接如何互相转换?三、长链接和短链接的对应关系如何存储?四、如何提高系统的并发能力?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一…

Java中的异常语法知识居然这么好玩!后悔没有早点学习

学习异常后&#xff0c;发现异常的知识是多么的吸引人&#xff01;不仅可以用来标记错误&#xff0c;还可以自己定义一个异常&#xff0c;用来实现自己想完成的业务逻辑&#xff0c;接下来一起去学习吧 目录 一、异常的概念及体系结构 1.异常的概念 2.异常的体系结构 3.异常…

BUUCTF [HBNIS2018]低个头 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 得到的 flag 请包上 flag{} 提交。来源&#xff1a; https://github.com/hebtuerror404/CTF_competition_warehouse_2018 密文&#xff1a; 下载附件&#xff0c;得到一个.txt文件。 解题思路&#xff1a; 1、低头…

处理视频的新工具:UniFab 2.0.0.4 Crack

UniFab这是一个用于处理视频的新工具&#xff0c;可以帮助您像专业人士一样获得结果&#xff0c;事实上&#xff0c;它可以确保在项目的任何设备上完美播放&#xff0c;所以&#xff0c;来认识一下 UniFab - 一款功能强大且方便的视频编辑器和转换器&#xff0c;但另一方面&…

不同品牌的手机可以则哪一个你投屏到电视?

如果你使用AirDroid Cast的TV版&#xff0c;苹果手机可以通过airPlay或无线投屏方式&#xff0c;将屏幕同步到电视屏幕&#xff1b;多个品牌的安卓手机可以通过无线投屏投射到电视。而且无线投屏不限制距离&#xff0c;即使是远程投屏也可以实现。 打开AirDroid Cast的TV版&…

【C++干货铺】优先队列 | 仿函数

个人主页点击直达&#xff1a;小白不是程序媛 C系列专栏&#xff1a;C干货铺 代码仓库&#xff1a;Gitee 目录 优先队列&#xff08;priority_queue &#xff09;的介绍和使用 priority_queue的介绍 priority_queue的使用 大堆 小堆 priority_queue的模拟实现 仿…

03_MySQL基本SQL语句讲解

#课程目标 能够创建、删除数据表能够对表里的数据记录进行增加、删除、修改、查询操作能够创建、删除用户能够给用户授权并回收权限了解delete和truncate语句的区别 #一、数据库基本操作 ##1、查看数据库相关信息 mysql> show databases; 查看所有数据库 mysql>…