微机课设--汇编语言在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.hqwc.cn/news/218995.html

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

相关文章

win10+ vs2017用cmake编译geos3.5.1

参考教程:使用CMake编译Geos3.5.0_cmake geos-CSDN博客 注意事项: 报错:在使用cmake编译geos-3.5.1的时候,会出现报错: CMake Error at CMakeLists.txt:330 (include): include could not find load file GenerateSou…

makefile项目构建

makefile项目构建 OVERVIEW makefile项目构建1.概念2.make选项3.makefile语法(1)基本语法(2)系统与自定变量(3)常用函数(4)模式匹配与伪目标 4.makefile编译流程(1&#…

【模板】KMP算法笔记

练习链接:【模板】KMP - 洛谷 题目: 输入 ABABABC ABA 输出 1 3 0 0 1 思路: 根据题意,用到的是KMP算法,KMP算法思想是通过一个一个匹配首字母的原理进行整个匹配效果,当某个首字母不匹配的时候&#x…

哲学家就餐问题

文章目录: 问题描述及分析一次错误的尝试解决方案一解决方案二 问题描述及分析 哲学家就餐问题规定了有5位哲学家正在进行思考和就餐两种活动。用餐在一个桌子上进行,桌子上面有5个盘子和5个叉子,按照循环的方式分配。 问题的约束条件&#…

Linux学习笔记之六(进程之间的管道通信和信号处理)

目录 1、管道通信1.1、无名管道1.1、有名管道 2、信号处理2.1、信号的种类和发送2.2、信号的接受和处理 1、管道通信 管道通信是一个设备中进程与进程之间通信的一种方式,分为无名管道和有名管道两种。前者只能用于有亲缘关系的进程之间的通信,如父子进…

扫描条形码到电脑:Barcode to pc 4.6.3 Crack

像专业人士一样使用条形码将条形码发送到 PC 排名第一的智能手机扫描应用程序 将条形码即时发送到计算机程序并自动执行任务的最简单方法 受到全球 500,000 多名用户的信赖 条形码到 PC:Wi-Fi 扫描仪应用程序,条码到 PC:适用于 Android 和 i…

WorkPlus即时通讯软件,以自主安全为底座,连接工作的一切

在当今竞争激烈的商业环境中,中大型企业对于移动办公平台的需求越来越迫切。在众多可选的平台中,WorkPlus凭借其高性价比和针对中大型企业的特色功能,成为了许多企业的首选。本文将为各位读者深度解析WorkPlus私有化部署的优势,带…

vue+elementui如何实现在表格中点击按钮预览图片?

效果图如上&#xff1a; 使用el-image-viewer 重点 &#xff1a; 引入 import ElImageViewer from "element-ui/packages/image/src/image-viewer"; <template><div class"preview-table"><el-table border :data"tableData" …

HashMap的实现原;HashMap的工作原理;HashMap存储结构; HashMap 构造函数

文章目录 说一下HashMap的实现原理(非常重要)①HashMap的工作原理HashMap存储结构常用的变量HashMap 构造函数tableSizeFor() put()方法详解hash()计算原理resize() 扩容机制get()方法为什么HashMap链表会形成死循环 HashMap是我们在工作中使用到存储数据特别频繁的数据结构&am…

java容器

cow容器 copy on write 又被成为写时复制(读写分离)容器, 原理就是: 如果向一个数组中添加元素的时候,会将原来的数组复制一份为新的数组,原来的数组不会动,负责读处理,然后在新的数组中进行添加操作,添加完后,将新数组的地址,赋值给原来数组的地址 这种设计的好处是什么呢?…

C语言进阶之笔试题详解(1)

引言&#xff1a; 对指针知识进行简单的回顾&#xff0c;然后再完成笔试题。 ✨ 猪巴戒&#xff1a;个人主页✨ 所属专栏&#xff1a;《C语言进阶》 &#x1f388;跟着猪巴戒&#xff0c;一起学习C语言&#x1f388; 目录 引言&#xff1a; 知识简单回顾 指针是什么 指针变…

JDK、JRE、JVM的特点和关联

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