最新简易计算器的设计微机原理课设武汉理工终稿

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

摘要
21世纪是一个信息化日益加快的时代,它对人才的需求也呈现出新的变化趋势。

对计算机的掌握已成为了当今时代对人才考验的一项重要指标;大学计算机公共课程也面临着新的机遇和挑战。

基于此事实,微机原理课程在计算机教学上强调了对当今学生在“难度—深度—强度”三维同步教学上的侧重,并极力注重学生的实践能力的培养,本次课程设计,老师通过给学生布置一定的设计任务,而学生分组实践完成,从而达到对学生计算机原理知识的教学和汇编语言程序的锻炼。

汇编语言是联系C等高级语言到机器语言的重要编程语言,其指令是机器指令的一种符号表示,具有很强的机器相关性;也正基于此,可以实现起执行效率的很大提高
本次课设是基于汇编语言的计算器设计,通过编写相应的程序代码实现一个16进制的简单计算器设计。

其能够实现实现16进制整数的加减乘除计算,通过键盘输入两个数据及选择运算符,回车输出16进制的结果。

关键词:汇编语言计算器 16进制
简易计算机课程设计
一、设计目的
本次课程设计的实验目的是通过该实验掌握较复杂程序的设计。

能够独立完成用程序对8255控制键盘和LED显示的控制,完成计算器加减法的应用。

独立编写程序,明白和掌握程序的原理和实现方式。

为以后的设计提供经验。

学习和掌握计算机中常用接口电路的应用和设计技术,充分认识理论知识对应用技术的指导性作用,进一步加强理论知识与应用相结合的实践和锻炼。

通过这次设计实践能够进一步加深对专业知识和理论知识学习的认识和理解,使自己的设计水平和对所学的知识的应用能力以及分析问题解决问题的能力得到全面提高。

微机原理课程设计的意义是为了使学生加深对所学的微机原理知识的理解,培养学生的专业素质,提高其利用微机原理知识处理问题的能力,为今后专业课程的学习、毕业设计和工作打下良好的基础。

使学生能比较扎实地掌握微机原理的基础知识和基本理论,掌握控制系统及有关设备的分析、开发等基本技能,受到必要工程训练、初步的科学研究方法训练和实践锻练,增强分析问题和解决问题的能力,了解微机原理和接口技术的新发展。

二、设计内容
基于PROTEUS的简易计算器的设计及仿真
要求:(1)设计一个简易的计算器,能实现两位数的四则运算功能,具有清零和复位功能;
(2)计算器包括键盘和显示单元,其中键盘要求至少具备数字键、运算功能键;
(3)选用合适的接口芯片及元器件,设计基于8086 CPU的最小系统;
(4)在Proteus中绘制系统原理图,并仿真实现。

三、设计要求
在课程设计时,1人1题,同批次同学中选择同一题的人数不超过3人。

在教师指导下,可以相互讨论,但设计报告由学生独立完成,不得互相抄袭。

教师的主导作用主要在于指明设计思路,启发学生独立设计的思路,解答疑难问题和按设计进度进行阶段审查。

学生必须发挥自身学习的主动性和能动性,主动思考问题、分析问题和解决问题,而不应处处被动地依赖指导老师。

同学应积极主动的提出问题、解决问题、讨论问题,互相帮助和启发。

学生在设计中可以引用所需的参考资料,避免重复工作,加快设计进程,但必须和题目的要求相符合,保证设计的正确。

指导教师要引导学生学会掌握和使用各种已有的技术资料,不能盲目地、机械地抄袭资料,必须具体分析,使设计质量和设计能力都获得提高。

学生要在老师的指导下制定好自己各环节的详细设计进程计划,按给定的时间计划保质保量的完成个阶段的设计任务。

设计中可边设计,边修改,软件设计与硬件设计可交替进行,问题答疑与调试和方案修改相结合,提高设计的效率,保证按时完成设计工作并交出合格的设计报告。

四、设计原理与硬件电路
设计的思路是:首先利用程序不断扫描键盘是不是有输入,如果没有就一直扫描,如果有就停止扫描,完成输入,利用汇编的程序核对输入键的数值,通过调用子程序完成数据的储存或者是加减的运算。

运算完成后将运算的结果储存并显示到LED显示器上。

各部分硬件功能:
可编程并行通信接口芯片8255A
8255A内部结构
1. 并行输入/输出端口A,B,C
8255A内部包括三个8位的输入输出端口,分别是端口A、端口B、端口C,相应信号线是PA7~PA0、PB7~PB0、PC7~PC0。

端口都是8位,都可以作为输入或输出。

通常将端口A和端口B定义为输入/输出的数据端口,而端口C则既可以作数据端口,又可以作为端口A和端口B的状态和控制信息的传送端口。

2.A组和B组控制部件
端口A和端口C的高4位(PC7~PC4)构成A组;由A组控制部件实现控制功能。

端口B和端口C的低4位(PC3~PC0)构成B组;由B组控制部件实现控制功能。

A组和B组利用各自的控制单元来接收读写控制部件的命令和CPU通过数据总线(D0~D7)送来的控制字,并根据他们来定义各个端口的操作方式。

3. 数据总线缓冲存储器
三态双向8位缓冲器,是8255A与8086CPU之间的数据接口。

与I/O操作有关的数据、控制字和状态信息都是通过该缓冲器进行传送。

4. 读/写控制部件
8255A完成读/写控制功能的部件。

能接收CPU的控制命令,并根据控制命令向各个功能部件发出操作指令。

CS 片选信号:由CPU输入,有效时表示该8255A被选中。

RD, WR 读、写控制信号:由CPU输入。

RD有效表示CPU读8255A,WR有效表示CPU写8255A。

RESET 复位信号:由CPU输入。

RESET信号有效,清除8255A中所有控制字寄存器内容,并将各个端口置成输入方式。

定义工作方式控制字:
工作方式0:8255A中各端口的基本输入/输出方式。

键盘输入模块
键盘是常用信息输入元件,其实键盘也是由一个个按钮组成,如果是独立按钮的话必须要需要一个I/O口对它进行检测,而键盘往往这需要键盘按钮数一半的I/O口数对它进行检测,也许对一个比较简单的系统I/O口数一般不是问题,但对于一个大型、复杂的系统来说I/O资源就显得非常珍贵了,尽量减少I/O使用是非常利于降低成本,另外一方面键盘比用独立按键要美观,这也是键盘能够长期得到人们青睐的原因,可是硬件上的节省必然导致软件上编程的复杂,那就来看看键盘到底使软件编程有多复杂?
下图是一个3*3键盘的结构图,因为3*4键盘有7个管脚,于是将键盘接8255A 的PC口,至于为什么选择PC是有原因的,进行键盘扫描一般要求有一部分的I/O 口的工作方式是输入,另一部分I/O是输出,具体到3*3键盘则要求3个I/O口输入,另外3个输出,这一点PC口刚好符合,而PA、PB口要么全部输入或输出,所以只能是PC口接键盘。

硬件电路如下图所示:
五、设计流程图
STACK SEGMENT PARA PUBLIC 'STACK'
DB200DUP (0)
STACK ENDS
DATA SEGMENT
;----------------------主程序中的提示信息-------------------------
STR1 DB0AH,0DH, ' *************************************$'
STR2 DB0AH,0DH, ' ** * Welcome to come * **$'
STR3 DB0AH,0DH, ' ** * * **$'
STR4 DB0AH,0DH, ' *************************************$'
STR5 DB0AH,0DH, '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>$'
STR6 DB0AH,0DH,' please input an operators,such as:','+', '-', '*', '/','$' STR7 DB0AH,0DH,' :','$'
STR8 DB0AH,0DH,'your choose is wrong,please again!','$'
STR9 DB0AH,0DH,'please input data1:','$'
STR10 DB0AH,0DH,'please input data2:','$'
STR11 DB0AH,0DH,'The result is:_','$'
STR12 DB0AH,0DH,' -','$'
STR13 DB0AH,0DH,'You input the illegal shuju,please again!'
STR14 DB0AH,0DH,'Press Q or q to Exit,Press others button to come again,!','$' DATA1 DW ?
DATA2 DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX
DISP MACRO M
LEA DX,M
MOV AH,9
INT21H
ENDM
DISP STR1
DISP STR2
DISP STR3
DISP STR4
HJ:
DISP STR5
DISP STR9
XOR AX,AX
XOR BX,BX
DATA01:
MOV AH,1;键盘输入并回显
INT21H;DOS调用
CMP AL,0DH
JZ L1
CMP AL,30H;与0的ASCII码比较
JAE J3 ;如果输入数字大于等于0则跳转至J3 JMP D2
J3:CMP AL,39H;与9比较的ASCII码比较
JBE J4 ;如果小于或等于9则跳转至J4
JMP J5 ;如果大于等于9的话则跳转J5
J5:CMP AL,41H;与A比较的ASCII码比较
JAE J6 ;如果大于等于A的话则跳转J6
JMP D2 ;如果小于等于A的话则跳至D2
J6:CMP AL,46H;与F的ASCII码比较
JBE J10 ;如果小于或等于F的ASCII码则跳转至J10 JMP J7 ;如果大于F的ASCII码值则跳至J7
J7:CMP AL,61H;与a的ASCII值比较
JAE J8 ;大于或等于的话则跳转至J8
JMP D2 ;小于的话则跳至D2
J8:CMP AL,66H;与f的ASCII值比较
JBE J9 ;小于或等于的话则跳转至J9
JMP D2 ;否则的话则跳至D2
J9:AND AL,0DFH;
JMP J10
J4:SUB AL,30H
JMP D1
J10:SUB AL,37H;
D1:CBW
XCHG AX,BX
MOV DI,10H
MUL DI
XCHG AX,BX
ADD BX,AX
JMP DATA01
L1: MOV DATA1,BX
XOR BX,BX
DISP STR10 ;显示提示输入数据二的信息
DATA02:
MOV AH,1;键盘输入并回显
INT21H;DOS调用
CMP AL,0DH
JZ L2
CMP AL,30H;与0的ASCII码比较
JAE K3 ;如果输入数字大于等于0则跳转至K3 JMP D2
K3:CMP AL,39H;与9比较的ASCII码比较
JBE K4 ;如果小于或等于9则跳转至K4
JMP K5 ;如果大于等于9的话则跳转K5
K5:CMP AL,41H;与A比较的ASCII码比较
JAE K6 ;如果大于等于A的话则跳转K6
JMP D2 ;如果小于等于A的话则跳至D2
K6:CMP AL,46H;与F的ASCII码比较
JBE K10 ;如果小于或等于F的ASCII码则跳转至K10 JMP K7 ;如果大于F的ASCII码值则跳至K7
K7:CMP AL,61H;与a的ASCII值比较
JAE K8 ;大于或等于的话则跳转至K8
JMP D2 ;小于的话则跳至D2
K8:CMP AL,66H;与f的ASCII值比较
JBE K9 ;小于或等于的话则跳转至K9
JMP D2 ;否则的话则跳至D2
K9:AND AL,0DFH;
JMP K10
K4:SUB AL,30H
JMP D4
K10:SUB AL,37H;
D4:CBW
XCHG AX,BX
MOV DI,10H
MUL DI
XCHG AX,BX
ADD BX,AX
JMP DATA02
L2:
MOV DATA2,BX
MOV AX,DATA1
MOV BX,DATA2
PUSH AX
PUSH BX
DISP STR6
ZIFU:
DISP STR7
MOV AH,1
INT21H
CMP AL,'+'
JZ ADD0 ;若运算符为“+”,则跳转到ADD0
CMP AL,'-'
JZ SUB0 ;若运算符为“-”,则跳转到SUB0
CMP AL,'*'
JZ MUL0 ;若运算符为“*”,则跳转到MUL0
CMP AL,'/'
JZ DIV0 ;若运算符为“/”,则跳转到DIV0 DISP STR8 ;若输入不合法,则显示提示信息JMP ZIFU ;若输入不合法,则重新输入
;-------------------进行加法运算-----------------------ADD0:
DISP STR1
DISP STR11 ;显示结果的信息
DISP STR7
POP BX
POP AX
ADD AX,BX
CALL CHANGE
MOV DX,AX
CALL DONE
RET
;-------------------进行减法运算-----------------------SUB0: DISP STR1
DISP STR11 ;显示结果的信息
DISP STR7
POP BX
POP AX
CMP AX,BX;比较两数大小
JAE SUB1 ;如果AX>=BX则跳转
XCHG AX,BX
PUSH AX
PUSH BX
DISP STR12 ;显示一个负号
POP BX
POP AX
SUB1: SUB AX,BX
CALL CHANGE
MOV DX,AX
CALL DONE
RET
;-------------------进行乘法运算-----------------------MUL0: DISP STR1
DISP STR11 ;显示结果的信息
DISP STR7
POP BX
POP AX
MUL BX
CALL CHANGE
MOV DX,AX
CALL DONE
RET
;-------------------进行除法运算-----------------------DIV0: DISP STR1
POP BX
POP AX
CMP BX,'0'
CALL ERROR_DATA
DISP STR11 ;显示结果的信息
DISP STR7
CBW
DIV BX
CALL CHANGE
MOV DX,AX
CALL DONE
RET
;-------------------------------------------------
;以下为提示输入不合法数据的模块
ERROR_DATA PROC NEAR;:
DISP STR13
DISP STR10
JMP DATA02
ERROR_DATA ENDP
;------------------------------------------------
;以下为设计一个将16进制数转化为其对应ASCII码的子模块
JG_xshi PROC NEAR
CWD ;将字转换为双字,AX内容符号扩展到DX DIV CX
PUSH DX
MOV DL,AL
ADD DL,30H;将对应的数字变成其ASC码值
MOV AH,2;将DL寄存器中的内容字符显示输出
INT21H;DOS调用
POP DX
MOV AX,DX
RET
JG_xshi ENDP
;-----------------------------------------------
;检验AX中放入的数据
CHANGE PROC NEAR
CMP AX,1000H
JAE C1 ;AX≥1000则转移
CMP AX,100H
JAE C2 ;AX≥100则转移
CMP AX,10H
JAE C3 ;AX≥10则转移
JMP C4 ;AX<10
C1: MOV CX,1000H
CALL JG_xshi
C2: MOV CX,100H
CALL JG_xshi
C3: MOV CX,10H
CALL JG_xshi
C4: MOV CX,1H
CALL JG_xshi
RET
CHANGE ENDP
;-----------------------------------------------;询问下一步操作是结束还是继续
DONE PROC NEAR
DISP STR14
MOV AH,7
INT21H
CMP AL,'Q'
JZ EXIT
CMP AL,'q'
JZ EXIT
JMP HJ
DONE ENDP
;------------------------------------------------D2:
PUSH AX
PUSH BX
DISP STR13
POP BX
POP AX
JMP HJ
RET
EXIT:
MOV AX,4C00H
INT21H
CODE ENDS
END START
六、程序代码
编程也可以主要分为三部分;键盘扫描、数据处理、数码管显示,另外还有译码电
路,8255各口的地址所使用的是200H-207H。

8255A采用的是方式0,A组输入,B组输
出。

七、设计总结体会
本次课程设计师自由选择设计课题的,我选择了简易加减法计算器的题目,看起来不是很难,但是真正做起来才发现其困难之处。

本次的课程设计是一个相对而言比较难的设计,因为这次设计不仅仅是课本上知识的整合,而且还有很多是课外的扩展。

这次课程设计可以说是一个挑战。

我们做的题目是简易计算器的设计。

才开始思路很清晰。

或许是因为我们司空见惯了这种小机器,可是等做起来发现真的好难。

首先8255A的初始化和8086的接线也是十分简单,但是等到编成的时候发现有很多不懂得地方,觉得很容易的算法在编程中很难实现。

于是我开始查看课本和有关的资料,知道了一些编程常用的方法。

受益匪浅。

而后我用心编写这程序。

经过自己的努力和同学的帮助终于完成了相应的要求。

本次课程设计,不仅使我加深了对接口程序设计的认识,对接口各部件的工作原理也有了进一步的了解,也增强了分析故障的能力,更重要的是培养了我们面对问题、解决问题的能力。

从理论知识上我对8086和8255的作用、功能以及初始化更加熟悉,并且有了客观上的理解。

对键盘的使用和数码管显示问题也完全弄懂了。

这次课程设计还是比较成功的。

当然我还有很多不足之处,比如知识掌握的不够全面,研究的深度不够,有问题畏畏缩缩不敢问,程序编写不会查漏补缺。

课后没有及时解决课上的问题留到第二天上课程设计在想办法,这说明我的惰性也很强。

这些都是我需要去改进的地方。

我会在以后的学习中多加注意。

最后感谢老师的辛苦指导,使我的设计能过成功实现,使我完成了这次课程设计。

另外感谢网络给予我便利,让我找到有些相关资料帮我解决了一些问题。

同时也感谢与
我一起学习、探讨,一起研究、查找资料的唐云虹同学。

相关文档
最新文档