微机原理课程设计用8255A实现4位十进制计算器.docx

上传人:b****6 文档编号:7456142 上传时间:2023-01-24 格式:DOCX 页数:9 大小:23.90KB
下载 相关 举报
微机原理课程设计用8255A实现4位十进制计算器.docx_第1页
第1页 / 共9页
微机原理课程设计用8255A实现4位十进制计算器.docx_第2页
第2页 / 共9页
微机原理课程设计用8255A实现4位十进制计算器.docx_第3页
第3页 / 共9页
微机原理课程设计用8255A实现4位十进制计算器.docx_第4页
第4页 / 共9页
微机原理课程设计用8255A实现4位十进制计算器.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

微机原理课程设计用8255A实现4位十进制计算器.docx

《微机原理课程设计用8255A实现4位十进制计算器.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计用8255A实现4位十进制计算器.docx(9页珍藏版)》请在冰豆网上搜索。

微机原理课程设计用8255A实现4位十进制计算器.docx

微机原理课程设计用8255A实现4位十进制计算器

微机原理课程设计(用8255A实现4位十进制计算器)

课程设计报告(2012--2013年度第1学期)名题院班学称:

微型计算机原理及应用目:

用8255A实现四位十进制数简单计算器系:

控制与计算机工程学院级:

自动化1003班号:

1101190302昌学生姓名:

范指导教师:

王震宇设计周数:

一周成绩:

同组人:

贾旭郭欢刘玉婷日期:

2013年1月5日

课课程设计报告一、课程设计的目的与要求课程设计是培养和锻炼学生在学习完本门课后综合应用所学理论知识,解决实际工程设计和应用问题的能力的重要教学环节。

它具有动手、动脑和理论联系实际的特点,是培养在校工科大学生理论联系实际、敢于动手、善于动手和独立自主解决设计实践中遇到的各种问题能力的一个重要教学环节。

通过课程设计,要求学生熟悉和掌握微机系统的软件、硬件设计的方法、设计步骤,使学生得到微机开发应用方面的初步训练。

让学生独立或集体讨论设计题目的总体设计方案、编程、软件硬件调试、编写设计报告等问题,真正做到理论联系实际,提高动手能力和分析问题、解决问题的能力,实现由学习知识到应用知识的初步过渡。

通过本次课程设计使学生熟练掌握微机系统与接口扩展电路的设计方法,熟练应用8086汇编语言编写应用程序和实际设计中的硬软件调试方法和步骤,熟悉微机系统的硬软件开发工具的使用方法。

我组根据微机原理课程所学相关知识及实验教程相关内容,在基于proteus平台,使用汇编语言,以8086为核心的情况下,配合可编程并行接口器件8255A,LED数码管等器件实现可进行简单四位数加减乘除法功能的十进制计算器。

在课程设计实践中,我们不仅锻炼了实际动手能力,培养了团队精神和严肃认真的工作态度,更增强了自己在实际的工程设计中查阅资料,撰写设计报告表达设计思想和结果的能力。

二、课程设计进度及任务分工课设进度:

1.选择课程设计题目,查阅相关资料。

(全体组员)2.需求分析及总体设计。

(全体组员)3.软硬件设计。

(范昌负责主程序的框架与整体调试、LED数码显示部分及硬件构架,贾旭负责键盘管理部分,郭欢、刘玉婷负责算法及相关程序)4.仿真调试。

(范昌、贾旭)5.总结及撰写设计报告。

(郭欢、刘玉婷)6.个人总结(全体组员)三、设计正文1.需求分析?

?

?

?

?

?

操控核心微处理器8086芯片可编程并行接口芯片8255A可编程定时/计数器8253A对输入扫描的矩阵键盘显示模块LED数码管辅助器件如74LS138译码器、74LS373等2.总体设计?

?

确定键盘是否有输入(使用程序不断进行扫描)若有输入就调用子程序进行判断,是数值则进行存储并同时进行显示,是运算符号等就调用1

课课程设计报告相应的子程序进行操作?

?

继续扫描键盘是否有输入,从而实现4位十进制数以内的加减乘除法或者扩展功能运算运算完成后将运算的结果储存并显示到LED显示器上3.硬件设计见附录。

4.软件设计见附录。

四、课程设计总结或结论

(1)个人总结本次课程设计我们做的课题是用8255A实现4位十进制数简易计算器,四人一组,我负责主程序的框架与整体调试、LED数码显示部分及硬件构架。

对于主程序的框架,是整个计算器的核心,通过与其他组员的商量我们最终确定了我们的主要算法:

通过一个4*4键盘,输入数据,实现加减乘除操作,将输入的数据和运算符分别存储,接收到“=”时进行运算,并将结果输出。

看起来简单的算法,由于涉及到十进制和十六进制的转换,其中就需要很多中间的转换程序。

经过反复修改与查阅资料,我们的程序最终能够完成部分预期功能。

我还负责LED数码管显示部分的程序,四位七段数码管的显示,原理看起来简单,但是实际操作时却有各种各样的毛病,按照原理写好程序,往往不能达到预期效果,数码管又是不显示,有时会显示乱码,有时会闪烁,所有这些,都要一步一步调试,加入合适的延时程序是关键,延时过长、过短都不好。

显示乱码是程序方面出了问题,经过一次次调试,终于得到了稳定的显示,我对数码管的应用也更熟练了。

由于我之前有接触过proteus仿真软件,所以我负责硬件的搭建,熟悉使用proteus软件对我们专业来说是一项基本技能,通过一次次摸索与XX,我对这个软件的使用也越来越熟悉,学会了怎么连总线,怎么仿真,怎么快速连线,以及常用元件的搜索。

其中最让我满足的是键盘的设计,如果用16个按钮排列当然可以实现我们的要求,但是每次按按钮有很不方便,所以我在网上查询资料,学会了用proteus自身的模型制作自己的元件,上图左边是普通矩阵键盘,右图是我利用proteus自身模型制作的的键盘,感觉很满意。

整个硬件仿真的搭建,由于对软件的不熟2

课课程设计报告悉,本身设计的问题,花了我很长时间,而且重复连接了很多次,最后我们成功仿真出了我们的计算器。

通过本次课程设计,就我本身来说我学会了很多东西,无论是软件上汇编语言程序的编写与调试,还是硬件的搭建技巧与相关软件的应用的能力都得到了很大提高,同时也锻炼了我的自我学习能力与交流合作能力,相关软件的学习使用,相关芯片与元件的使用与选择能力都在一定程度上有了很大进步。

同时,软硬件的结合,也体现了我们自动化专业的特点。

最后,有一点遗憾的就是做好了四位的简易计算器,我们想进一步扩展做成八位的计算器,但是难度有所加大,不是想象中的那么简单,数码管显示部分就花了很大精力去调试。

最后由于时间关系没有完成8位计算器的制作。

(2)团队总结本次课程设计,我们是四人一组,团队合作的要求就比较高。

因为选题的关系,需要更多的人合作,所以决定四人组队,各自发挥特长。

在设计过程中,我们配合得很好,初期的查阅资料共享,极大地体现了我们人数上的优势。

对于整个设计的交流更让我们在大方向上走上了正确的道路,少走了很多弯路。

我们的课题看起来简单,其实不然,仔细分析,涉及的知识面很广,很考验我们的基本功和自学能力。

软件方面的算法由于是大家一起讨论后决定的,一般都是可行的,也有很多难点,比如说十进制与十六进制的转换,数据的输出与存储等,但是在我们的通力合作下一一解决了我们面临的很多难题。

硬件方面用的是proteus软件仿真,硬件电路的设计也是一个难点,但是通过查阅资料与相互交流,我们的电路最终是可行的,虽然之前失败了好几次。

软件和硬件的结合再一次考验了我们的合作精神,软件是建立在硬件上的,硬件体现软件的功能,主要负责硬件和组要负责软件的同学建立了很好的默契,相互学习,圆满的完成了任务。

本次课程设计我们对自己的成果相对比较满意,在设计的过程中,大家相互学习,相互帮助,都收获很多。

但是我们也有很多不足的地方,比如四位的计算器位数太少,不能进行小数运算等,这些都是对我们能力的极大挑战,为了解决这些问题我们也进行了积极探索,设计了一个八位的简单计算器,但是由于时间有限,没能完成设计。

3

课课程设计报告五、参考文献[1]《清华大学TPC—2003A实验指导书》,2006版[2]《新编16/32位微型计算机原理及应用》,李继灿主编,清华大学出版社,2008版,第四版[3]陈继红.微机原理及应用[M].北京:

高等教育出版社,2011年,276-283页[4]周明德.微型计算机系统原理及应用[M].北京:

清华大学出版社,2007年4

课课程设计报告附录一、软件设计1.总程序流程图扫描计算键值数值?

运算符?

清零“=”?

加法运算“+”?

减法运算“-”?

乘法运算“*”?

显示存储除法运算5

课课程设计报告2.扫描程序流程图开始初始化N按键闭合Y延时12msN按键闭合Y按键扫描N按键释放Y保存键值结束3.程序代码;8255A端口地址:

A口:

40H,B口:

44H,C口:

42H,控制端口:

46HDATASEGMENTXDBX1DW?

X2DWYDWSDBEDBCCDB?

?

?

?

;存放数据的每一位;存放第一个数据值?

;存放第二个数据值?

;存放运算结果?

;存放运算符号值?

;按下等号键标记?

;存放运算数据位数6

课课程设计报告HDB0LDB0DISCODEDB;存放按键行号;存放按键列号3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H;段码表DATAENDSCODESEGMENTASSUMECS:

CODEDS:

DATASTART:

MOVAX,DATAMOVDS,AXMOVAL,90HOUT46H,ALMOVDI,OFFSETX+3CALLKEYJMPKKK;设置为A口输入,B口输出,C口输出;DI指向X的高位;扫描按键KKK:

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

CALLDISP;等待按键按下的同时进行显示MOVAL,0F0H;所有行输出低电平OUT44H,ALINAL,40HCMPAL,0FFH;读列值JZCHECK;若都为高电平则无键按下,等待MOVCX,50LOOP$;延时消抖INAL,DX;重读列值CMPAL,0FFHJZCHECK;无键按下一直等待MOVH,0;有键按下,先把行列号变量清0MOVL,0MOVBL,01HMOVBH,0FEH;扫描法读键值:

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

MOVAL,BHOUT44H,ALNEXTH:

INAL,40H;读列值,判断是第几列有键按下TESTAL,BL;从第一列开始判断JZWAIT0ROLBL,1CMPBL,10H;当前行状态下没有列有键按下,则转为对下一行的测试JZNEXTLINCH;每判断一列,列号加1JMPNEXTH;再对下一列进行判断7

课课程设计报告NEXTL:

MOVH,0MOVBL,01HROLBH,1;对下一行测试,让下一个PC口输出低电平CMPBH,0EFHJZEXITINCLJMPNEXTWAIT0:

INAL,40H;若有键按下,则等该按键松开后再计算键值CMPAL,0FFHJNZWAIT0MOVCX,50LOOP$;延时消抖INAL,40HCMPAL,0FFHJNZWAIT0CALLKEYVALUE;调计算键值子程序EXIT:

RETKEYENDP;以下为计算键值子程序,通过行列号计算键值(键值=行号*4+列号)键值存放在DL寄存器中KEYVALUEPROCMOVDL,LMOVDH,HSHLDL,1SHLDL,1;列号乘4ADDDL,DHCMPDL,9;按下的是数字键JNGNUM_CALLCMPDL,14JLCONT_CALL;按下的是运算键CMPDL,14JZOUTP_CALL;按下的是等于键CMPDL,15JZCLR_CALL;按下的是清除键NUM_CALL:

CALLNUMBER;调数字键处理子程序JMPEXIT1CONT_CALL:

MOVS,DL;存放运算键的键值MOVE,0CALLCOUNT调运算键处理子程序,计算第一个加数JMPEXIT1OUTP_CALL:

CALLOUTP;调等号键处理子程序JMPEXIT1CLR_CALL:

CALLCLEAR;调清除键处理子程序EXIT1:

RETKEYVALUEENDP8

课课程设计报告;以下为清除键处理子程序,按下清除键后,X变量全部清0CLEARPROCMOVX[3],0MOVX[2],0MOVX[1],0MOVX[0],0CALLBITPRETCLEARENDP;以下为等号键处理子程序,该子程序负责将第二个运算数据的数值计算出来存入X2变量;并根据运算符号,调用相应的运算子程序OUTPPROCPUSHAXPUSHDXPUSHBXINCECALLCOUNT;调运算键处理子程序,计算第二个运算数据CMPS,10JZADD_CALL;运算符为加号,则调用加法子程序CMPS,11JZSUB_CALL;运算符为减号,则调用减法子程序CMPS,12JZMUL_CALL;运算符为乘号,则调用乘法子程序CMPS,13CALLDIVP;运算符为除号,则调用除法子程序JMPSTORE1ADD_CALL:

CALLADDPJMPSTORE1SUB_CALL:

CALLSUBPJMPSTORE1MUL_CALL:

CALLMULPSTORE1:

MOVAX,Y;以下程序将各运算子程序返回的运算结果,按位分解,送入X变量MOVDX,0MOVBX,1000DIVBXMOVX[0],ALMOVAX,DXMOVBL,100DIVBLMOVX[1],ALMOVAL,AHMOVAH,0MOVBL,10DIVBL9

课课程设计报告MOVMOVPOPPOPPOPRETX[2],ALX[3],AHBXDXAXOUTPENDP;以下为运算键处理子程序,该程序将第一个运算数据的数值计算出来并存入X1变量;或者将第二个运算数据的数值计算出来并存入X2变量;将运算符的值存入S变量COUNTPROCPUSHAXPUSHBXPUSHDXMOVDX,0CALLBITP;测试X中的数据是多少位CMPCC,4;输入的数据是4位数?

JZC4CMPCC,3;输入的数据是3位数?

JZC3CMPCC,2;输入的数据是2位数?

JZC2JMPC1;输入的数据是1位数?

C4:

MOVAX,0MOVAL,X[0]MOVBX,1000MULBXMOVDX,AXC3:

MOVAL,X[1]MOVBL,100MULBLADDDX,AXC2:

MOVAL,X[2]MOVBL,10MULBLADDDX,AXC1:

MOVAL,X[3]MOVAH,0ADDDX,AXCMPE,1JNZX1_SMOVX2,DX;按下的是等号,则将第二个运算数据的值存入X2变量JMPEXIT3X1_S:

MOVX1,DX;按下的是运算符号,则将第一个运算数据的值存X1变量MOVX[3],0;清空X变量MOVX[2],010

课课程设计报告MOVX[1],0MOVX[0],0EXIT3:

POPDXPOPBXPOPAXRETCOUNTENDP;以下为数字键处理子程序;该程序,将输入的数据按位存放在X变量中,并由CC记录数据的位数NUMBERPROCCMPE,1JNZCONTINUEMOVE,0CALLCLEARCONTINUE:

CMPCC,0;目前数据为0位,即没有数据,则转到SSSJZSSSPUSHAXPUSHDXMOVAL,X[3]MOVAH,X[2]MOVDL,X[1]MOVDH,X[0]MOVCX,8LL:

SHLAX,1RCLDX,1LOOPLLMOVX[3],ALMOVX[2],AHMOVX[1],DLMOVX[0],DHPOPDXPOPAXSSS:

MOV[DI],DL;将当前键入的数据存放到X的最低位INCCC;数据位数加1CMPCC,4;判断数据位数JNGEXIT2MOVCC,0;如果数据超过4位,重新从最低位开始存放MOVX[2],0MOVX[1],0MOVX[0],0EXIT2:

CALLDISP;调显示子程序,显示输入的数据RETNUMBERENDP;加法子程序11

课课程设计报告ADDPPROCPUSHAXMOVAX,X1ADDAX,X2MOVY,AXPOPAXRETADDPENDP;减法子程序SUBPPROCPUSHAXMOVAX,X1SUBAX,X2MOVY,AXPOPAXRETSUBPENDP;乘法子程序MULPPROCPUSHAXPUSHDXMOVAX,X1MOVDX,X2MULDXMOVY,AXPOPDXPOPAXRETMULPENDP;除法子程序DIVPPROCPUSHAXPUSHBXPUSHDXMOVDX,0MOVAX,X1MOVBX,X2DIVBXMOVY,AXPOPDXPOPBXPOPAXRETDIVPENDP12

课课程设计报告;显示子程序,将X中的数值按位显示出来DISPPROCPUSHBXPUSHAXMOVBH,0LEASI,DISCODECALLBITP;测试X位数CMPCC,4JZQIANCMPCC,3JZBAICMPCC,2JZSHICMPCC,1JMPGJMPNONEQIAN:

MOVAH,11100000B;从第4位开始显示MOVAL,AHOUT44H,ALMOVBL,X[0]MOVAL,[SI+BX]OUT42H,ALCALLDELYMOVAL,0OUT42H,ALBAI:

MOVAH,11010000B;从第3位开始显示MOVAL,AHOUT44H,ALMOVBL,X[1]MOVAL,[SI+BX]OUT42H,ALCALLDELYMOVAL,0OUT42H,ALSHI:

MOVAH,10110000B;从第2位开始显示MOVAL,AHOUT44H,ALMOVBL,X[2]MOVAL,[SI+BX]OUT42H,ALCALLDELYMOVAL,0OUT42H,ALG:

MOVAH,01110000B;从第1位开始显示MOVAL,AH13

课课程设计报告OUT44H,ALMOVBL,X[3]MOVAL,[SI+BX]OUT42H,ALCALLDELYJMPEXIT4NONE:

MOVAL,0OUT42H,ALEXIT4:

POPAXPOPBXRETDISPENDP;分析数据位数子程序BITPPROCCMPX[0],0JNZFOURBITCMPX[1],0JNZTHREEBITCMPX[2],0JNZTOWBITCMPX[3],0JNZONEBITJMPZER0BITFOURBIT:

MOVCC,4JMPEXIT5THREEBIT:

MOVCC,3JMPEXIT5TOWBIT:

MOVCC,2JMPEXIT5ONEBIT:

MOVCC,1JMPEXIT5ZER0BIT:

MOVCC,0EXIT5:

RETBITPENDP;延时子程序DELYPROCPUSHMOVLOOPPOPRETDELYENDPCODEENDSEND;X中没有数据,不显示;如果X[0]不为0,则数据为4位数;如果X[1]不为0,则数据为3位数;如果X[2]不为0,则数据为2位数;如果X[3]不为0,则数据为1位数;否则,没有数据CXCX,100$CXSTART14

课课程设计报告二、硬件设计1.微处理器8086当引脚接高电平时,CPU工作于最小模式。

此时,引脚信号24~31的含义及其功能如下:

(1)INTA/(interruptacknowledge):

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

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

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

(2)ALE(addresslockenable):

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

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

(3)DEN/(dataenable):

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

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

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

(4)DT/(datatransmitorreceive):

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

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

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

(5)IO/M/(memoryI/Oselect):

存储器、I/O端口选择控制信号。

信号指明当前CPU是选择访问存储器还是访问I/O端口。

为高电平时访问存储器,表示当前要进行CPU与存储器之间的数据传送。

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

(6)WR/(write):

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

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

(7)HLDA(holdacknowledge):

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

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

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

(8)HOLD(busholdrequest):

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

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

15

课课程设计报告2.可编程并行接口芯片8255ARESET:

复位输入线,当该输入端外于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。

PA0~PA7:

端口A输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入锁存器。

PB0~PB7:

端口B输入输出线,一个8位的I/O锁存器,一个8位的输入输出缓冲器。

PC0~PC7:

端口C输

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

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1