8086简易计算器的设计计算机硬件微机原理课程设计.docx

上传人:b****0 文档编号:9889513 上传时间:2023-05-21 格式:DOCX 页数:25 大小:492.76KB
下载 相关 举报
8086简易计算器的设计计算机硬件微机原理课程设计.docx_第1页
第1页 / 共25页
8086简易计算器的设计计算机硬件微机原理课程设计.docx_第2页
第2页 / 共25页
8086简易计算器的设计计算机硬件微机原理课程设计.docx_第3页
第3页 / 共25页
8086简易计算器的设计计算机硬件微机原理课程设计.docx_第4页
第4页 / 共25页
8086简易计算器的设计计算机硬件微机原理课程设计.docx_第5页
第5页 / 共25页
8086简易计算器的设计计算机硬件微机原理课程设计.docx_第6页
第6页 / 共25页
8086简易计算器的设计计算机硬件微机原理课程设计.docx_第7页
第7页 / 共25页
8086简易计算器的设计计算机硬件微机原理课程设计.docx_第8页
第8页 / 共25页
8086简易计算器的设计计算机硬件微机原理课程设计.docx_第9页
第9页 / 共25页
8086简易计算器的设计计算机硬件微机原理课程设计.docx_第10页
第10页 / 共25页
8086简易计算器的设计计算机硬件微机原理课程设计.docx_第11页
第11页 / 共25页
8086简易计算器的设计计算机硬件微机原理课程设计.docx_第12页
第12页 / 共25页
8086简易计算器的设计计算机硬件微机原理课程设计.docx_第13页
第13页 / 共25页
8086简易计算器的设计计算机硬件微机原理课程设计.docx_第14页
第14页 / 共25页
8086简易计算器的设计计算机硬件微机原理课程设计.docx_第15页
第15页 / 共25页
8086简易计算器的设计计算机硬件微机原理课程设计.docx_第16页
第16页 / 共25页
8086简易计算器的设计计算机硬件微机原理课程设计.docx_第17页
第17页 / 共25页
8086简易计算器的设计计算机硬件微机原理课程设计.docx_第18页
第18页 / 共25页
8086简易计算器的设计计算机硬件微机原理课程设计.docx_第19页
第19页 / 共25页
8086简易计算器的设计计算机硬件微机原理课程设计.docx_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

8086简易计算器的设计计算机硬件微机原理课程设计.docx

《8086简易计算器的设计计算机硬件微机原理课程设计.docx》由会员分享,可在线阅读,更多相关《8086简易计算器的设计计算机硬件微机原理课程设计.docx(25页珍藏版)》请在冰点文库上搜索。

8086简易计算器的设计计算机硬件微机原理课程设计.docx

8086简易计算器的设计计算机硬件微机原理课程设计

计算机硬件技术实践报告

题目简易计算器的设计

姓名

专业自动化(电站方向)

班级

学号

 

上海电力学院自动化工程学院

一、设计题目及目的

本次课程设计的实验目的是:

通过该实验掌握较复杂程序的设计;能独立完成用程序对8086、8255A控制键盘和LED显示的控制,完成计算器加减法的应用;独立编写程序,明白和掌握程序的原理和实现方式;学习和掌握计算机中常用接口电路的应用和设计技术,充分认识理论知识对应用技术的指导性作用;进一步加强理论知识与应用相结合的实践和锻炼,为以后的设计提供经验。

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

我们的具体任务是用8086设计一个能实现0~9整数加减乘除法的运算器,并用2位LED数码显示,键盘包括0-9,+,-,×,÷,=,NO/C共16个按键。

二、小组成员分工及成果

在实验课程要求下,我们选择基于8086CPU的模拟计算器设计。

要完成设计首先需要构建简单的微型计算机应用系统,其次是确定组成各部件的芯片,然后画原理图,根据相应的原理以及实现过程,编写出相应的汇编代码。

再根据原理图连接硬件电路,电路连接完成后进行调试。

设计过程中我们用到了8086CPU、可编程并行输入/输出芯片8255A、74HC138、74HC373、矩阵式键盘、LED数码管。

我们的模拟计算器能实现2位十进制数以内的加减乘除法运算。

首先,本组的三个成员一起讨论研究简易计算器设计的主要方案。

粗略设计程序流程图以确定简易计算器设计的大概框架。

明确目的后各自查询资料了解设计原理、逐步清晰设计思路。

以下为大体分工:

主要负责:

1、设计主要程序,编写;

2、查找资料验证修改;

主要负责:

1、选择需要用的各个芯片;

2、设计硬件原理图;

主要负责:

1、各个芯片功能的资料查找;

2、设计程序流程图

三、设计方案思路

用8086设计一个能实现0~9整数加减乘除法的运算器,并用2位LED数码显示,键盘包括0-9,+,-,×,÷,=,NO/C共16个按键。

1、通过小键盘做加减乘除运算。

2、数码管显示器作输入数据和结果数据的显示。

3、数字用小键盘0~9,“C、+、-、×、÷、=”做功能键

4、运算顺序:

a.首先输入一个原始数据(在0~9之间,否则无反应)显示器跟随显示

b.按“+、-、×、÷”显示器内容不变

c.再次输入一个数据(在0~9之间,否则无反应)显示器跟随显示

d.按“=”显示器显示结果数据

e.按C显示“00”数据清0,并重新开始运算

f.若输入一个数据后直接按“=”则数据不变

设计思路:

将整个程序划分为键盘扫描部分,显示部分,运算程序部分。

首先利用程序不断扫描键盘是不是有输入,如果没有就一直扫描,如果有就停止扫描,完成输入,利用汇编的程序核对输入键的数值,通过调用子程序实现运算。

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

软件流程大致如下:

开始,然后是系统的初始化,进行键盘扫描,对扫描的键值进行判断(分为数字键和功能键),若为数字键,则执行数字键处理程序,即显示数字并将数值存储;若为功能键,则先判断是否为清屏,如是清屏,则执行清屏子程序,如是加减乘除运算键则调用相应程序运算,如是等号键,则先判断上个符号位,调用相对应的运算子程序进行运算,如此就可以得到需要的结果了。

四、硬件原理图(包括芯片的选型介绍)

硬件电路图:

(见图1)

图1原理图

1、键盘输入模块

键盘是常用信息输入元件,其实键盘也是由一个个按钮组成,如果是独立按钮的话必须要对应一个I/O口对它进行检测,而键盘往往只需要键盘按钮数一半的I/O口对它进行检测,也许对一个比较简单的系统I/O口数一般不是问题,但对于一个大型、复杂的系统来说I/O资源就显得非常珍贵了,尽量减少I/O使用是非常利于降低成本,另外一方面键盘比用独立按键要美观,同时硬件上的节省必然导致软件上编程的复杂。

我们设计时使用的是4*4式键盘,如图2所示。

图2键盘

图中有4行4列,4根行线与PC口相连,4根列线与PA口相连。

按键设置在行、列交点处(数字或字符为其键号),行、列线分别连接到按键开关的两端。

键盘中有无按键按下是由行线送入全扫描字、列线读入行线状态来判断。

这就是:

给行线所有I/O线均置成低电平,然后读入列线电平状态。

如果有按键按下,总会有一根列线电平被拉至低电平,从而使列线输入不全为1。

2、可编程并行通信接口芯片8255A

图38255A

(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中所有控制字寄存器内容,并将各个端口置成输入方式。

图48255A内部结构

定义工作方式控制字:

工作方式0:

8255A中各端口的基本输入/输出方式。

图58255A工作方式控制

3、显示模块

图6显示器

显示原理:

显示子程序把数据每一位独立显示,每次从最高位显示到最低位,在扫描键盘的时候不断调用显示子程序,形成了从高位到低位的不断循环显示,由于循环速度快,看起来就好像一起显示的。

4、74HC373

图774HC373

其中AD0-AD7为数据输入端,A0-A7为输出端。

当三态允许控制端OE为低电平时,A0-A7为正常逻辑状态,可用来驱动负载或总线,当OE为高电平时,A0-A7成高阻态,不驱动总线。

当锁存允许端LE为高电平时,A随数据AD而变,当LE为低电平AD被锁存在已建立的数据电平。

5、74HC138

图874HC138

74HC138是一款高速CMOS器件,74HC138引脚兼容低功耗肖特基TTL(LSTTL)系列。

74HC138译码器可接受3位二进制加权地址输入(A0,A1和A2),并当使能时,提供8个互斥的低有效输出(Y0至Y7)。

74HC138特有3个使能输入端:

两个低有效(E1和E2)和一个高有效(E3)。

除非E1和E2置低且E3置高,否则74HC138将保持所有输出为高,74HC138为反相输出,它按照三位二进制输入码和赋能输入条件,从8个输出端中译出一个低电平输出。

两个低电平有效的赋能输入端和一个高电平有效的赋能输入端减少了扩展所需要的外接门或倒相器。

6、8086CPU

图9

8086CPU的40条引脚信号可按功能分可分为四类,它们是:

地址总线,数据总线,控制总线,其它(时钟与电源)。

最小模式下一些引脚功能(MN/MX接+5V):

AD15~AD0,地址/数据总线

A19/S6~A16/S3,地址/状态总线

RD,读信号

WR,写信号

M/IO,存储器/输入输出控制信号

ALE,地址锁存允许信号

READY(Ready),准备就绪信号

INTR,可屏蔽中断请求信号

INTA,中断响应信号

NMI,非屏蔽中断请求信号

RESET,系统复位信号

DEN,数据允许信号

DT/R,数据发送/接收控制信号

HOLD,总线保持请求信号输入

HLDA,总线保持响应信号

TEST,测试信号

CLK,时钟输入信号

VCC(+5V),GND

五、程序流程图

 

 

继续扫描键盘

N

 

 

六、程序清单,要有适当的注释

DATASEGMENT

NUM1DB03HDUP(0)

NUMDB03HDUP(0)

DATAENDS

STACKSEGMENT

DW100DUP(0)

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

PORTAEQU30H;A口地址

PORTBEQU32H

PORTCEQU34H

PORT8255EQU36H;8255片选始地址

MAINPROCFAR

(8255初始化)

START:

MOVAX,DATA;数据段

MOVDS,AX;将寄存器AX的内容传送给寄存器DS

MOVDX,PORT8255;把8255计数器里的内容放到DX寄存器

MOVAL,81H;A组方式0;A口输出,C口高四位输入

OUTDX,AL;B组方式0;B口输出,C口低四位输入

LOPL:

XORAH,AH;抑或指令,使AH清零

CALLKEY;调用KEY程序

CMPAH,00H;把AH和00H相比较

JZLOPL;ZF=1,即结果为0,则转到LOPL

CMPAL,0FH;把AL和0FH相比较

JZCCCL;ZF=1,即结果为0,则转到CCCL

CMPAL,0AH;把AH和0AH相比较

JZLOPL;ZF=1,即结果为0,则转到LOPL

JNCLOPL;若CF=0,表示第一个数大,转向LOPL

OUT32H,AL;输出B口数据AL

LOPL2:

LEASI,NUM;将NUM的偏移地址给SI

MOV[SI],AL;将AL的数据存放在SI中

PUSHAX;AX出栈

LOPL1:

XORAH,AH;抑或指令,使AH清零

CALLKEY;调用KEY程序

CMPAH,00H;把AH和00H相比较

JZLOPL1;ZF=1,即结果为0,则转到LOPL1

CMPAL,0FH;把AL和0FH相比较

JZCCCL;ZF=1,即结果为0,则转到CCCL

CMPAL,0AH;把AL和0AH相比较

JZXX1;ZF=1,即结果为0,则转到XX1

CMPAL,0BH;把AL和0BH相比较

JZXX2;ZF=1,即结果为0,则转到XX2

CMPAL,0CH;把AL和0CH相比较

JZXX3D;ZF=1,即结果为0,则转到XX3D

CMPAL,0DH;把AL和0DH相比较

JZXX4D;ZF=1,即结果为0,则转到XX4D

JMPLOPL1;转移到LOPL1

CCCL:

MOVAL,00H

OUT32H,AL;输出B口数据AL

JMPLOPL;转移到LOPL

XX3D:

CALLXX3;调用XX3程序

XX4D:

CALLXX4;调用XX4程序

MAINENDP

XX1PROC

NOP;加

LOPL3:

XORAH,AH;抑或指令,使AH清零

CALLKEY;调用KEY程序

CMPAH,00H;把AH和00H相比较

JZLOPL3;ZF=1,即结果为0,则转到LOPL3

CMPAL,0FH;把AL和0FH相比较

JZCCCL;ZF=1,即结果为0,则转到CCCL

CMPAL,0AH;把AL和0AH相比较

JZLOPL3;ZF=1,即结果为0,则转到LOPL3

JNCLOPL3;若CF=0,表示第一个数大,转向LOPL3

OUT32H,AL;输出B口数据AL

PUSHAX;AX出栈

LEASI,NUM;将NUM的偏移地址给SI

MOV[SI+1],AL;将AL的数据存放在SI+1中

LOPL4:

XORAH,AH;抑或指令,使AH清零

CALLKEY;调用KEY程序

CMPAH,00H;把AH和00H相比较

JZLOPL4;ZF=1,即结果为0,则转到LOPL4

CMPAL,0FH;把AL和0FH相比较

JZCCCL;ZF=1,即结果为0,则转到CCCL

CMPAL,0EH;把AL和0EH相比较

JZXXX1;ZF=1,即结果为0,则转到XXX1

JMPLOPL4;转移到LOPL4

XXX1:

LEASI,NUM

MOVAL,[SI]

ANDAL,0FH

MOVDL,[SI+1]

ANDDL,0FH;相与,高四位置0,低四位保持不变,赋给DL

ADDAL,DL

DAA;转化成BCD码

OUT32H,AL;输出B口数据AL

JMPLOPL;转移到LOPL

XX1ENDP

XX2PROC

NOP;减

LOPL5:

XORAH,AH;抑或指令,使AH清零

CALLKEY;调用KEY程序

CMPAH,00H;把AH和00H相比较

JZLOPL5;ZF=1,即结果为0,则转到LOPL5

CMPAL,0FH;把AL和0FH相比较

JZCCCL;ZF=1,即结果为0,则转到CCCL

CMPAL,0AH;把AL和0AH相比较

JZLOPL5;ZF=1,即结果为0,则转到LOPL5

JNCLOPL5

OUT32H,AL;输出B口数据AL

PUSHAX;AX出栈

LEASI,NUM;将NUM的偏移地址给SI

MOV[SI+1],AL;将AL的数据存放在SI+1中

LOPL6:

XORAH,AH;抑或指令,使AH清零

CALLKEY;调用KEY程序

CMPAH,00H;把AH和00H相比较

JZLOPL6;ZF=1,即结果为0,则转到LOPL6

CMPAL,0FH;把AL和0FH相比较

JZCCCL7;ZF=1,即结果为0,则转到LOPL7

CMPAL,0EH;把AL和0EH相比较

JZXXX2;ZF=1,即结果为0,则转到XXX2

JMPLOPL6;转移到LOPL6

XXX2:

LEASI,NUM;将NUM的偏移地址给SI

MOVAL,[SI]

ANDAL,0FH

MOVDL,[SI+1]

ANDDL,0FH

SUBAL,DL

ADDAL,00H

DAA

OUT32H,AL;输出B口数据AL

JMPLOPL;转移到LOPL

CCCL7:

MOVAL,00H

OUT32H,AL;输出B口数据AL

JMPLOPL;转移到LOPL

XX2ENDP

XX3PROC;乘

LOPL7:

XORAH,AH;抑或指令,使AH清零

CALLKEY;调用KEY程序

CMPAH,00H;把AH和00H相比较

JZLOPL7;ZF=1,即结果为0,则转到LOPL7

CMPAL,0FH;把AL和0FH相比较

JZCCCL2;ZF=1,即结果为0,则转到CCCL2

CMPAL,0AH;把AL和0AH相比较

JZLOPL7;ZF=1,即结果为0,则转到LOPL7

JNCLOPL7;若CF=0,表示第一个数大,转向LOPL

OUT32H,AL;输出B口数据AL

PUSHAX;AX出栈

LEASI,NUM;将NUM的偏移地址给SI

MOV[SI+1],AL;将AL的数据存放在SI+1中

LOPL8:

XORAH,AH;抑或指令,使AH清零

CALLKEY;调用KEY程序

CMPAH,00H;把AH和00H相比较

JZLOPL8;ZF=1,即结果为0,则转到LOPL8

CMPAL,0FH;把AL和0FH相比较

JZCCCL3;ZF=1,即结果为0,则转到CCCL3

CMPAL,0EH;把AL和0EH相比较

JZXXX3;ZF=1,即结果为0,则转到XXX3

JMPLOPL8;转移到LOPL8

XXX3:

LEASI,NUM;将NUM的偏移地址给SI

MOVAL,[SI]

ANDAL,0FH

MOVDL,[SI+1]

ANDDL,0FH

MULDL;DL*AL

AAM;商放AH,余数放AL

MOVCL,4

SALAH,CL;把AH向左移四位

ORAL,AH;或指令,有1置1

OUT32H,AL;输出B口数据AL

JMPLOPL;转移到LOPL

CCCL2:

MOVAL,00H

OUT32H,AL;输出B口数据AL

JMPLOPL;转移到LOPL

CCCL3:

MOVAL,00H

OUT32H,AL;输出B口数据AL

JMPLOPL;转移到LOPL

XX3ENDP

XX4PROC;除

LOPL9:

XORAH,AH;抑或指令,使AH清零

CALLKEY;调用KEY程序

CMPAH,00H;把AH和00H相比较

JZLOPL9;ZF=1,即结果为0,则转到LOPL9

CMPAL,0FH;把AL和0FH相比较

JZCCCL5;ZF=1,即结果为0,则转到CCCL5

CMPAL,0AH;把AL和0AH相比较

JZLOPL9;ZF=1,即结果为0,则转到LOPL9

JNCLOPL9;若CF=0,表示第一个数大,转向LOPL9

OUT32H,AL;输出B口数据AL

PUSHAX;AX出栈

LEASI,NUM;将NUM的偏移地址给SI

MOV[SI+1],AL;将AL的数据存放在SI+1中

LOPL10:

XORAH,AH;抑或指令,使AH清零

CALLKEY;调用KEY程序

CMPAH,00H;把AH和00H相比较

JZLOPL10;ZF=1,即结果为0,则转到LOPL10

CMPAL,0FH;把AL和0FH相比较

JZCCCL4;ZF=1,即结果为0,则转到CCCL4

CMPAL,0EH;把AL和0EH相比较

JZXXX4;ZF=1,即结果为0,则转到XXX4

JMPLOPL10;转移到LOPL10

XXX4:

LEASI,NUM;将NUM的偏移地址给SI

MOVAL,[SI]

ANDAL,0FH;与指令,高四位清零,低四位不变

MOVBL,[SI+1]

ANDBL,0FH

ANDAX,000FH

DIVBL;AL÷BL,商放在AL中,余数放在AH中

OUT32H,AL;输出B口数据AL

JMPLOPL;转移到LOPL

CCCL4:

MOVAL,00H

OUT32H,AL;输出B口数据AL

JMPLOPL;转移到LOPL

CCCL5:

MOVAL,00H

OUT32H,AL;输出B口数据AL

JMPLOPL;转移到LOPL

XX4ENDP

KEYPROC

NOP

LEASI,NUM1

MOVAL,0EH

OUT30H,AL;输出A口数据AL

INAL,34H

CMPAL,07H;把AL和07H相比较

JZLL7;ZF=1,即结果为0,则转到LL7

CMPAL,0BH;把AL和0BH相比较

JZLL8;ZF=1,即结果为0,则转到LL8

CMPAL,0DH;把AL和0DH相比较

JZLL9;ZF=1,即结果为0,则转到LL9

CMPAL,0EH;把AL和0EH相比较

JZLDIV;ZF=1,即结果为0,则转到LDIV

SS1:

MOVAL,0DH

OUT30H,AL;输出A口数据AL

INAL,34H

CMPAL,07H;把AL和07H相比较

JZLL4;ZF=1,即结果为0,则转到LL4

CMPAL,0BH;把AL和0BH相比较

JZLL5;ZF=1,即结果为0,则转到LL5

CMPAL,0DH;把AL和0DH相比较

JZLL6;ZF=1,即结果为0,则转到LL6

CMPAL,0EH;把AL和0EH相比较

JZLMUL;ZF=1,即结果为0,则转到LMUL

SS2:

MOVAL,0BH

OUT30H,AL;输出A口数据AL

INAL,34H

CMPAL,07H;把AL和07H相比较

JZLL1;ZF=1,即结果为0,则转到LL1

CMPAL,0BH;把AL和0BH相比较

JZLL2;ZF=1,即结果为0,则转到LL2

CMPAL,0DH;把AL和0DH相比较

JZLL3;ZF=1,即结果为0,则转到LL3

CMPAL,0EH;把AL和0EH相比较

JZLSUB;ZF=1,即结果为0,则转到LSUB

SS3:

MOVAL,07H

OUT30H,AL;输出A口数据AL

INAL,34H

CMPAL,07H;把AL和07H相比较

JZSCLC;ZF=1,即结果为0,则转到SCLC

CMPAL,0BH;把AL和0BH相比较

JZLL0;ZF=1,即结果为0,则转到LL0

CMPAL,0DH;把AL和0DH相比较

JZLEQU;ZF=1,即结果为0,则转到LEQU

CMPAL,0EH;把AL和0DH相比较

JZLADD;ZF=1,即结果为0,则转到LADD

JMPKCLC;转移到KCLC

LDIV:

MOVAL,0DH

JMPLCLC

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2