8086简易计算器的设计 微机原理 计硬报告.doc
计算机硬件技术实践报告题目 简易计算器的设计 姓名 专业 自动化(电站方向) 班级 学号 上海电力学院自动化工程学院实践报告内容(目录)一. 设计题目二. 开发目的三. 小组成员分工及成果四. 设计方案以及论证五. 硬件原理图(包括芯片的选型介绍)六. 程序流程图(包括各个子系统和子过程的程序流程)七. 程序清单,要有适当的注释八. 程序运行结果分析与预测九. 结果评述或总结(对实验结果进行分析,对实验过程进行总结,系统改进升级建议或者提出新的方案等。)一. 设计题目:用8086设计一个能实现09整数加法运算的计算器,并用2位LED数码显示. 键盘包括0-9,+ ,-,*,/,=,ON/C;共16个按键.能实现简单的清零操作,减法运算,乘法运算.二.开发目的:通过课程设计,熟悉和掌握微机系统的软件、硬件设计的方法、设计步骤,得到微机开发应用方面的初步训练。培养集体讨论设计题目的总体设计方案、编程、软件硬件调试、编写设计报告等问题,做到理论联系实际,提高动手能力和分析问题、解决问题的能力,实现由学习知识到应用知识的初步过渡。通过本次课程设计熟练运用程序对8255控制键盘和LED显示的控制,完成计算器加减法的应用,并熟练应用8086汇编语言编写应用程序和实际设计中的硬软件调试方法和步骤,熟悉微机系统的硬软件开发工具的使用方法。三.小组成员分工及成果:本组的三个成员一起讨论研究简易计算器设计的主要方案。粗略设计程序流程图以确定简易计算器设计的大概框架。明确目的后各自查询资料了解设计原理、逐步清晰设计思路。以下为大体分工:主要负责:1、设计主要程序,编写;2、查找资料验证修改;主要负责:1、选择需要用的各个芯片;2、设计硬件原理图;主要负责:1、各个芯片功能的资料查找; 2、设计程序流程图四.设计方案以及论证:利用程序不断扫描所设的按钮键盘是不是有输入,如果没有就一直扫描,如果有就调用子程序进行判断,是数值则进行存储并同时进行显示,是运算符号等就调用相应的子程序进行操作,操作后则继续利用程序不断扫描键盘是不是有输入,从而实现部分十进制数的加、减、乘、除的运算。运算完成后根据程序将运算的结果储存到锁存器中并显示到LED显示器上。主要器件选择是采用8086CPU做主控制器,8255作为并行接口电路实现按键扫描以及数码管的显示。通过8255A的C口和A口实现键盘的接入,通过键盘的不断扫描,如果有键按下,通过查表法分别将输入的数据读到AL中并保存在第一个和第二个数里,将8255A的B端口接上共阴极LED灯,将输入的数据通过查表法,将四段码送共阴极LED灯显示,当按下=时,通过判断字符,8086来实现不同的操作,并将结果在LED灯上显示,当按下“C”时,将数据先清零,同时LED灯上显示为“00”。五.硬件原理图(包括芯片的选型介绍):芯片选型及介绍:(1)8086CPU:8086通过数据总线、地址总线、控制总线完成对8253和8255的读写工作,与接口部件实现数据传送,让接口部件实现预计的功能.8086CPU的40条引脚信号可按功能分可分为四类,它们是:地址总线,数据总线,控制总线,其它(时钟与电源)。 最小模式下一些引脚功能(MN/MX接5V):AD15AD0,地址/数据总线 A19/S6A16/S3,地址/状态总线 RD,读信号 WR,写信号 M/IO,存储器/输入输出控制信号ALE,地址锁存允许信号READY(Ready),准备就绪信号INTR,可屏蔽中断请求信号INTA,中断响应信号 NMI,非屏蔽中断请求信号RESET,系统复位信号 DEN,数据允许信号 DT/R,数据发送/接收控制信号HOLD,总线保持请求信号输入 HLDA,总线保持响应信号 TEST,测试信号 CLK,时钟输入信号 VCC(+5V),GND (2)8255A可编程并行接口芯片:Intel 8086/8088 系列的可编程外设接口电路(Programmable Peripheral Interface)简称 PPI,型号为8255(改进型为8255A及8255A-5),具有24条输入/输出引脚、可编程的通用并行输入/输出接口电路。它是一片使用单一+5V电源的40脚双列直插式大规模集成电路。8255A的通用性强,使用灵活,通过它CPU可直接与外设相连接。 8255A可为8086微处理器与外部设备之间提供并行输入/输出的通道。通过编程可以设置芯片的工作方式,并行接口是在多根数据线上,以数据字节/字与I/O设备交换信息。8255A由数据总线缓冲器、读/写控制逻辑电路、A组和B组控制电路以及数据端口A、B和C组成。数据总线缓冲器是8255A与系统数据总线的接口,CPU输入输出的数据、CPU输出的控制字和外设的状态信息都是通过这个缓冲器传送的。读/写控制逻辑电路把CPU的控制命令或输出数据送至相应的端口,把外设的状态信息或输入数据通过相应的端口送至CPU。数据端口PA和PB都包含一个8位输出锁存器/缓冲器和一个8位输入锁存器,(3)74HC373:其中D0-D7为数据输入端,Q0-Q7为输出端。当三态允许控制端OE为低电平时,Q0-Q7为正常逻辑状态,可用来驱动负载或总线,当OE为高电平时,Q0-Q7成高阻态,不驱动总线。当锁存允许端LE为高电平时,Q随数据D而变,当LE为低电平D被锁存在已建立的数据电平。(4)74HC138:74HC138是一款高速CMOS器件,74HC138引脚兼容低功耗肖特基TTL(LSTTL)系列。74HC138译码器可接受3位二进制加权地址输入(A0, A1和A2),并当使能时,提供8个互斥的低有效输出(Y0至Y7)。74HC138特有3个使能输入端:两个低有效(E1和E2)和一个高有效(E3)。除非E1和E2置低且E3置高,否则74HC138将保持所有输出为高,74HC138为反相输出,它按照三位二进制输入码和赋能输入条件,从8 个输出端中译出一个 低电平输出。两个低电平有效的赋能输入端和一个高电平有效的赋能输入端减少了扩展所需要的外接门或倒相器。六.程序流程图:七.程序清单DATA SEGMENT NUM1 DB 03H DUP(0) NUM DB 03H DUP(0)DATA ENDSSTACK SEGMENT DW 100 DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKPORTA EQU 30HPORTB EQU 32HPORTC EQU 34HPORT8255 EQU 36HMAIN PROC FARSTART: MOV AX,DATA MOV DS,AX MOV DX,PORT8255 MOV AL,81H OUT DX,ALLOPL: XOR AH,AH CALL KEY CMP AH,00H JZ LOPL CMP AL,0FH JZ CCCL CMP AL,0AH JZ LOPL JNC LOPL OUT 32H,ALLOPL2: LEA SI,NUM MOV SI,AL PUSH AXLOPL1: XOR AH,AH CALL KEY CMP AH,00H JZ LOPL1 CMP AL,0FH JZ CCCL CMP AL,0AH JZ XX1 CMP AL,0BH JZ XX2 CMP AL,0CH JZ XX3D CMP AL,0DH JZ XX4D JMP LOPL1CCCL: MOV AL,00H OUT 32H,AL JMP LOPLXX3D: CALL XX3XX4D: CALL XX4MAIN ENDPXX1 PROC NOP ;加LOPL3: XOR AH,AH CALL KEY CMP AH,00H JZ LOPL3 CMP AL,0FH JZ CCCL CMP AL,0AH JZ LOPL3 JNC LOPL3 OUT 32H,AL PUSH AX LEA SI,NUM MOV SI+1,ALLOPL4: XOR AH,AH CALL KEY CMP AH,00H JZ LOPL4 CMP AL,0FH JZ CCCL CMP AL,0EH JZ XXX1 JMP LOPL4XXX1: LEA SI,NUM MOV AL,SI AND AL,0FH MOV DL,SI+1 AND DL,0FH ADD AL,DL DAA OUT 32H,AL JMP LOPLXX1 ENDPXX2 PROC NOP ;减LOPL5: XOR AH,AH CALL KEY CMP AH,00H JZ LOPL5 CMP AL,0FH JZ CCCL CMP AL,0AH JZ LOPL5 JNC LOPL5 OUT 32H,AL PUSH AX LEA SI,NUM MOV SI+1,ALLOPL6: XOR AH,AH CALL KEY CMP AH,00H JZ LOPL6 CMP AL,0FH JZ CCCL7 CMP AL,0EH JZ XXX2 JMP LOPL6XXX2: LEA SI,NUM MOV AL,SI AND AL,0FH MOV DL,SI+1 AND DL,0FH SUB AL,DL ADD AL,00H DAA OUT 32H,AL JMP LOPLCCCL7: MOV AL,00H OUT 32H,AL JMP LOPLXX2 ENDPXX3 PROCLOPL7: XOR AH,AH CALL KEY ;乘 CMP AH,00H JZ LOPL7 CMP AL,0FH JZ CCCL2 CMP AL,0AH JZ LOPL7 JNC LOPL7 OUT 32H,AL PUSH AX LEA SI,NUM MOV SI+1,ALLOPL8: XOR AH,AH CALL KEY CMP AH,00H JZ LOPL8 CMP AL,0FH JZ CCCL3 CMP AL,0EH JZ XXX3 JMP LOPL8XXX3: LEA SI,NUM MOV AL,SI AND AL,0FH MOV DL,SI+1 AND DL,0FH MUL DL AAM MOV CL,4 SAL AH,CL OR AL,AH OUT 32H,AL JMP LOPLCCCL2: MOV AL,00H OUT 32H,AL JMP LOPLCCCL3: MOV AL,00H OUT 32H,AL JMP LOPLXX3 ENDPXX4 PROC ;除LOPL9: XOR AH,AH CALL KEY CMP AH,00H JZ LOPL9 CMP AL,0FH JZ CCCL5 CMP AL,0AH JZ LOPL9 JNC LOPL9 OUT 32H,AL PUSH AX LEA SI,NUM MOV SI+1,ALLOPL10: XOR AH,AH CALL KEY CMP AH,00H JZ LOPL10 CMP AL,0FH JZ CCCL4 CMP AL,0EH JZ XXX4 JMP LOPL10XXX4: LEA SI,NUM MOV AL,SI AND AL,0FH MOV BL,SI+1 AND BL,0FH AND AX,000FH DIV BL OUT 32H,AL JMP LOPLCCCL4: MOV AL,00H OUT 32H,AL JMP LOPLCCCL5: MOV AL,00H OUT 32H,AL JMP LOPLXX4 ENDPKEY PROC NOP LEA SI,NUM1 MOV AL,0EH OUT 30H,AL IN AL,34H CMP AL,07H JZ LL7 CMP AL,0BH JZ LL8 CMP AL,0DH JZ LL9 CMP AL,0EH JZ LDIVSS1: MOV AL,0DH OUT 30H,AL IN AL,34H CMP AL,07H JZ LL4 CMP AL,0BH JZ LL5 CMP AL,0DH JZ LL6 CMP AL,0EH JZ LMULSS2: MOV AL,0BH OUT 30H,AL IN AL,34H CMP AL,07H JZ LL1 CMP AL,0BH JZ LL2 CMP AL,0DH JZ LL3 CMP AL,0EH JZ LSUBSS3: MOV AL,07H OUT 30H,AL IN AL,34H CMP AL,07H JZ SCLC CMP AL,0BH JZ LL0 CMP AL,0DH JZ LEQU CMP AL,0EH JZ LADD JMP KCLCLDIV: MOV AL,0DH JMP LCLCLL0: MOV AL,00H JMP LCLCLL1: MOV AL,01H JMP LCLCLL2: MOV AL,02H JMP LCLCLL3: MOV AL,03H JMP LCLCLL4: MOV AL,04H JMP LCLCLL5: MOV AL,05H JMP LCLCLL6: MOV AL,06H JMP LCLCLL7: MOV AL,07H JMP LCLCLL8: MOV AL,08H JMP LCLCLL9: MOV AL,09H JMP LCLCLADD: MOV AL,0AH JMP LCLCLSUB: MOV AL,0BH JMP LCLCLMUL: MOV AL,0CH JMP LCLCLEQU: MOV AL,0EH JMP LCLCSCLC: MOV AL,0FHLCLC: MOV SI,AL MOV AH,01HKCLC: RETKEY ENDPCODE ENDS END START八.程序运行结果分析与预测:连接完线路图后把编好的程序关联到8086CPU中进行运行调试,肯定可以实现加减乘除运算,例如3+8=11,通过按键分别输入“3”, “+”,“8”, “=”后,LED灯上将显示出“11”.能实现清零操作,当按下“ON/C”时,LED上显示“00”。如图3+8=11当输入“3”, “*”,“8”, “=”后,LED灯上将显示出“24”.如图 3*8=24十. 结果评述:本期刚学过微机原理,学得不是很深入,仅限于课本知识的掌握,而此次 课程设计将会是一个很好的机会,来考察自己对课本知识的掌握以及应用情况。本次课程设计是二到三人人一组,并且自由选择设计课题,我们小组选择了简易计算器的课题,在做的过程中也遇到很多困难。通过本次课程设计实验我们初步接触了较复杂程序的设计。在实验中用程序对8255进行控制键盘和LED显示的控制,完成计算器加减法的应用。在程序编写中,明白和掌握程序的原理和实现方式。学习和掌握计算机中常用接口电路的应用和设计技术,充分认识理论知识对应用技术的指导性作用,进一步加强理论知识与应用相结合的实践和锻炼。通过这次设计实践使我们的设计水平和对所学的知识的应用能力以及分析问题解决问题的能力得到了全面提高.我对微机原理有了进一步的理解,对8086、8255A的工作原理、用途以及使用时的注意事项等都有了深刻的认识,对这类的课程设计也从毫无概念到了有清晰的认识的转变,相信再做这类的课程设计时不会再迷茫、不知从何入手。总之,这次课程设计对于我们有很大的帮助,我更加深入地理解了,微机原理课程上讲到的各种芯片的功能,以及引脚的作用,同时加深了对于主要芯片的应用的认识,同时在试验室的环境里熟悉了汇编程序的编写过程和运行过程,最后还提高了自己的动手能力。感谢老师的悉心指导。