微机原理课程设计(用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.总体设计确定键盘是否有输入(使用程序不断进行扫描)若有输入就调用子程序进行判断,是数值则进行存储并同时进行显示,是运算符号等就调用..页脚相应的子程序进行操作继续扫描键盘是否有输入,从而实现4位十进制数以内的加减乘除法或者扩展功能运算运算完成后将运算的结果储存并显示到LED显示器上3.硬件设计见附录。4.软件设计见附录。四、课程设计总结或结论(1)个人总结本次课程设计我们做的课题是用8255A实现4位十进制数简易计算器,四人一组,我负责主程序的框架与整体调试、LED数码显示部分及硬件构架。对于主程序的框架,是整个计算器的核心,通过与其他组员的商量我们最终确定了我们的主要算法:通过一个4*4键盘,输入数据,实现加减乘除操作,将输入的数据和运算符分别存储,接收到“=”时进行运算,并将结果输出。看起来简单的算法,由于涉及到十进制和十六进制的转换,其中就需要很多中间的转换程序。经过反复修改与查阅资料,我们的程序最终能够完成部分预期功能。我还负责LED数码管显示部分的程序,四位七段数码管的显示,原理看起来简单,但是实际操作时却有各种各样的毛病,按照原理写好程序,往往不能达到预期效果,数码管又是不显示,有时会显示乱码,有时会闪烁,所有这些,都要一步一步调试,加入合适的延时程序是关键,延时过长、过短都不好。显示乱码是程序方面出了问题,经过一次次调试,终于得到了稳定的显示,我对数码管的应用也更熟练了。由于我之前有接触过proteus仿真软件,所以我负责硬件的搭建,熟悉使用proteus软件对我们专业来说是一项基本技能,通过一次次摸索与百度,我对这个软件的使用也越来越熟悉,学会了怎么连总线,怎么仿真,怎么快速连线,以及常用元件的搜索。其中最让我满足的是键盘的设计,如果用16个按钮排列当然可以实现我们的要求,但是每次按按钮有很不方便,所以我在网上查询资料,学会了用proteus自身的模型制作自己的元件,上图左边是普通矩阵键盘,右图是我利用proteus自身模型制作的的键盘,感觉很满意。整个硬件仿真的搭建,由于对软件的不..页脚熟悉,本身设计的问题,花了我很长时间,而且重复连接了很多次,最后我们成功仿真出了我们的计算器。通过本次课程设计,就我本身来说我学会了很多东西,无论是软件上汇编语言程序的编写与调试,还是硬件的搭建技巧与相关软件的应用的能力都得到了很大提高,同时也锻炼了我的自我学习能力与交流合作能力,相关软件的学习使用,相关芯片与元件的使用与选择能力都在一定程度上有了很大进步。同时,软硬件的结合,也体现了我们自动化专业的特点。最后,有一点遗憾的就是做好了四位的简易计算器,我们想进一步扩展做成八位的计算器,但是难度有所加大,不是想象中的那么简单,数码管显示部分就花了很大精力去调试。最后由于时间关系没有完成8位计算器的制作。(2)团队总结本次课程设计,我们是四人一组,团队合作的要求就比较高。因为选题的关系,需要更多的人合作,所以决定四人组队,各自发挥特长。在设计过程中,我们配合得很好,初期的查阅资料共享,极大地体现了我们人数上的优势。对于整个设计的交流更让我们在大方向上走上了正确的道路,少走了很多弯路。我们的课题看起来简单,其实不然,仔细分析,涉及的知识面很广,很考验我们的基本功和自学能力。软件方面的算法由于是大家一起讨论后决定的,一般都是可行的,也有很多难点,比如说十进制与十六进制的转换,数据的输出与存储等,但是在我们的通力合作下一一解决了我们面临的很多难题。硬件方面用的是proteus软件仿真,硬件电路的设计也是一个难点,但是通过查阅资料与相互交流,我们的电路最终是可行的,虽然之前失败了好几次。软件和硬件的结合再一次考验了我们的合作精神,软件是建立在硬件上的,硬件体现软件的功能,主要负责硬件和组要负责软件的同学建立了很好的默契,相互学习,圆满的完成了任务。本次课程设计我们对自己的成果相对比较满意,在设计的过程中,大家相互学习,相互帮助,都收获很多。但是我们也有很多不足的地方,比如四位的计算器位数太少,不能进行小数运算等,这些都是对我们能力的极大挑战,为了解决这些问题我们也进行了积极探索,设计了一个八位的简单计算器,但是由于时间有限,没能完成设计。..页脚五、参考文献[1]《清华大学TPC—2003A实验指导书》,2006版[2]《新编16/32位微型计算机原理及应用》,李继灿主编,清华大学出版社,2008版,第四版[3]陈继红.微机原理及应用[M].北京:高等教育出版社,2011年,276-283页[4]周明德.微型计算机系统原理及应用[M].北京:清华大学出版社,2007年..页脚附录一、软件设计1.总程序流程图扫描计算键值数值?运算符?“=”?“+”?“-”?“*”?除法运算加法运算清零减法运算乘法运算存储显示..页脚2.扫描程序流程图3.程序代码;8255A端口地址:A口:40H,B口:44H,C口:42H,控制端口:46HDATASEGMENTXDB?,?,?,?;存放数据的每一位X1DW?;存放第一个数据值X2DW?;存放第二个数据值YDW?;存放运算结果SDB?;存放运算符号值EDB?;按下等号键标记CCDB?;存放运算数据位数开始初始化延时12ms按键扫描保存键值按键闭合按键释放按键闭合YYYNNN结束..页脚HDB0;存放按键行号LDB0;存放按键列号DISCODEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H;段码表DATAENDSCODESEGMENTASSUMECS:CODEDS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,90H;设置为A口输入,B口输出,C口输出OUT46H,ALMOVDI,OFFSETX+3;DI指向X的高位KKK:CALLKEY;扫描按键JMPKKK;以下为按键扫描子程序,程序返回后,在变量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;再对下一列进行判断..页脚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:RETKEYVALUEENDP..页脚;以下为清除键处理子程序,按下清除键后,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],ALM

1 / 21
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功