微机原理课程设计简易计算器的设计Word格式文档下载.docx

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

微机原理课程设计简易计算器的设计Word格式文档下载.docx

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

微机原理课程设计简易计算器的设计Word格式文档下载.docx

为低电平时,访问I/O端口,表示当前要进行CPU与I/O端口之间的数据传送。

(2)WR/(write):

写信号,输出,低电平有效。

信号有效时,表明CPU正在执行写总线周期,同时由信号决定是对存储器还是对I/O端口执行写操作。

(3)INTA/(interruptacknowledge):

可屏蔽中断响应信号,输出,低电平有效。

CPU通过信号对外设提出的可屏蔽中断请求做出响应。

为低电平时,表示CPU已经响应外设的中断请求,即将执行中断服务程序。

(4)ALE(addresslockenable):

地址锁存允许信号,输出,高电平有效。

CPU利用ALE信号可以把AD15~AD0地址/数据、A19/S6~A16/S3地址/状态线上的地址信息锁存在地址锁存器中。

(5)DT/(datatransmitorreceive):

数据发送/接收信号,输出,三态。

DT/信号用来控制数据传送的方向。

DT/为高电平时,CPU发送数据到存储器或I/O端口;

DT/为低电平时,CPU接收来自存储器或I/O端口的数据。

(6)DEN/(dataenable):

数据允许控制信号,输出,三态,低电平有效。

信号用作总线收发器的选通控制信号。

当为低电平时,表明CPU进行数据的读/写操作。

(7)HOLD(busholdrequest):

总线保持请求信号,输入,高电平有效。

在DMA数据传送方式中,由总线控制器8237A发出一个高电平有效的总线请求信号,通过HOLD引脚输入到CPU,请求CPU让出总线控制权。

(8)HLDA(holdacknowledge):

总线保持响应信号,输出,高电平有效。

HLDA是与HOLD配合使用的联络信号。

在HLDA有效期间,HLDA引脚输出一个高电平有效的响应信号,同时总线将处于浮空状态,CPU让出对总线的控制权,将其交付给申请使用总线的8237A控制器使用,总线使用完后,会使HOLD信号变为低电平,CPU又重新获得对总线的控制权。

3.2可编程并行接口芯片8255A

微机系统的信息交换有两种方式:

并行通信接口方式和串行通信接口方式。

接口电路在CPU和I/O设备之间起着信号的变换和传输的作用。

8255A可为86系列CPU与外部设备之间提供并行输入/输出的通道。

由于它是可编程的,可以通过软件来设置芯片的工作方式,因此,用8255A连接外部设备时,通常不用再附加外部电路,使用教方便。

并行接口是在多根数据线上,以数据字节/字与I/O设备交换信息。

  在输入过程中,输入设备把数据送给接口,并且使状态线“输入准备好”有效。

接口

把数据存放在“输入缓冲寄存器”中,同时使“输入回答”线有效,作为对外设的响应。

外设在收到这个回答信号后,就撤消数据和“输入准备好”信号。

数据到达接口中后,接口会在“状态寄存器”中设置输入准备好标志,或者向CPU发一个中断请求。

CPU可用查询方式或中断方式从接口中读取数据。

接口中的数据被读取后,接口会自动清除状态寄存器中的标志,且撤消对CPU的中断请求。

  在输出过程中,每当输出寄存器可以接收数据,接口就会将状态寄存器中“输出准备好”状态置1或向CPU发一个中断请求,CPU可用查询或中断方式向接口输出数据。

当CPU输出的数据到达接口后,接口会清除“输出准备好”状态,把数据送往外设,并向外设发一个“数据输出准备好”信号。

外设受到驱动后,便接收数据,并向接口电路发一个“输出回答”信号,接口收到该回答信号后,又将状态寄存器中“输出准备好”置位,以便CPU输出下一个数据。

定义工作方式控制字:

3.3LED数码管

LED为发光二极管构成的显示器件,亦称数码管。

由7个字符段和一个小数点段组成,每段对应一个发光二极管,当发光二极管点亮时,相应的字符段点亮。

LED有共阴极和共阳极两种供应状态。

共阴极显示时,将LED显示的COM接地,将八个字符段端a、b、c、d、e、f、g、dp依次与一个8位I/O口的最低到最高位连接,当I/O给LED的哪个字符段送入一个高电平时,该段就被点亮,从而可从这7个字符段中被点亮的构成相应的字符显示出来。

同理,COM阳极即将COM端接Vcc,其显示原理与COM阴极的基本相同,但I/O口送入低电平是相应的段才被点亮。

3.44×

4矩阵按键

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

因为4×

4矩阵键盘有8个管脚,于是将键盘接8255A的PC口,至于为什么选择PC是有原因的,进行键盘扫描一般要求有一部分的I/O口的工作方式是输入,另一部分I/O是输出,具体到4×

4键盘则要求4个I/O口输入,另外4个输出,这一点PC口刚好符合,而PA、PB口要么全部输入或输出,所以只能是PC口接键盘。

3.5硬件原理图

四软件设计

4.1程序流程图

(1)键盘扫描程序流程图:

(2)总程序流程图:

4.2源代码

DATASEGMENT

XDB?

;

存放数据的每一位

X1DW?

存放第一个数据值

X2DW?

存放第二个数据值

YDW?

存放运算结果

SDB?

;

存放运算符号值

EDB?

按下等号键标记

CCDB?

;

存放运算数据位数

HDB0;

存放按键行号

LDB0;

存放按键列号

DISCODEDB3FH,06H,5BH,4FH,

66H,6DH,7DH,07H,

7FH,6FH,77H,7CH,

39H,5EH,79H,71H;

段码表

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAL,90H;

设置为A口输入,B口输出,C口输出

OUT46H,AL

MOVDI,OFFSETX+3;

DI指向X的高位

KKK:

CALLKEY;

扫描按键

JMPKKK

;

以下为按键扫描子程序,程序返回后,在变量H和L中存放当前按键的行列号

KEYPROC

CHECK:

CALLDISP;

等待按键按下的同时进行显示

MOVAL,0F0H;

所有行输出低电平

OUT44H,AL

INAL,40H

CMPAL,0FFH;

读列值

JZCHECK;

若都为高电平则无键按下,等待

MOVCX,50

LOOP$;

延时消抖

INAL,DX;

重读列值

CMPAL,0FFH

JZCHECK;

无键按下一直等待

MOVH,0;

有键按下,先把行列号变量清0

MOVL,0

MOVBL,01H

MOVBH,0FEH;

扫描法读键值:

从第一行开始测试,即PC0输出低电平

NEXT:

MOVAL,BH

OUT44H,AL

NEXTH:

INAL,40H;

读列值,判断是第几列有键按下

TESTAL,BL;

从第一列开始判断

JZWAIT0

ROLBL,1

CMPBL,10H;

当前行状态下没有列有键按下,则转为对下一行的测试

JZNEXTL

INCH;

每判断一列,列号加1

JMPNEXTH;

再对下一列进行判断

NEXTL:

MOVH,0

ROLBH,1;

对下一行测试,让下一个PC口输出低电平

CMPBH,0EFH

JZEXIT

INCL

JMPNEXT

WAIT0:

INAL,40H;

若有键按下,则等该按键松开后再计算键值

JNZWAIT0

LOOP$;

CALLKEYVALUE;

调计算键值子程序

EXIT:

RET

KEYENDP

以下为计算键值子程序,通过行列号计算键值(键值=行号*4+列号)键值存放在DL寄存器中

KEYVALUEPROC

MOVDL,L

MOVDH,H

SHLDL,1

SHLDL,1;

列号乘4

ADDDL,DH

CMPDL,9;

按下的是数字键

JNGNUM_CALL

CMPDL,14

JLCONT_CALL;

按下的是运算键

JZOUTP_CALL;

按下的是等于键

CMPDL,15

JZCLR_CALL;

按下的是清除键

NUM_CALL:

CALLNUMBER;

调数字键处理子程序

JMPEXIT1

CONT_CALL:

MOVS,DL;

存放运算键的键值

MOVE,0

CALLCOUNT调运算键处理子程序,计算第一个加数

OUTP_CALL:

CALLOUTP;

调等号键处理子程序

CLR_CALL:

CALLCLEAR;

调清除键处理子程序

EXIT1:

RET

KEYVALUEENDP

以下为清除键处理子程序,按下清除键后,X变量全部清0

CLEARPROC

MOVX[3],0

MOVX[2],0

MOVX[1],0

MOVX[0],0

CALLBITP

RET

CLEARENDP

以下为等号键处理子程序,该子程序负责将第二个运算数据的数值计算出来存入X2变量

并根据运算符号,调用相应的运算子程序

OUTPPROC

PUSHAX

PUSHDX

PUSHBX

INCE

CALLCOUNT;

调运算键处理子程序,计算第二个运算数据

CMPS,10

JZADD_CALL;

运算符为加号,则调用加法子程序

CMPS,11

JZSUB_CALL;

运算符为减号,则调用减法子程序

CMPS,12

JZMUL_CALL;

运算符为乘号,则调用乘法子程序

CMPS,13

CALLDIVP;

运算符为除号,则调用除法子程序

JMPSTORE1

ADD_CALL:

CALLADDP

SUB_CALL:

CALLSUBP

MUL_CALL:

CALLMULP

STORE1:

MOVAX,Y

以下程序将各运算子程序返回的运算结果,按位分解,送入X变量

MOVDX,0

MOVBX,1000

DIVBX

MOVX[0],AL

MOVAX,DX

MOVBL,100

DIVBL

MOVX[1],AL

MOVAL,AH

MOVAH,0

MOVBL,10

MOVX[2],AL

MOVX[3],AH

POPBX

POPDX

POPAX

OUTPENDP

以下为运算键处理子程序,该程序将第一个运算数据的数值计算出来并存入X1变量

或者将第二个运算数据的数值计算出来并存入X2变量

将运算符的值存入S变量

COUNTPROC

CALLBITP;

测试X中的数据是多少位

CMPCC,4;

输入的数据是4位数

JZC4

CMPCC,3;

输入的数据是3位数

JZC3

CMPCC,2;

输入的数据是2位数

JZC2

JMPC1;

输入的数据是1位数

C4:

MOVAX,0

MOVAL,X[0]

MOVBX,1000

MULBX

MOVDX,AX

C3:

MOVAL,X[1]

MOVBL,100

MULBL

ADDDX,AX

C2:

MOVAL,X[2]

MULBL

ADDDX,AX

C1:

MOVAL,X[3]

CMPE,1

JNZX1_S

MOVX2,DX;

按下的是等号,则将第二个运算数据的值存入X2变量

JMPEXIT3

X1_S:

MOVX1,DX;

按下的是运算符号,则将第一个运算数据的值存X1变量

MOVX[3],0;

清空X变量

MOVX[0],0

EXIT3:

POPDX

COUNTENDP

以下为数字键处理子程序

该程序,将输入的数据按位存放在X变量中,并由CC记录数据的位数

NUMBERPROC

JNZCONTINUE

CALLCLEAR

CONTINUE:

CMPCC,0;

目前数据为0位,即没有数据,则转到SSS

JZSSS

MOVAL,X[3]

MOVAH,X[2]

MOVDL,X[1]

MOVDH,X[0]

MOVCX,8

LL:

SHLAX,1

RCLDX,1

LOOPLL

MOVX[3],AL

MOVX[2],AH

MOVX[1],DL

MOVX[0],DH

SSS:

MOV[DI],DL;

将当前键入的数据存放到X的最低位

INCCC;

数据位数加1

CMPCC,4;

判断数据位数

JNGEXIT2

MOVCC,0;

如果数据超过4位,重新从最低位开始存放

EXIT2:

CALLDISP;

调显示子程序,显示输入的数据

NUMBERENDP

加法子程序

ADDPPROC

MOVAX,X1

ADDAX,X2

MOVY,AX

ADDPENDP

减法子程序

SUBPPROC

SUBAX,X2

MOVY,AX

POPAX

SUBPENDP

乘法子程序

MULPPROC

MOVAX,X1

MOVDX,X2

MULDX

MULPENDP

除法子程序

DIVPPROC

MOVBX,X2

DIVBX

POPDX

POPBX

DIVPENDP

显示子程序,将X中的数值按位显示出来

DISPPROC

PUSHAX

MOVBH,0

LEASI,DISCODE

测试X位数

CMPCC,4

JZQIAN

CMPCC,3

JZBAI

CMPCC,2

JZSHI

CMPCC,1

JMPG

JMPNONE

QIAN:

MOV;

从第4位开始显示

MOVBL,X[0]

MOVAL,[SI+BX]

OUT42H,AL

CALLDELY

MOVAL,0

BAI:

MOV;

从第3位开始显示

MOVBL,X[1]

OUT42H,AL

SHI:

从第2位开始显示

MOVAL,AH

MOVBL,X[2]

MOVAL,[SI+BX]

G:

MOVAH,01110000B;

从第1位开始显示

MOVBL,X[3]

JMPEXIT4

NONE:

MOVAL,0;

X中没有数据,不显示

EXIT4:

POPAX

DISPENDP

分析数据位数子程序

BITPPROC

CMPX[0],0;

如果X[0]不为0,则数据为4位数

JNZFOURBIT

CMPX[1],0;

如果X[1]不为0,则数据为3位数

JNZTHREEBIT

CMPX[2],0;

如果X[2]不为0,则数据为2位数

JNZTOWBIT

CMPX[3],0;

如果X[3]不为0,则数据为1位数

JNZONEBIT

JMPZER0BIT;

否则,没有数据

FOURBIT:

MOVCC,4

JMPEXIT5

THREEBIT:

MOVCC,3

JMPEXIT5

TOWBIT:

MOVCC,2

ONEBIT:

MOVCC,1

ZER0BIT:

MOVCC,0

EXIT5:

BITPENDP

延时子程序

DELYPROC

PUSHCX

MOVCX,100

LOOP$

POPCX

DELYENDP

CODEENDS

ENDSTART

五仿真

第一步,进行数码管显示的仿真。

编写一段直接赋值送到数码管显示的程序,进行数码管显示的仿真。

第二步,进行键盘扫描的仿真。

编写代码,将扫描到的键值送到数码管显示。

第三步,在数码管显示和键盘扫描程序都正确的基础上,逐步增加代码,增加功能,逐步实现按键值的存储与显示、清零、加法、减法、乘法、除法等功能的仿真。

六课程设计体会

上学期刚学过微机原理,学得不是很深入,仅限于课本知识的掌握,而此次课程设计将会是一个很好的机会,来考察自己对课本知识的掌握以及应用情况。

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

当前位置:首页 > 人文社科 > 法律资料

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

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