微机原理课程设计_简易计算器的设计.docx
微机原理课程设计_简易计算器的设计 目录 一前言 (1) 二总体设计 (2) 三硬件设计 (2) 3.1微处理器8086芯片 (2) 3.2可编程并行接口芯片8255A (3) 3.44 3.5 4.1 4.2 五仿真 一前言 1.1 软件硬件调试、编写设计报告等问题,真正做到理论联系实际,提高动手能力和分析问题、解决问题的能力,实现由学习知识到应用知识的初步过渡。通过本次课程设计使学生熟练掌握微机系统与接口扩展电路的设计方法,熟练应用8086汇编语言编写应用程序和实际设计中的硬软件调试方法和步骤,熟悉微机系统的硬软件开发工具的使用方法。 通过课程设计实践,不仅要培养学生事实求是和严肃认真的工作态度,培养学生的实际动手能力,检验学生对本门课学习的情况,更要培养学生在实际的工程设计中查阅资料,撰写设计报告表 达设计思想和结果的能力。 1.2课程设计指导及要求 在课程设计时,23名同学组成1个设计小组,分别完成项目的功能设计、电路编辑及调试、编码及调试和课程设计报告编写工作。同批次同学中选择同一题的不超过3组。在教师指导下,可以相互讨论。每设计小组提交1份设计报告,设计报告由设计小组同学独立完成,不得互相抄袭。教师的主导作用主要在于指明设计思路,启发学生独立设计的思路,解答疑难问题和按设计进度进行阶段审查。学生必须发挥自身学习的主动性和能动性,主动思考问题、分析问题和解决问题,而 同时使“输入回答”线有效,作为对外设的响应。外设在收到这个回答信号后,就撤消数据和“输入准备好”信号。数据到达接口中后,接口会在“状态寄存器”中设置输入准备好标志,或者向CPU 发一个中断请求。CPU 可用查询方式或中断方式从接口中读取数据。接口中的数据被读取后,接口会自动清除状态寄存器中的标志,且 撤消对CPU 的中断请求。 在输出过程中,每当输出寄存器可以接收数据,接口就会将状态寄存器中“输出准备好”状态置1或向CPU发一个中断请求,CPU可用查询或中断方式向接口输出数据。当CPU输出的数据到达接口后,接口会清除“输出准备好”状态,把数据送往外设,并向外设发一个“数据输出准备好”信号。外设受到驱动后,便接收数据,并向接口电路发一个“输出回答”信号,接口收到该回答信号后,又将状态寄存器中“输出准备好”置位,以便CPU输出下一个数据。 定义工作方式控制字: 3.3LED数码管 LED 8位I/O 从这7,其显示原理与COM 3.44× 个I/O 是有原因的, 4×4键 所以只能是PC口接键盘。 3.5硬件原理图 四软件设计 4.1程序流程图 (1)键盘扫描程序流程图: (2 4.2源代码 DATASEGMENT X DB ? ;存放数据的每一位 X1 DW ? ;存放第一个数据值 X2 DW ? ;存放第二个数据值 Y DW ? ;存放运算结果 S DB ?;存放运算符号值 E DB ?;按下等号键标记 CC DB ?;存放运算数据位数 H DB 0;存放按键行号 L DB 0;存放按键列号 DISCODE DB 3FH,06H,5BH,4FH, 66H,6DH,7DH,07H, 7FH,6FH,77H,7CH, ; MOV L,0 MOV BL,01H MOV BH,0FEH;扫描法读键值:从第一行开始测试,即PC0输出低电平NEXT: MOV AL,BH OUT 44H,AL NEXTH: IN AL,40H ;读列值,判断是第几列有键按下 TEST AL,BL;从第一列开始判断 JZ WAIT0 ROL BL,1 CMP BL,10H;当前行状态下没有列有键按下,则转为对下一行的测试 JZ NEXTL INC H ;每判断一列,列号加1 JMP NEXTH ;再对下一列进行判断 NEXTL: MOV H,0 MOV BL,01H ROL BH,1;对下一行测试,让下一个PC口输出低电平 CMP BH,0EFH JZ EXIT INC L JMP NEXT WAIT0: IN AL,40H;若有键按下,则等该按键松开后再计算键值 ; 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 KEYVALUEENDP ;以下为清除键处理子程序,按下清除键后,X变量全部清0 CLEARPROC MOV X3,0 MOV X2,0 MOV X1,0 MOV X0,0 CALL BITP RET CLEARENDP ;以下为等号键处理子程序,该子程序负责将第二个运算数据的数值计算出来存入X2变量; ; 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 BL MOV X2,AL MOV X3,AH POP BX POP DX POP AX RET OUTPENDP ;以下为运算键处理子程序,该程序将第一个运算数据的数值计算出来并存入X1变量;或者将第二个运算数据的数值计算出来并存入X2变量 ;将运算符的值存入S变量 COUNTPROC C4: C3: C2: 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变量 MOV X2,0 MOV X1,0 MOV X0,0 EXIT3:POP DX POP BX POP AX RET COUNTENDP ;以下为数字键处理子程序 ;该程序,将输入的数据按位存放在X变量中,并由CC记录数据的位数NUMBERPROC CMP E,1 LL: MOV CC,0;如果数据超过4位,重新从最低位开始存放 MOV X2,0 MOV X1,0 MOV X0,0 EXIT2:CALL DISP;调显示子程序,显示输入的数据 RET NUMBERENDP ;加法子程序 ADDPPROC PUSH AX