ImageVerifierCode 换一换
格式:DOCX , 页数:9 ,大小:23.90KB ,
资源ID:7456142      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7456142.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(微机原理课程设计用8255A实现4位十进制计算器.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、微机原理课程设计用8255A实现4位十进制计算器 微机原理课程设计(用8255A实现4位十进制计算器) 课程设计报告( 2012- 2013 年度第 1 学期)名 题 院 班 学称:微型计算机原理及应用 目:用 8255A 实现四位十进制数简单计算器 系:控制与计算机工程学院 级:自动化 1003 班 号:1101190302 昌学生姓名:范指导教师:王震宇 设计周数:一周 成 绩:同 组 人:贾旭 郭欢 刘玉婷日期:2013 年 1 月 5 日课课程设计报告一、 课程设计的目的与要求课程设计是培养和锻炼学生在学习完本门课后综合应用所学理论知识,解决实际工程设计和应用问题 的能力的重要教学环节

2、。 它具有动手、 动脑和理论联系实际的特点, 是培养在校工科大学生理论联系实际、 敢于动手、善于动手和独立自主解决设计实践中遇到的各种问题能力的一个重要教学环节。 通过课程设计,要求学生熟悉和掌握微机系统的软件、硬件设计的方法、设计步骤,使学生得到微机 开发应用方面的初步训练。 让学生独立或集体讨论设计题目的总体设计方案、编程、软件硬件调试、编写 设计报告等问题,真正做到理论联系实际,提高动手能力和分析问题、解决问题的能力,实现由学习知识 到应用知识的初步过渡。 通过本次课程设计使学生熟练掌握微机系统与接口扩展电路的设计方法,熟练应 用 8086 汇编语言编写应用程序和实际设计中的硬软件调试方

3、法和步骤,熟悉微机系统的硬软件开发工具 的使用方法。 我组根据微机原理课程所学相关知识及实验教程相关内容,在基于 proteus 平台,使用汇编语言,以 8086 为核心的情况下,配合可编程并行接口器件 8255A,LED 数码管等器件实现可进行简单四位数加减 乘除法功能的十进制计算器。 在课程设计实践中,我们不仅锻炼了实际动手能力,培养了团队精神和严肃 认真的工作态度, 更增强了自己在实际的工程设计中查阅资料, 撰写设计报告表达设计思想和结果的能力。 二、 课程设计进度及任务分工课设进度:1.选择课程设计题目,查阅相关资料。 (全体组员) 2.需求分析及总体设计。 (全体组员) 3.软硬件设

4、计。 (范昌负责主程序的框架与整体调试、LED 数码显示部分及硬件构架,贾旭负 责键盘管理部分,郭欢、刘玉婷负责算法及相关程序) 4.仿真调试。 (范昌、贾旭) 5.总结及撰写设计报告。 (郭欢、刘玉婷) 6.个人总结(全体组员)三、设计正文1 需求分析 ? ? ? ? ? ? 操控核心微处理器 8086 芯片 可编程并行接口芯片 8255A 可编程定时/计数器 8253A 对输入扫描的矩阵键盘 显示模块 LED 数码管 辅助器件如 74LS138 译码器、74LS373 等2 总体设计 ? ? 确定键盘是否有输入(使用程序不断进行扫描) 若有输入就调用子程序进行判断,是数值则进行存储并同时进

5、行显示,是运算符号等就调用1课课程设计报告相应的子程序进行操作 ? ? 继续扫描键盘是否有输入,从而实现 4 位十进制数以内的加减乘除法或者扩展功能运算 运算完成后将运算的结果储存并显示到 LED 显示器上3 硬件设计 见附录。 4 软件设计 见附录。 四、课程设计总结或结论(1)个人总结 本次课程设计我们做的课题是用 8255A 实现 4 位十进制数简易计算器,四人一组,我负责 主程序的框架与整体调试、LED 数码显示部分及硬件构架。 对于主程序的框架,是整个计算器 的核心, 通过与其他组员的商量我们最终确定了我们的主要算法: 通过一个 4*4 键盘, 输入数据, 实现加减乘除操作,将输入的

6、数据和运算符分别存储,接收到“=”时进行运算,并将结果输出。 看起来简单的算法,由于涉及到十进制和十六进制的转换,其中就需要很多中间的转换程序。 经 过反复修改与查阅资料,我们的程序最终能够完成部分预期功能。 我还负责 LED 数码管显示部分的程序,四位七段数码管的显示,原理看起来简单,但是实 际操作时却有各种各样的毛病, 按照原理写好程序, 往往不能达到预期效果, 数码管又是不显示, 有时会显示乱码,有时会闪烁,所有这些,都要一步一步调试,加入合适的延时程序是关键,延 时过长、 过短都不好。 显示乱码是程序方面出了问题, 经过一次次调试, 终于得到了稳定的显示, 我对数码管的应用也更熟练了。

7、 由于我之前有接触过 proteus 仿真软件,所以我负责硬件的搭建,熟悉使用 proteus 软件对我 们专业来说是一项基本技能,通过一次次摸索与XX,我对这个软件的使用也越来越熟悉,学会 了怎么连总线,怎么仿真,怎么快速连线,以及常用元件的搜索。 其中最让我满足的是键盘的设 计,如果用 16 个按钮排列当然可以实现我们的要求,但是每次按按钮有很不方便,所以我在网 上查询资料,学会了用 proteus 自身的模型制作自己的元件,上图左边是普通矩阵键盘,右图是 我利用 proteus 自身模型制作的的键盘,感觉很满意。 整个硬件仿真的搭建,由于对软件的不熟2课课程设计报告悉,本身设计的问题,花

8、了我很长时间,而且重复连接了很多次,最后我们成功仿真出了我们的 计算器。 通过本次课程设计,就我本身来说我学会了很多东西,无论是软件上汇编语言程序的编写与 调试,还是硬件的搭建技巧与相关软件的应用的能力都得到了很大提高,同时也锻炼了我的自我 学习能力与交流合作能力,相关软件的学习使用,相关芯片与元件的使用与选择能力都在一定程 度上有了很大进步。 同时,软硬件的结合,也体现了我们自动化专业的特点。 最后,有一点遗憾的就是做好了四位的简易计算器,我们想进一步扩展做成八位的计算器, 但是难度有所加大,不是想象中的那么简单,数码管显示部分就花了很大精力去调试。 最后由于 时间关系没有完成 8 位计算器

9、的制作。 (2)团队总结 本次课程设计,我们是四人一组,团队合作的要求就比较高。 因为选题的关系,需要更多的 人合作,所以决定四人组队,各自发挥特长。 在设计过程中,我们配合得很好,初期的查阅资料共享,极大地体现了我们人数上的优势。 对于整个设计的交流更让我们在大方向上走上了正确的道路,少走了很多弯路。 我们的课题看起 来简单,其实不然,仔细分析,涉及的知识面很广,很考验我们的基本功和自学能力。 软件方面 的算法由于是大家一起讨论后决定的,一般都是可行的,也有很多难点,比如说十进制与十六进 制的转换,数据的输出与存储等,但是在我们的通力合作下一一解决了我们面临的很多难题。 硬 件方面用的是 p

10、roteus 软件仿真,硬件电路的设计也是一个难点,但是通过查阅资料与相互交流, 我们的电路最终是可行的,虽然之前失败了好几次。 软件和硬件的结合再一次考验了我们的合作 精神,软件是建立在硬件上的,硬件体现软件的功能,主要负责硬件和组要负责软件的同学建立 了很好的默契,相互学习,圆满的完成了任务。 本次课程设计我们对自己的成果相对比较满意,在设计的过程中,大家相互学习,相互帮助, 都收获很多。 但是我们也有很多不足的地方,比如四位的计算器位数太少,不能进行小数运算等, 这些都是对我们能力的极大挑战,为了解决这些问题我们也进行了积极探索,设计了一个八位的 简单计算器,但是由于时间有限,没能完成设

11、计。 3课课程设计报告五、参考文献1清华大学 TPC2003A 实验指导书,2006 版 2新编 16/32 位微型计算机原理及应用,李继灿主编,清华大学出版社,2008 版,第四版 3 陈继红.微机原理及应用M.北京:高等教育出版社,2011 年,276-283 页 4 周明德.微型计算机系统原理及应用M.北京:清华大学出版社,2007 年4课课程设计报告附录一、 软件设计1. 总程序流程图扫描计算键值数值?运算符?清零“=”?加法运算“+”?减法运算“-”?乘法运算“*”?显示存储除法运算5课课程设计报告2. 扫描程序流程图开始 初始化N 按键闭合 Y 延时 12msN 按键闭合 Y 按键

12、扫描N 按键释放 Y 保存键值结束3. 程序代码 ;8255A 端口地址:A 口:40H,B 口:44H,C 口:42H,控制端口:46H DATA SEGMENT X DB X1 DW ? X2 DW Y DW S DB E DB CC DB ? , ? , ? , ? ;存放数据的每一位 ;存放第一个数据值 ? ;存放第二个数据值 ? ;存放运算结果 ? ;存放运算符号值 ? ;按下等号键标记 ? ;存放运算数据位数6课课程设计报告H DB 0 L DB 0 DISCODE DB;存放按键行号 ;存放按键列号 3FH,06H,5BH,4FH, 66H,6DH,7DH,07H, 7FH,6F

13、H,77H,7CH, 39H,5EH,79H,71H;段码表DATA ENDS CODE SEGMENT ASSUME CS:CODE DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL,90H OUT 46H,AL MOV DI,OFFSET X+3 CALL KEY JMP KKK;设置为 A 口输入,B 口输出,C 口输出 ;DI 指向 X 的高位 ;扫描按键KKK:;以下为按键扫描子程序,程序返回后,在变量 H 和 L 中存放当前按键的行列号 KEY PROC CHECK: CALL DISP ;等待按键按下的同时进行显示 MOV AL,0F0H ;

14、所有行输出低电平 OUT 44H,AL IN AL,40H CMP AL,0FFH ;读列值 JZ CHECK ;若都为高电平则无键按下,等待 MOV CX,50 LOOP $ ;延时消抖 IN AL,DX ;重读列值 CMP AL,0FFH JZ CHECK ;无键按下一直等待 MOV H,0 ;有键按下,先把行列号变量清 0 MOV L,0 MOV BL,01H MOV BH,0FEH ;扫描法读键值:从第一行开始测试,即 PC0 输出低电平 NEXT: MOV AL,BH OUT 44H,AL NEXTH: IN AL,40H ;读列值,判断是第几列有键按下 TEST AL,BL ;从第

15、一列开始判断 JZ WAIT0 ROL BL,1 CMP BL,10H ;当前行状态下没有列有键按下,则转为对下一行的测试 JZ NEXTL INC H ;每判断一列,列号加 1 JMP NEXTH ;再对下一列进行判断7课课程设计报告NEXTL: MOV H,0 MOV BL,01H ROL BH,1 ;对下一行测试,让下一个 PC 口输出低电平 CMP BH,0EFH JZ EXIT INC L JMP NEXT WAIT0: IN AL,40H ;若有键按下,则等该按键松开后再计算键值 CMP AL,0FFH JNZ WAIT0 MOV CX,50 LOOP $ ;延时消抖 IN AL,

16、40H CMP AL,0FFH JNZ WAIT0 CALL KEYVALUE ;调计算键值子程序 EXIT: RET KEY ENDP ;以下为计算键值子程序,通过行列号计算键值(键值=行号*4+列号)键值存放在 DL 寄存器中 KEYVALUE PROC MOV DL,L MOV DH,H SHL DL,1 SHL DL,1 ;列号乘 4 ADD DL,DH CMP DL,9 ;按下的是数字键 JNG NUM_CALL CMP DL,14 JL CONT_CALL ;按下的是运算键 CMP DL,14 JZ OUTP_CALL ;按下的是等于键 CMP DL,15 JZ CLR_CALL

17、;按下的是清除键 NUM_CALL: CALL NUMBER ;调数字键处理子程序 JMP EXIT1 CONT_CALL: MOV S,DL ;存放运算键的键值 MOV E,0 CALL COUNT 调运算键处理子程序,计算第一个加数 JMP EXIT1 OUTP_CALL: CALL OUTP ;调等号键处理子程序 JMP EXIT1 CLR_CALL: CALL CLEAR ;调清除键处理子程序 EXIT1: RET KEYVALUE ENDP8课课程设计报告;以下为清除键处理子程序,按下清除键后,X 变量全部清 0 CLEAR PROC MOV X3,0 MOV X2,0 MOV X1

18、,0 MOV X0,0 CALL BITP RET CLEAR ENDP ;以下为等号键处理子程序,该子程序负责将第二个运算数据的数值计算出来存入 X2 变量 ;并根据运算符号,调用相应的运算子程序 OUTP PROC PUSH AX PUSH DX PUSH BX INC E CALL COUNT ;调运算键处理子程序,计算第二个运算数据 CMP S,10 JZ ADD_CALL ;运算符为加号,则调用加法子程序 CMP S,11 JZ SUB_CALL ;运算符为减号,则调用减法子程序 CMP S,12 JZ MUL_CALL ;运算符为乘号,则调用乘法子程序 CMP S,13 CALL

19、DIVP ;运算符为除号,则调用除法子程序 JMP STORE1 ADD_CALL: CALL ADDP JMP STORE1 SUB_CALL: CALL SUBP JMP STORE1 MUL_CALL: CALL MULP STORE1: MOV AX,Y ;以下程序将各运算子程序返回的运算结果,按位分解,送入 X 变量 MOV DX,0 MOV BX,1000 DIV BX MOV X0, AL MOV AX,DX MOV BL,100 DIV BL MOV X1,AL MOV AL,AH MOV AH,0 MOV BL,10 DIV BL9课课程设计报告MOV MOV POP POP

20、 POP RETX2,AL X3,AH BX DX AXOUTP ENDP ;以下为运算键处理子程序,该程序将第一个运算数据的数值计算出来并存入 X1 变量 ;或者将第二个运算数据的数值计算出来并存入 X2 变量 ;将运算符的值存入 S 变量 COUNT PROC PUSH AX PUSH BX PUSH DX MOV DX,0 CALL BITP ;测试 X 中的数据是多少位 CMP CC,4 ;输入的数据是 4 位数 ? JZ C4 CMP CC,3 ;输入的数据是 3 位数 ? JZ C3 CMP CC,2 ;输入的数据是 2 位数 ? JZ C2 JMP C1 ;输入的数据是 1 位数

21、 ? C4: MOV AX,0 MOV AL,X0 MOV BX,1000 MUL BX MOV DX,AX C3: MOV AL,X1 MOV BL,100 MUL BL ADD DX,AX C2: MOV AL,X2 MOV BL,10 MUL BL ADD DX,AX C1: MOV AL,X3 MOV AH,0 ADD DX,AX CMP E,1 JNZ X1_S MOV X2,DX ;按下的是等号,则将第二个运算数据的值存入 X2 变量 JMP EXIT3 X1_S: MOV X1,DX ;按下的是运算符号,则将第一个运算数据的值存 X1 变量 MOV X3,0 ;清空 X 变量 M

22、OV X2,010课课程设计报告MOV X1,0 MOV X0,0 EXIT3: POP DX POP BX POP AX RET COUNT ENDP ;以下为数字键处理子程序 ;该程序,将输入的数据按位存放在 X 变量中,并由 CC 记录数据的位数 NUMBER PROC CMP E,1 JNZ CONTINUE MOV E,0 CALL CLEAR CONTINUE:CMP CC,0 ;目前数据为 0 位,即没有数据,则转到 SSS JZ SSS PUSH AX PUSH DX MOV AL,X3 MOV AH,X2 MOV DL,X1 MOV DH,X0 MOV CX,8 LL: SH

23、L AX, 1 RCL DX,1 LOOP LL MOV X3,AL MOV X2,AH MOV X1,DL MOV X0,DH POP DX POP AX SSS: MOV DI,DL ;将当前键入的数据存放到 X 的最低位 INC CC ;数据位数加 1 CMP CC,4 ;判断数据位数 JNG EXIT2 MOV CC,0 ;如果数据超过 4 位,重新从最低位开始存放 MOV X2,0 MOV X1,0 MOV X0,0 EXIT2: CALL DISP ;调显示子程序,显示输入的数据 RET NUMBER ENDP ;加法子程序11课课程设计报告ADDP PROC PUSH AX MO

24、V AX,X1 ADD AX,X2 MOV Y,AX POP AX RET ADDP ENDP ;减法子程序 SUBP PROC PUSH AX MOV AX,X1 SUB AX,X2 MOV Y,AX POP AX RET SUBP ENDP ;乘法子程序 MULP PROC PUSH AX PUSH DX MOV AX,X1 MOV DX,X2 MUL DX MOV Y,AX POP DX POP AX RET MULP ENDP ;除法子程序 DIVP PROC PUSH AX PUSH BX PUSH DX MOV DX,0 MOV AX,X1 MOV BX,X2 DIV BX MOV

25、 Y,AX POP DX POP BX POP AX RET DIVP ENDP12课课程设计报告;显示子程序 ,将 X 中的数值按位显示出来 DISP PROC PUSH BX PUSH AX MOV BH,0 LEA SI,DISCODE CALL BITP ;测试 X 位数 CMP CC,4 JZ QIAN CMP CC,3 JZ BAI CMP CC,2 JZ SHI CMP CC,1 JMP G JMP NONE QIAN: MOV AH,11100000B ;从第 4 位开始显示 MOV AL,AH OUT 44H,AL MOV BL,X0 MOV AL,SI+BX OUT 42H

26、,AL CALL DELY MOV AL,0 OUT 42H,AL BAI: MOV AH,11010000B ;从第 3 位开始显示 MOV AL,AH OUT 44H,AL MOV BL,X1 MOV AL,SI+BX OUT 42H,AL CALL DELY MOV AL,0 OUT 42H,AL SHI: MOV AH,10110000B ;从第 2 位开始显示 MOV AL,AH OUT 44H,AL MOV BL,X2 MOV AL,SI+BX OUT 42H,AL CALL DELY MOV AL,0 OUT 42H,AL G: MOV AH,01110000B ;从第 1 位开

27、始显示 MOV AL,AH13课课程设计报告OUT 44H,AL MOV BL,X3 MOV AL,SI+BX OUT 42H,AL CALL DELY JMP EXIT4 NONE: MOV AL,0 OUT 42H,AL EXIT4: POP AX POP BX RET DISP ENDP ;分析数据位数子程序 BITP PROC CMP X0,0 JNZ FOURBIT CMP X1,0 JNZ THREEBIT CMP X2,0 JNZ TOWBIT CMP X3,0 JNZ ONEBIT JMP ZER0BIT FOURBIT: MOV CC,4 JMP EXIT5 THREEBIT

28、: MOV CC,3 JMP EXIT5 TOWBIT: MOV CC,2 JMP EXIT5 ONEBIT: MOV CC,1 JMP EXIT5 ZER0BIT: MOV CC,0 EXIT5: RET BITP ENDP ;延时子程序 DELY PROC PUSH MOV LOOP POP RET DELY ENDP CODE ENDS END;X 中没有数据,不显示;如果 X0不为 0,则数据为 4 位数 ;如果 X1不为 0,则数据为 3 位数 ;如果 X2不为 0,则数据为 2 位数 ;如果 X3不为 0,则数据为 1 位数 ;否则,没有数据CX CX,100 $ CXSTART1

29、4课课程设计报告二、 硬件设计 1.微处理器 8086 当引脚接高电平时,CPU 工作于最小模式。 此时,引脚信号 2431 的含义及其功能如 下: (1)INTA/(interrupt acknowledge) :可屏 蔽中断响应信号,输出,低电平有效。 CPU 通过信号对外设提出的可屏蔽中断请求做出 响应。 为低电平时,表示 CPU 已经响应外设 的中断请求,即将执行中断服务程序。 (2)ALE(address lock enable) :地址锁 存允许信号, 输出,高电平有效。 CPU 利用 ALE 信号可以把 AD15 AD0 地址/数据、A19/S6 A16/S3 地址/状态线上的地

30、址信息锁存在地址锁存器中。 (3)DEN/(data enable) :数据允许控制信号,输出,三态,低电平有效。 信号用作总线收 发器的选通控制信号。 当为低电平时,表明 CPU 进行数据的读/写操作。 (4)DT/(data transmit or receive) :数据发送/接收信号,输出,三态。 DT/信号用来 控制数据传送的方向。 DT/为高电平时,CPU 发送数据到存储器或 I/O 端口;DT/为低电平时, CPU 接收来自存储器或 I/O 端口的数据。 (5)IO/M/(memory I/O select) :存储器、I/O 端口选择控制信号。 信号指明当前 CPU 是 选择访

31、问存储器还是访问 I/O 端口。 为高电平时访问存储器,表示当前要进行 CPU 与存储器 之间的数据传送。 为低电平时,访问 I/O 端口,表示当前要进行 CPU 与 I/O 端口之间的数据 传送。 (6)WR/(write) :写信号,输出,低电平有效。 信号有效时,表明 CPU 正在执行写总线周 期,同时由信号决定是对存储器还是对 I/O 端口执行写操作。 (7)HLDA(hold acknowledge) :总线保持响应信号,输出,高电平有效。 HLDA 是与 HOLD 配 合使用的联络信号。 在 HLDA 有效期间,HLDA 引脚输出一个高电平有效的响应信号,同时总线 将处于浮空状态,

32、CPU 让出对总线的控制权,将其交付给申请使用总线的 8237A 控制器使用, 总线使用完后,会使 HOLD 信号变为低电平,CPU 又重新获得对总线的控制权。 (8)HOLD(bus hold request) :总线保持请求信号,输入,高电平有效。 在 DMA 数据传送 方式中, 由总线控制器 8237A 发出一个高电平有效的总线请求信号, 通过 HOLD 引脚输入到 CPU, 请求 CPU 让出总线控制权。 15课课程设计报告2. 可编程并行接口芯片 8255A RESET:复位输入线,当该输入端外于高电平时,所 有内部寄存器(包括控制寄存器)均被清除,所有 I/O 口均被置成输入方式。 PA0PA7:端口 A 输入输出线,一个 8 位的数据输 出锁存器/缓冲器, 一个 8 位的数据输入锁存器。 PB0PB7:端口 B 输入输出线, 一个 8 位的 I/O 锁 存器, 一个 8 位的输入输出缓冲器。 PC0PC7:端口 C 输

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

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