微机原理课程设计报告用8255A实现4位十进制计算器.doc
《微机原理课程设计报告用8255A实现4位十进制计算器.doc》由会员分享,可在线阅读,更多相关《微机原理课程设计报告用8255A实现4位十进制计算器.doc(17页珍藏版)》请在课桌文档上搜索。
1、-课程设计报告名 称:微型计算机原理及应用 题 目:用8255A实现四位十进制数简单计算器一、 课程设计的目的与要求课程设计是培养和锻炼学生在学习完本门课后综合应用所学理论知识,解决实际工程设计和应用问题的能力的重要教学环节。它具有动手、动脑和理论联系实际的特点,是培养在校工科大学生理论联系实际、敢于动手、善于动手和独立自主解决设计实践中遇到的各种问题能力的一个重要教学环节。通过课程设计,要求学生熟悉和掌握微机系统的软件、硬件设计的方法、设计步骤,使学生得到微机开发应用方面的初步训练。让学生独立或集体讨论设计题目的总体设计方案、编程、软件硬件调试、编写设计报告等问题,真正做到理论联系实际,提高
2、动手能力和分析问题、解决问题的能力,实现由学习知识到应用知识的初步过渡。通过本次课程设计使学生熟练掌握微机系统与接口扩展电路的设计方法,熟练应用8086汇编语言编写应用程序和实际设计中的硬软件调试方法和步骤,熟悉微机系统的硬软件开发工具的使用方法。我组根据微机原理课程所学相关知识及实验教程相关容,在基于proteus平台,使用汇编语言,以8086为核心的情况下,配合可编程并行接口器件8255A,LED数码管等器件实现可进展简单四位数加减乘除法功能的十进制计算器。在课程设计实践中,我们不仅锻炼了实际动手能力,培养了团队精神和严肃认真的工作态度,更增强了自己在实际的工程设计中查阅资料,撰写设计报告
3、表达设计思想和结果的能力。二、 课程设计进度及任务分工课设进度:1.选择课程设计题目,查阅相关资料。全体组员 2.需求分析及总体设计。全体组员3.软硬件设计。昌负责主程序的框架与整体调试、LED数码显示局部及硬件构架,贾旭负责键盘管理局部,郭欢、玉婷负责算法及相关程序4.仿真调试。昌、贾旭5.总结及撰写设计报告。郭欢、玉婷 6.个人总结全体组员三、设计正文1 需求分析l 操控核心微处理器8086芯片l 可编程并行接口芯片8255Al 可编程定时/计数器8253Al 对输入扫描的矩阵键盘l 显示模块LED数码管l 辅助器件如74LS138译码器、74LS373等2 总体设计l 确定键盘是否有输入
4、使用程序不断进展扫描l 假设有输入就调用子程序进展判断,是数值则进展存储并同时进展显示,是运算符号等就调用相应的子程序进展操作l 继续扫描键盘是否有输入,从而实现4位十进制数以的加减乘除法或者扩展功能运算l 运算完成后将运算的结果储存并显示到LED显示器上3 硬件设计见附录。4 软件设计见附录。四、课程设计总结或结论1个人总结本次课程设计我们做的课题是用8255A实现4位十进制数简易计算器,四人一组,我负责主程序的框架与整体调试、LED数码显示局部及硬件构架。对于主程序的框架,是整个计算器的核心,通过与其他组员的商量我们最终确定了我们的主要算法:通过一个4*4键盘,输入数据,实现加减乘除操作,
5、将输入的数据和运算符分别存储,接收到“=时进展运算,并将结果输出。 看起来简单的算法,由于涉及到十进制和十六进制的转换,其中就需要很多中间的转换程序。经过反复修改与查阅资料,我们的程序最终能够完成局部预期功能。我还负责LED数码管显示局部的程序,四位七段数码管的显示,原理看起来简单,但是实际操作时却有各种各样的毛病,按照原理写好程序,往往不能到达预期效果,数码管又是不显示,有时会显示乱码,有时会闪烁,所有这些,都要一步一步调试,参加适宜的延时程序是关键,延时过长、过短都不好。显示乱码是程序方面出了问题,经过一次次调试,终于得到了稳定的显示,我对数码管的应用也更熟练了。由于我之前有接触过prot
6、eus仿真软件,所以我负责硬件的搭建,熟悉使用proteus软件对我们专业来说是一项根本技能,通过一次次摸索与百度,我对这个软件的使用也越来越熟悉,学会了怎么连总线,怎么仿真,怎么快速连线,以及常用元件的搜索。其中最让我满足的是键盘的设计,如果用16个按钮排列当然可以实现我们的要求,但是每次按按钮有很不方便,所以我在网上查询资料,学会了用proteus自身的模型制作自己的元件,上图左边是普通矩阵键盘,右图是我利用proteus自身模型制作的的键盘,感觉很满意。整个硬件仿真的搭建,由于对软件的不熟悉,本身设计的问题,花了我很长时间,而且重复连接了很屡次,最后我们成功仿真出了我们的计算器。通过本次
7、课程设计,就我本身来说我学会了很多东西,无论是软件上汇编语言程序的编写与调试,还是硬件的搭建技巧与相关软件的应用的能力都得到了很大提高,同时也锻炼了我的自我学习能力与交流合作能力,相关软件的学习使用,相关芯片与元件的使用与选择能力都在一定程度上有了很大进步。同时,软硬件的结合,也表达了我们自动化专业的特点。最后,有一点遗憾的就是做好了四位的简易计算器,我们想进一步扩展做成八位的计算器,但是难度有所加大,不是想象中的则简单,数码管显示局部就花了很大精力去调试。最后由于时间关系没有完成8位计算器的制作。2团队总结 本次课程设计,我们是四人一组,团队合作的要求就比拟高。因为选题的关系,需要更多的人合
8、作,所以决定四人组队,各自发挥特长。 在设计过程中,我们配合得很好,初期的查阅资料共享,极大地表达了我们人数上的优势。对于整个设计的交流更让我们在大方向上走上了正确的道路,少走了很多弯路。我们的课题看起来简单,其实不然,仔细分析,涉及的知识面很广,很考验我们的根本功和自学能力。软件方面的算法由于是大家一起讨论后决定的,一般都是可行的,也有很多难点,比方说十进制与十六进制的转换,数据的输出与存储等,但是在我们的通力合作下一一解决了我们面临的很多难题。硬件方面用的是proteus软件仿真,硬件电路的设计也是一个难点,但是通过查阅资料与相互交流,我们的电路最终是可行的,虽然之前失败了好几次。软件和硬
9、件的结合再一次考验了我们的合作精神,软件是建立在硬件上的,硬件表达软件的功能,主要负责硬件和组要负责软件的同学建立了很好的默契,相互学习,圆满的完成了任务。本次课程设计我们对自己的成果相比照拟满意,在设计的过程中,大家相互学习,相互帮助,都收获很多。但是我们也有很多缺乏的地方,比方四位的计算器位数太少,不能进展小数运算等,这些都是对我们能力的极大挑战,为了解决这些问题我们也进展了积极探索,设计了一个八位的简单计算器,但是由于时间有限,没能完成设计。五、参考文献1?清华大学TPC2003A实验指导书?,2006版 2?新编16/32位微型计算机原理及应用?,继灿主编,清华大学,2008版,第四版
10、3 继红.微机原理及应用M.:高等教育,2011年,276-283页4 周明德.微型计算机系统原理及应用M.:清华大学,2007年附录一、 软件设计扫描计算键值数值?运算符?“=?“+?“-?“*?除法运算加法运算清零减法运算乘法运算存储显示1. 总程序流程图2. 扫描程序流程图开场初始化延时12ms按键扫描保存键值按键闭合按键释放按键闭合YYYNNN完毕3. 程序代码;8255A端口地址:A口:40H,B口:44H,C口:42H,控制端口:46HDATA SEGMENT*DB? , ? , ? , ?;存放数据的每一位*1DW ?;存放第一个数据值*2DW?;存放第二个数据值YDW?;存放运
11、算结果SDB? ;存放运算符号值EDB? ;按下等号键标记CC DB? ;存放运算数据位数HDB0 ;存放按键行号LDB0 ;存放按键列号DISCODEDB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H;段码表DATA ENDSCODE SEGMENTASSUMECS:CODEDS:DATASTART:MOVA*,DATAMOVDS,A*MOVAL,90H;设置为A口输入,B口输出,C口输出OUT46H,ALMOVDI,OFFSET *+3;DI指向*的高位KKK:CALLKEY;扫描按键JMPKKK;以下为按键
12、扫描子程序,程序返回后,在变量H和L中存放当前按键的行列号KEY PROCCHECK:CALLDISP;等待按键按下的同时进展显示MOVAL,0F0H;所有行输出低电平OUT44H,ALINAL,40HCMPAL,0FFH ;读列值JZ CHECK;假设都为高电平则无键按下,等待MOVC*,50LOOP$ ;延时消抖INAL,D* ;重读列值CMPAL,0FFHJZCHECK ;无键按下一直等待MOVH,0 ;有键按下,先把行列号变量清0MOVL,0MOVBL,01HMOVBH,0FEH ;扫描法读键值:从第一行开场测试,即PC0输出低电平NE*T:MOVAL,BHOUT 44H,ALNE*T
13、H:INAL,40H ;读列值,判断是第几列有键按下TESTAL,BL ;从第一列开场判断JZWAIT0ROLBL,1CMPBL,10H ;当前行状态下没有列有键按下,则转为对下一行的测试JZNE*TLINCH;每判断一列,列号加1JMPNE*TH;再对下一列进展判断NE*TL:MOVH,0MOVBL,01HROLBH,1 ;对下一行测试,让下一个PC口输出低电平CMPBH,0EFHJZE*ITINCLJMPNE*TWAIT0:INAL,40H ;假设有键按下,则等该按键松开后再计算键值CMPAL,0FFHJNZWAIT0MOVC*,50LOOP$;延时消抖INAL,40HCMPAL,0FFH
14、JNZWAIT0CALLKEYVALUE ;调计算键值子程序E*IT:RETKEY ENDP;以下为计算键值子程序,通过行列号计算键值键值=行号*4+列号键值存放在DL存放器中KEYVALUE PROCMOVDL,LMOVDH,HSHLDL,1SHLDL,1 ;列号乘4ADDDL,DHCMPDL,9 ;按下的是数字键JNGNUM_CALLCMPDL,14JLCONT_CALL;按下的是运算键CMPDL,14JZOUTP_CALL ;按下的是等于键CMPDL,15JZCLR_CALL;按下的是去除键NUM_CALL: CALLNUMBER;调数字键处理子程序JMPE*IT1CONT_CALL:M
15、OVS,DL ;存放运算键的键值MOVE,0CALLCOUNT 调运算键处理子程序,计算第一个加数JMPE*IT1OUTP_CALL:CALLOUTP ;调等号键处理子程序JMPE*IT1CLR_CALL:CALLCLEAR ;调去除键处理子程序E*IT1:RETKEYVALUE ENDP;以下为去除键处理子程序,按下去除键后,*变量全部清0CLEAR PROCMOV*3,0MOV*2,0MOV*1,0MOV*0,0CALLBITPRETCLEAR ENDP;以下为等号键处理子程序,该子程序负责将第二个运算数据的数值计算出来存入*2变量;并根据运算符号,调用相应的运算子程序OUTP PROCP
16、USHA*PUSHD*PUSHB*INCECALLCOUNT ;调运算键处理子程序,计算第二个运算数据CMPS,10JZADD_CALL ;运算符为加号,则调用加法子程序CMPS,11JZSUB_CALL ;运算符为减号,则调用减法子程序CMPS,12JZMUL_CALL ;运算符为乘号,则调用乘法子程序CMPS,13CALLDIVP ;运算符为除号,则调用除法子程序JMPSTORE1ADD_CALL:CALLADDPJMPSTORE1SUB_CALL:CALLSUBPJMPSTORE1MUL_CALL:CALLMULPSTORE1:MOVA*,Y;以下程序将各运算子程序返回的运算结果,按位分
17、解,送入*变量MOVD*,0MOVB*,1000DIVB*MOV*0, ALMOVA*,D*MOVBL,100DIVBLMOV*1,ALMOVAL,AHMOVAH,0MOVBL,10DIVBLMOV*2,ALMOV*3,AHPOPB*POPD*POPA*RETOUTP ENDP;以下为运算键处理子程序,该程序将第一个运算数据的数值计算出来并存入*1变量;或者将第二个运算数据的数值计算出来并存入*2变量;将运算符的值存入S变量COUNT PROCPUSHA*PUSHB*PUSHD*MOVD*,0CALLBITP ;测试*中的数据是多少位CMPCC,4 ;输入的数据是4位数?JZC4CMPCC,3
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 课程设计 报告 8255 实现 十进制 计算器

链接地址:https://www.desk33.com/p-10264.html