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

news2024/11/29 8:53:31

代码如下

  

KEYVAL EQU 30H

KEYTM EQU 31H

KEYSCAN EQU 32H

DAT  EQU 33H

SCANLED EQU 37H

S_DAT EQU 38H

D_DAT EQU 39H

R_DATL EQU 3AH

R_DATH EQU 3BH
CALFLAG EQU 3CH

FLAG BIT 00H

ORG 0000H

LJMP MAIN

ORG 000BH

LJMP T0ISR

ORG 0030H

MAIN:

  MOV SP,#5FH

  MOV TMOD,#01H

  MOV TH0,#0D8H

  MOV TL0,#0F0H

  MOV KEYVAL,#0

  MOV P2,#00H

  MOV SCANLED,#0

  MOV 33H,#0H

  MOV 34H,#0H

  MOV 35H,#0H

  MOV 36H,#0H

  MOV S_DAT,#0

  MOV D_DAT,#0

  CLR FLAG

  SETB EA

  SETB ET0

  SETB TR0

LOOP:

  LCALL KEYSEL

  MOV A,KEYVAL

  CJNE A,#0FFH,LOOP1

  SJMP LOOP

LOOP1:

  CJNE A,#11,LOOP2 ;“=”

  MOV A,33H

  MOV B,#10

  MUL AB

  ADD A,34H

  MOV D_DAT,A

  LCALL DEALDAT

  LCALL HB2

  MOV A,R5

  ANL A,#0FH

  MOV 34H,A

  MOV A,R5

  SWAP A

  ANL A,#0FH

  MOV 33H,A

  MOV A,R4

  ANL A,#0FH

  MOV 36H,A

  MOV A,R4

  SWAP A

  ANL A,#0FH

  MOV 35H,A

  SJMP LOOP

LOOP2:

  CJNE A,#15,LOOP3 ;“+”

  LCALL GETDAT

  SJMP LOOP

LOOP3:

  CJNE A,#14,LOOP4 ;“-”

  MOV CALFLAG,#1

  LCALL GETDAT

  SJMP LOOP

LOOP4:

  CJNE A,#13,LOOP5 ;“*”

  MOV CALFLAG,#2

  LCALL GETDAT

  SJMP LOOP

LOOP5:

  CJNE A,#12,LOOP6 ;"/"

  MOV CALFLAG,#3

  LCALL GETDAT

  SJMP LOOP

LOOP6:

  CJNE A,#10,LOOP7  ;数字键

LOOP7:

  JC LOOP8

  LJMP LOOP

LOOP8:

  MOV 33H,34H

  MOV 34H,KEYVAL

  LJMP LOOP

;------------------

HB2:

  MOV R6,R_DATH

  MOV R7,R_DATL

  CLR  A   ;BCD码初始化

  MOV  R3,A

  MOV  R4,A

  MOV  R5,A

  MOV  R2,#10H   ;转换双字节十六进制整数

HB3:

  MOV  A,R7   ;从高端移出待转换数的一位到 CY 中

  RLC  A

  MOV  R7,A

  MOV  A,R6

  RLC  A

  MOV  R6,A

  MOV  A,R5   ;BCD码带进位自身相加,相当于乘2

  ADDC  A,R5

  DA  A   ;十进制调整

  MOV  R5,A

  MOV  A,R4

  ADDC  A,R4

  DA  A

  MOV  R4,A

  MOV  A,R3

  ADDC  A,R3

  MOV  R3,A   ;双字节十六进制数的万位数不超过6,不用调整

  DJNZ  R2,HB3   ;处理完16bit

  RET

;------------------

GETDAT:

  MOV A,33H

  MOV B,#10

  MUL AB

  ADD A,34H

  MOV S_DAT,A

  MOV 33H,#0

  MOV 34H,#0

  MOV 35H,#0

  MOV 36H,#0

  RET

;------------------

DEALDAT:

  MOV A,CALFLAG

  JNZ DEAL01

DEAL00:    ;+

  MOV A,S_DAT

  ADD A,D_DAT

  MOV R_DATL,A

  CLR A

  ADDC A,#0

  MOV R_DATH,A

  RET

DEAL01:    ;=

  DEC A

  JNZ DEAL02

  CLR C

  MOV A,S_DAT

  SUBB A,D_DAT

  MOV R_DATL,A

  SUBB A,#0

  MOV R_DATH,A

  RET

DEAL02:    ;*

  DEC A

  JNZ DEAL03

  MOV A,S_DAT

  MOV B,D_DAT

  MUL AB

  MOV R_DATL,A

  MOV R_DATH,B

  RET

DEAL03:    ;/

  MOV A,S_DAT

  MOV B,D_DAT

  DIV AB

  MOV R_DATL,A

  MOV R_DATH,#0

  RET

;------------------

KEYSEL: 

  MOV KEYVAL,#0

  MOV KEYSCAN,#0EFH

  LCALL GETKEY

  MOV A,KEYTM

  JZ KEYS1

  MOV KEYVAL,A

  SJMP KEYRTN

KEYS1: 

  MOV KEYSCAN,#0DFH

  LCALL GETKEY

  MOV A,KEYTM

  JZ KEYS2

  CLR C

  ADD A,#4

  MOV KEYVAL,A

  SJMP KEYRTN

KEYS2: 

  MOV KEYSCAN,#0BFH

  LCALL GETKEY

  MOV A,KEYTM

  JZ KEYS3

  CLR C

  ADD A,#8

  MOV KEYVAL,A

  SJMP KEYRTN

KEYS3: 

  MOV KEYSCAN,#7FH

  LCALL GETKEY

  MOV A,KEYTM

  JZ KEYRTN

  CLR C

  ADD A,#12

  MOV KEYVAL,A

KEYRTN: 

  LCALL CHGKEY

  RET

;--------------------

GETKEY: 

  MOV KEYTM,#0

  MOV A,KEYSCAN

  MOV P3,A

  NOP

  MOV A,P3

  ANL A,#0FH

  XRL A,#0FH

  JZ NOKEY

  MOV R2,#10

  LCALL DELAY

  MOV A,P3

  ANL A,#0FH

  XRL A,#0FH

  JZ NOKEY

  MOV A,P3

  ANL A,#0FH

  MOV R7,A

SF:

  MOV A,P3

  ANL A,#0FH

  XRL A,#0FH

  JNZ SF

  MOV A,R7

  CJNE A,#0EH,NK1

  MOV KEYTM,#1

  SJMP NOKEY

NK1:

  CJNE A,#0DH,NK2

  MOV KEYTM,#2

  SJMP NOKEY

NK2:

  CJNE A,#0BH,NK3

  MOV KEYTM,#3

  SJMP NOKEY

NK3:

  CJNE A,#07H,NOKEY

  MOV KEYTM,#4

NOKEY: RET

;--------------------

DELAY:

  MOV R3,#50

DELAY1:

  MOV R4,#100

  DJNZ R4,$

  DJNZ R3,DELAY1

  DJNZ R2,DELAY

  RET

;--------------------

T0ISR:

  PUSH ACC

  CLR TR0

  MOV TH0,#0D8H

  MOV TL0,#0F0H

  SETB TR0

  MOV DPTR,#LEDTAB

T000:      ;数字显示

  MOV R0,#DAT

  MOV A,SCANLED

  ADD A,R0

  MOV R0,A

  MOV A,SCANLED

  JNZ T001

  MOV P2,#01H

  SJMP T0DIS

T001:

  DEC A

  JNZ T002

  MOV P2,#02H

  SJMP T0DIS

T002:

  DEC A

  JNZ T003

  MOV P2,#04H

  SJMP T0DIS

T003:

  MOV P2,#08H

T0DIS:

  MOV A,@R0

  MOVC A,@A+DPTR

;  CPL A

  MOV P0,A

  INC SCANLED

  MOV A,SCANLED

  ANL A,#03H

  MOV SCANLED,A

  POP ACC

  RETI

;--------------------

CHGKEY:

  MOV A,KEYVAL

  JZ KV16

  DEC A

  JNZ KV01

  MOV KEYVAL,#7

  RET

KV01:

  DEC A

  JNZ KV02

  MOV KEYVAL,#4

  RET

KV02:

  DEC A

  JNZ KV03

  MOV KEYVAL,#1

  RET

KV03:

  DEC A

  JNZ KV04

  MOV KEYVAL,#10

  RET

KV04:

  DEC A

  JNZ KV05

  MOV KEYVAL,#8

  RET

KV05:

  DEC A

  JNZ KV06

  MOV KEYVAL,#5

  RET

KV06:

  DEC A

  JNZ KV07

  MOV KEYVAL,#2

  RET

KV07:

  DEC A

  JNZ KV08

  MOV KEYVAL,#0

  RET

KV08:

  DEC A

  JNZ KV09

  MOV KEYVAL,#9

  RET

KV09:

  DEC A

  JNZ KV10

  MOV KEYVAL,#6

  RET

KV10:

  DEC A

  JNZ KV11

  MOV KEYVAL,#3

  RET

KV11:

  DEC A

  JNZ KV12

  MOV KEYVAL,#11 ;=

  RET

KV12:

  DEC A

  JNZ KV13

  MOV KEYVAL,#12 ;/

  RET

KV13:

  DEC A

  JNZ KV14

  MOV KEYVAL,#13 ;*

  RET

KV14:

  DEC A

  JNZ KV15

  MOV KEYVAL,#14 ;-

  RET

KV15:

  DEC A

  JNZ KV16

  MOV KEYVAL,#15 ;+

  RET

KV16:

  MOV KEYVAL,#0FFH

  RET

;--------------------

LEDTAB:

  DB 0C0H ;"0" 00H

  DB 0F9H ;"1" 01H

  DB 0A4H ;"2" 02H

  DB 0B0H ;"3" 03H

  DB 99H ;"4" 04H

  DB 92H ;"5" 05H

  DB 82H ;"6" 06H

  DB 0F8H ;"7" 07H

  DB 80H ;"8" 08H

  DB 90H ;"9" 09H

  DB 88H ;"A" 0AH

  DB 83H ;"B" 0BH

  DB 0C6H ;"C" 0CH

  DB 0A1H ;"D" 0DH

  DB 86H ;"E" 0EH

  DB 8EH ;"F" 0FH

  DB 0FFH ;" " 10H

;--------------------

END

proteus仿真测试

ps:

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

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

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

相关文章

FreeRTOS入门教程(任务通知)

文章目录 前言一、什么是任务通知二、任务通知和队列,信号量的区别三、任务通知的优点和缺点1.优点2.缺点 四、任务状态和通知值五、任务通知相关的函数发出通知取出通知 六、任务通知具体使用1.实现轻量级信号量二进制信号量计数型信号量 2.实现轻量级队列 总结 前…

Guitar Pro8.0.2吉他编曲软件 吉他打谱软件 吉他作曲软件

Guitar Pro8.0.2在音乐的大舞台上,谁不想成为一位吉他弹奏大师呢?但在现实中,学吉他并非一蹴而就,许多小伙伴都因为吉他的上手难度而被浇灭学习的热情。然而,这里有一款神奇的软件,叫做,它就像是…

C++双指针算法:统计点对的数目

本周推荐阅读 C二分算法:得到子序列的最少操作次数 本题其它解法 C二分查找:统计点对的数目 题目 给你一个无向图,无向图由整数 n ,表示图中节点的数目,和 edges 组成,其中 edges[i] [ui, vi] 表示 u…

IO和NIO的区别 BIO,NIO,AIO 有什么区别? Files的常用方法都有哪些?

文章目录 IO和NIO的区别BIO,NIO,AIO 有什么区别?Files的常用方法都有哪些? 今天来对java中的io, nio, bio, aio进行了解,有何区别。 IO和NIO的区别 NIO与IO区别 IO是面向流的,NIO是面向缓冲区的Java IO面向流意味着每次从流中读一个或多个字…

【开源】基于Vue.js的快乐贩卖馆管理系统

项目编号: S 064 ,文末获取源码。 \color{red}{项目编号:S064,文末获取源码。} 项目编号:S064,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 搞笑视频模块2.3 视…

Java核心知识点整理大全15-笔记

Java核心知识点整理大全-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全2-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全3-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全4-笔记-CSDN博客 Java核心知识点整理大全5-笔记-CSDN博客 Java核心知识点整理大全6…

steam搬砖还能做吗?CSGO饰品未来走势如何?

steam/csgo搬砖项目真能月入过万吗?到底真的假的? 如何看待CSGO饰品市场的整体走向? 从整体来说,CSGO的饰品市场与规模肯定会持续不断的上升,大盘不会发生特别大的波动,目前处于稳定期!&#x…

elasticsearc DSL查询文档

文章目录 DSL查询文档DSL查询分类全文检索查询使用场景基本语法示例 精准查询term查询range查询总结 地理坐标查询矩形范围查询附近查询 复合查询相关性算分算分函数查询1)语法说明2)示例3)小结 布尔查询1)语法示例:2&…

C语言公交车之谜(ZZULIOJ1232:公交车之谜)

题目描述 听说郑州紫荆山公园有英语口语角&#xff0c;还有很多外国人呢。为了和老外对上几句&#xff0c;这周六早晨birdfly拉上同伴早早的就坐上了72路公交从学校向紫荆山进发。一路上没事干&#xff0c;birdfly开始思考一个问题。 从学校到紫荆山公园共有n(1<n<20)站路…

LeetCode Hot100 33.搜索旋转排序数组

题目&#xff1a; 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], ..., nums[n-1], nu…

Docker Swarm总结+基础、集群搭建维护、安全以及集群容灾(1/4)

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

C#,《小白学程序》第二十课:大数的加法(BigInteger Add)

大数的&#xff08;加减乘除&#xff09;四则运算、阶乘运算。 乘法计算包括小学生算法、Karatsuba和Toom-Cook3算法。 重复了部分 19 课的代码。 1 文本格式 using System; using System.Linq; using System.Text; using System.Collections.Generic; /// <summary>…

网络视频播放卡顿原因分析

一、问题描述 某项目通过拉摄像机rtsp流转rtmp/http-flv/ws-flv的方案&#xff0c;使用户可以在网页中观看摄像机的视频画面。在 观看视频时偶发出现卡顿现象。 二、卡顿现象分析和解决 此问题涉及的原因较多&#xff0c;所以得考虑各环节的问题可能性&#xff0c;并根据现场实…

C语言盐水的故事(ZZULIOJ1214:盐水的故事)

题目描述 挂盐水的时候&#xff0c;如果滴起来有规律&#xff0c;先是滴一滴&#xff0c;停一下&#xff1b;然后滴二滴&#xff0c;停一 下&#xff1b;再滴三滴&#xff0c;停一下...&#xff0c;现在有一个问题&#xff1a;这瓶盐水一共有VUL毫升&#xff0c;每一滴是D毫升&…

黑马点评-Feed流的实现方案,基于推拉结合模式实现笔记推送

Feed流实现方案 我们关注了博主之后,当用户发布了动态后我们应该把这些数据推送给粉丝,关注推送也叫作Feed(投喂)流,通过无限下拉刷新获取新的信息 传统的模式内容检索: 粉丝需要主动通过搜索引擎或者是其他方式去查找想看的内容新型Feed流的效果: 系统分析用户到底想看什么,…

CSDN C4模拟题

《计算机常识》 进制转换 一、任务目标 理解二进制/八进制/十进制/十六进制的原理 掌握各种不同的进制间的转换方法 二、任务背景 进制转换是软件工程师的必备技能,也是C1阶段的计算机通识模块之一,实际开发中的多媒体数据采集、分割、压缩、编解转码、传输、纠错、合并等…

队列详解(C语言实现)

文章目录 写在前面1 队列的定义2 队列的初始化3 数据入队列4 数据出队列5 获取队头元素6 获取队尾元素7 获取队列元素个数8 判断队列是否为空8 队列的销毁 写在前面 本片文章详细介绍了另外两种存储逻辑关系为 “一对一” 的数据结构——栈和队列中的队列&#xff0c;并使用C语…

WorkPlus稳定服务助力行业千万用户,打造无界沟通协作平台

在企业移动数字化领域&#xff0c;WorkPlus以其十年如一日的研发实力和千万级用户案例&#xff0c;成为众多企业首选的移动数字化平台。究竟是什么样的力量支撑着WorkPlus在市场上占据如此重要的地位呢&#xff1f;接下来&#xff0c;让我们一起揭开WorkPlus的神秘面纱&#xf…

【开源】基于Vue.js的陕西非物质文化遗产网站

文末获取源码&#xff0c;项目编号&#xff1a; S 065 。 \color{red}{文末获取源码&#xff0c;项目编号&#xff1a;S065。} 文末获取源码&#xff0c;项目编号&#xff1a;S065。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 设计目标2.2 研究内容2.3 研究方法与…

网络唤醒原理浅析(Wake On LAN)

原理 将唤醒魔术包发送的被唤醒机器的网卡上&#xff0c;魔术包指AMD公司开发的唤醒数据包&#xff0c;具有远程唤醒的网卡都支持这个标准&#xff0c;用16进制表示如下&#xff1a; 6对“FF”前缀16次重复MAC地址,举个例子假如我的网卡MAC地址是&#xff1a;AA:BB:CC:DD:EE:…