《微机原理模拟计算器设计课程设计22933.pdf》由会员分享,可在线阅读,更多相关《微机原理模拟计算器设计课程设计22933.pdf(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 课程设计任务书 课 程 名 称 微机原理及应用 院 部 名 称 机电工程学院 专 业 电气工程及其自动化 班 级 吴映阳 指 导 教 师 李国利 金陵科技学院教务处制 2 摘 要 学了微型计算机原理与应用课程之后,为了巩固和检测所学知识,我选择基于8088CPU的模拟计算器设计。要完成设计首先需要构建简单的微型计算机应用系统,其次是确定组成各部件的芯片,然后画原理图并且用仿真软件仿真。仿真正确后再连接硬件电路,电路连接完成后进行调试。设计过程中我们用到了8088CPU、可编程计时器8253、可编程并行输入/输出芯片 8255A、74LS138、2*8 矩阵式键盘、六位七段 LED 数码管。原
2、理图设计完成之后用 PROTUES 仿真软件对原理图进行了仿真得到了预期的结果。我们的模拟计算器能实现 5 位十进制数以内的及减法运算和 2 位十进制数以内的乘除法运算。关键词:模拟计算器,8088CPU,PROTUES,8255A 3 目 录 一、概述 4 二、硬件电路 4 2.1、CPU 控制模块4 2.2、键盘输入模块6 2.3、可编程并行通信接口芯片 8255A 7 2.4、可编程计数器/定时器8 2.5、总原理图9 三、软件设计框图 10 四、源程序 11 五、调试过程 26 六、课程设计体会 26 七、参考文献 27 4 模拟计算器设计 一、概述 设计思路:首先利用程序不断扫描键盘
3、是不是有输入,如果没有就一直扫描,如果有就停止扫描,完成输入,利用汇编的程序核对输入键的数值,通过调用子程序实现 5 位十进制数以内的及减法运算和 2 位十进制数以内的乘除法运算。运算完成后将运算的结果储存并显示到 LED 显示器上。二、硬件电路设计 硬件电路 键盘输入及 LED 数码管通过 8255A 接口与系统总线连接,键盘的16 个按键组成 8*2 矩阵,其中 8 根矩阵线作为 8255A 的输出线与 PB7PB0 连接,2 根矩阵线作为 8255A 的输入线与 PC7、PC6 连接。键盘采用逐次扫描原理,16 个按键中 09 座位数字健,+、-、*、/、=作为加、减、乘、除和等号功能键
4、,C 为清零键。1、CPU 控制模块 16 位微处理器,内含 29000 个晶体管,时钟频率为4.77MHz,地址总线为 20 位,可使用 1MB 内存。8088内部数据总线都是 16 位,外部数据总线是 8 位。图1-1.8284时钟发生器 图 1-2.8088CPU 5 公用信号引脚 名称 功能 引脚号 类型 AD15AD0 地址/数据总线(分时复用)216,39 双向,三态 A19/S6A16/S3 地址/状态总线(分时复用)3538 输出,三态 BHE/S7(SSO)数据总线高 8 位允许/状态 34 输出 MN/MX 最小/最大方式控制 33 输入 RD 读控制 32 输出 TEST
5、 测试信号 23 输入 READY 存储器或 I/O 准备好信号 22 输入 RESET 系统复位 21 输入 NMI 不可屏蔽中断请求 17 输入(上升沿触发)INTR 可屏蔽中断请求 18 输入 CLK 系统时钟 19 输入 VCC+5V 电源 40 输入 GND 接地 1,20 输入 最小工作方式信号引脚 名称 功能 引脚号 类型 HOLD 总线保持请求信号 31 输入 HLDA 总线保持响应信号 30 输出 WR 写信号 29 输出,三态 M/IO(M/IO)存储器/IO控制 28 输出,三态 DT/R 数据发送/接受 27 输出,三态 DEN 数据允许 26 输出,三态 ALE 地址
6、锁存允许 25 输出 INTA 中断响应 24 输出 6 2、键盘输入模块 键盘是常用信息输入元件,其实键盘也是由一个个按钮组成,如果是独立按钮的话必须要需要一个 I/O 口对它进行检测,而键盘往往这需要键盘按钮数一半的 I/O 口数对它进行检测,也许对一个比较简单的系统 I/O 口数一般不是问题,但对于一个大型、复杂的系统来说 I/O 资源就显得非常珍贵了,尽量减少 I/O 使用是非常利于降低成本,另外一方面键盘比用独立按键要美观。我们设计时使用的是 8*2 行列式键盘,如图 2-1 所示。图中有 8 行 2 列,8 根行线与 PA 口相连,2 根列线与 PC 口的 PC6、PC7 相连。P
7、A、PB口要么全部输入或输出。PC 口可以进行输入和输出。按键设置在行、类交点处(数字或字符为其键号),行、列线分别连接到按键开关的两端。当列线通过上拉电阻接+5V 时,就被钳位在高电平状态。键盘中有无按键按下是由行线送入全扫描字、列线读入行线状态来判断。这就是:给航线所有 I/O 线均置成低电平,然后读入列线电平状态。如国有按键盘下,总会有一根列线电平被拉至低电平,从而使列线输入不全为 1。图 2-1 键盘电路 图 2-2 数码管电路 3、可编程并行通信接口芯片 8255A(1)并行输入/输出端口 A,B,C 8255A 内部包括三个 8 位的输入输出端口,分别是端口 A、端口 B、端口 C
8、,相应信号线是 PA7PA0、PB7PB0、PC7PC0。端口都是 8 位,都可以作为输入或输出。通常将端口A 和端口 B 定义为输入/输出的数据端口,而端口 C 则既可以作数据端口,又可以作为端口 A和端口 B 的状态和控制信息的传送端口。7(2)A 组和 B 组控制部件 端口 A 和端口 C 的高 4 位(PC7PC4)构成 A 组;由 A 组控制部件实现控制功能。端口 B 和端口 C 的低 4 位(PC3PC0)构成 B 组;由 B 组控制部件实现控制功能。A 组和 B 组利用各自的控制单元来接收读写控制部件的命令和 CPU 通过数据总线(D0D7)送来的控制字,并根据他们来定义各个端口
9、的操作方式。(3)数据总线缓冲存储器 三态双向 8 位缓冲器,是 8255A 与 8086CPU 之间的数据接口。与 I/O 操作有关的数据、控制字和状态信息都是通过该缓冲器进行传送。(4)读/写控制部件 8255A 完成读/写控制功能的部件。能接收 CPU 的控制命令,并根据控制命令向各个功能部件发出操作指令。图 2-3.8255A 芯片图 CS 片选信号:由 CPU 输入,有效时表示该 8255A 被选中。RD,WR 读、写控制信号:由CPU 输入。RD 有效表示 CPU 读 8255A,WR 有效表示 CPU 写 8255A。RESET 复位信号:由CPU 输入。RESET 信号有效,清
10、除 8255A 中所有控制字寄存器内容,并将各个端口置成输入方式。图 2-4.8255A 内部结构 8 8253 11 10 9 8 7 6 5 4 3 2 D7 1 D6 D5 D4 D3 D2 D1 D0 CLK0 OUT0 GET0 GND 12 14 15 16 17 18 19 20 21 22 23 24 0UT1 CLK1 GATE1 OUT2 GATE2 A1 WR A0 CS CKL2 RD+5v 13 定义工作方式控制字:工作方式 0:8255A 中各端口的基本输入/输出方式。图 2-5.8255A 工作方式控制 4、可编程计数器/定时器 8253 具有 3 个独立的计数通
11、道,采用减 1计数方式。在门控信号有效时,每输入 1个计数脉冲,通道作 1 次计数操作。当计数脉冲是已知周期的时钟信号时,计数就成为定时。(1)、8253 内部结构 8253 芯片有 24 条引脚,封装在双列直插式陶瓷管壳内。1.数据总线缓冲器 数据总线缓冲器与系统总线连接,8 位双 向,与 CPU 交换信息的通道。这是 8253 与 CPU 之间的数据接口,它由 8 位双向三态缓冲寄存器构成,是 CPU 与 8253之间交换信息的必经之路。2.读写控制 9 读写控制分别连接系统的 IOR 和 IOW,由 CPU 控制着访问 8253 的内部通道。接收 CPU 送入的读写控制信号,并完成对芯片
12、内部各功能部件的控制功能,因此,它实际上是 8253 芯片内部的控制器。A1A0:端口选择信号,由 CPU 输入。8253内部有 3 个独立的通道和一个控制字寄存器,它们构成 8253 芯片的 4 个端口,CPU可对 3 个通道进行读写操作 3 对控制字寄存器进行写操作。这 4 个端口地址由最低 2 位地址码 A1、A0 来选择。5、总原理图 图 2-7、PROTUES画出的总原理图 10 三、软件设计框图 进行加、减、乘、除运算,存结果 开始 8255A 初始化 有无压键?是数字键?加号?减号?乘号?除号?等号?清零?显示扫描 设加标志 设减标志 设乘标志 设除标志 N N Y 清零显示器,
13、清标志 有标志?保存数据 放键?显示扫描 清零显示器 Y N N N N N N N N Y Y Y Y Y Y Y Y 11 四、源程序 一、源程序 STACK SEGMENT STCAK DB 64 DUP(?)STACK ENDS DATA SEGMENT ORG 3000H VAR1 DB 00H,01H,02H,03H,04H VAR2 DB 3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH VAR3 DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H VAR4 DB 00H,00H,00H,00H,00H,00H,00
14、H,00H,00H,00H TABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,DATA MOV DS,AX MOV AL,88H OUT 63H,AL ;82255A 初始化 MOV BX,0000H;BX 清零 STT:MOV AL,00H;键盘测试 OUT 61H.AL NEXT:IN AL,62H AND AL,0C0H CMP AL,0C0H JNZ KEY
15、ABC CALL DISP;调用显示程序 JMP STT 12 KEYABC:CALL TIME;延时,去抖动 IN AL,62H AND AL,0C0H CMP AL,0C0H JNZ KEY JMP STT KEY:MOV AL,0FEH;键盘扫描识别 OUT 61H,AL IN AL,62H TEST AL,80H JNZ KEY_0 CALL KEY8 JMP STTK KEY_0:TEST AL,40H JNZ KEY_9 CALL KEY0 JMP STTK KEY_9:MOV AL,0FDH OUT 61H,AL IN AL,62H TEST AL,80H JNZ KEY_1 C
16、ALL KEY9 JMP STTK KEY_1:TEST AL,40H JNZ KEY_A CALL KEY1 JMP STTK KEY_A:MOV AL,0FBH 13 OUT 61H,AL IN AL,62H TEST AL,80H JNZ KEY_2 CALL KEYA JMP STTK KEY_2:TEST AL,40H JNZ KEY_B CALL KEY2 JMP STTK KEY_B:MOV AL,0F7H OUT 61H,AL IN AL,62H TEST AL,80H JNZ KEY_3 CALL KEYB JMP STTK KEY_3:TEST AL,40H JNZ KEY
17、_C CALL KEY3 JMP STTK KEY_C:MOV AL,0EFH OUT 61H,AL IN AL,62H TEST AL,80H JNZ KEY_4 CALL KEYC JMP STTK KEY_4:TEST AL,40H 14 JNZ KEY_D CALL KEY4 JMP STTK KEY_D:MOV AL,0DFH OUT 61H,AL IN AL,62H TEST AL,80H JNZ KEY_5 CALL KEYD JMP STTK KEY_5:TEST AL,40H JNZ KEY_D CALL KEY5 JMP STTK KEY_E:MOV AL,0BFH OUT
18、 61H,AL IN AL,62H TEST AL,80H JNZ KEY_6 CALL KEYE JMP STTK KEY_6:TEST AL,40H JNZ KEY_F CALL KEY6 JMP STTK KEY_F:MOV AL,07FH OUT 61H,AL IN AL,62H TEST AL,80H 15 JNZ KEY_7 CALL KEYF JMP STTK KEY_7:TEST AL,40H JNZ KEY_71 CALL KEY7 JMP STTK KEY_71:JMP STTK KEY9:CMP BH,00H;按键 9 处理子程序 JZ KEY9_1;未按过符号键,不清零
19、 CALL CLEAR;已按过符号键,清零 KEY9_1:CALL LP1;低 4 位字节前移 MOV AL,6FH;最低字节输入一个数据 MOV SI+4,AL MOV AL,09H MOV DI+4,AL CALL DISP;显示 RET;返回 KEY8:CMP BH,00H;按键 8 处理子程序 JZ KEY8_1 CALL CLEAR KEY8_1:CALL LP1 MOV AL,7FH MOV SI+4,AL MOV AL,08H MOV DI+4,AL CALL DISP RET KEY7:CMP BH,00H;按键 7 处理子程序 16 JZ KEY7_1 CALL CLEAR
20、KEY7_1:CALL LP1 MOV AL,07H MOV SI+4,AL MOV AL,07H MOV DI+4,AL CALL DISP RET KEY6:CMP BH,00H;按键 6 处理子程序 JZ KEY6_1 CALL CLEAR KEY6_1:CALL LP1 MOV AL,7DH MOV SI+4,AL MOV AL,06H MOV DI+4,AL CALL DISP RET KEY5:CMP BH,00H;按键 5 处理子程序 JZ KEY5_1 CALL CLEAR KEY5_1:CALL LP1 MOV AL,6DH MOV SI+4,AL MOV AL,05H MO
21、V DI+4,AL CALL DISP RET 17 KEY4:CMP BH,00H;按键 4 处理子程序 JZ KEY4_1 CALL CLEAR KEY4_1:CALL LP1 MOV AL,66H MOV SI+4,AL MOV AL,04H MOV DI+4,AL CALL DISP RET KEY3:CMP BH,00H;按键 3 处理子程序 JZ KEY3_1 CALL CLEAR KEY3_1:CALL LP1 MOV AL,4FH MOV SI+4,AL MOV AL,03H MOV DI+4,AL CALL DISP RET KEY2:CMP BH,00H;按键 2 处理子程
22、序 JZ KEY2_1 CALL CLEAR KEY2_1:CALL LP1 MOV AL,5BH MOV SI+4,AL MOV AL,02H MOV DI+4,AL CALL DISP 18 RET KEY1:CMP BH,00H;按键 1 处理子程序 JZ KEY1_1 CALL CLEAR KEY1_1:CALL LP1 MOV AL,06H MOV SI+4,AL MOV AL,01H MOV DI+4,AL CALL DISP RET KEY0:CMP BH,00H;按键 0 处理子程序 JZ KEY0_1 CALL CLEAR KEY0_1:CALL LP1 MOV AL,3FH
23、 MOV SI+4,AL MOV AL,00H MOV DI+4,AL CALL DISP RET KEYA:CMP BH,00H;按键+号处理子程序 JNZ KEYA_1 CALL LP3;保存输入的数据 KEYA_1:MOV BX,0101H;设置符号标志 RET;返回 KEYB:CMP BH,00H;按键-号处理子程序 JNZ KEYB_1 CALL LP3;保存输入的数据 19 KEYB_1:MOV BX,0102H;设置符号标志 RET;返回 KEYC:CMP BH,00H;按键*号处理子程序 JNZ KEYC_1 CALL LP3;保存输入的数据 KEYC_1:MOV BX,010
24、3H;设置符号标志 RET;返回 KEYD:CMP BH,00H;按键/号处理子程序 JNZ KEYD_1 CALL LP3;保存输入的数据 KEYD_1:MOV BX,0104H;设置符号标志 RET;返回 KEYE:MOV BH,01H;按键=号处理子程序 CMP BL,01H;是+号?JZ K1;进行加法运算 CMP BL,02H;是-号?JZ K2;进行减法运算 CMP BL,03H;时*号?JZ K3;进行乘法运算 CMP BL,04H;是/号?JZ K4;进行除法运算 STTE:RET K1:CALL ADD1 JMP STTE K2:CALL SUB1 JMP STTE K3:C
25、ALL MUL1 JMP STTE K4:CALL DIV1 20 JMP STTE KEYF:CALL CLEAR;按键 C(清零)处理子序 RET CLEAR:MOV SI,OFFSET VAR2;数据清零子程序 MOV DI,OFFSET VAR3 MOV CX,000AH CLEAR1:MOV AL,3FH MOV SI,AL MOV AL,00H MOV DI,AL INC SI INC DI LOOP CLEAR1 MOV BH,00H RET ADD1:MOV SI,OFFSET VAR3;加法子程序 MOV DI,OFFSET VAR4 CLC MOV CX,0005H ADD
26、_1:MOV AL,DI ADC AL,SI AAA MOV DI,AL INC SI INC DI LOOP ADD_1 CALL CHANGE CALL DISP RET 21 SUB1:MOV SI,OFFSET VAR3;减法子程序 MOV DI,OFFSET VAR4 CLC MOV CX,0005H SUB_1:MOV AL,DI MOV CL,SI AAS MOV DI,AL INC SI INC DI LOOP SUB_1 CALL CHANGE CALL DISP RET MUL1:MOV SI,OFFSET VAR3;乘法子程序 MOV DI,OFFSET VAR4 MOV
27、 AL,DI MOV CL,SI MUL CL AAM MOV DI+5,AX MOV AL,DI+1 MUL CL AAM ADD AL,DI+6 AAA MOV DI+6,AX MOV AL,DI MOV CL,SI+1 22 MUL CL AAM MOV SI+5,AX MOV AL,DI+1 MUL CL AAM ADD AL,SI+6 AAA MOV SI+6,AX MOV AL,DI+5 MOV DI,AL MOV AL,DI+6 ADD AL,SI+5 AAA MOV DI+1,AL MOV AL,DI+7 ADC AL,SI+6 AAA MOV DI+2,AL MOV AL.0
28、0H ADC AL,SI+7 AAA MOV DI+3,AL CALL CHANGE CALL DISP RET DIV1:MOV SI,OFFSET VAR3;除法子程序 MOV DI,OFFSET VAR4 MOV AH,00H 23 MOV AL,DI+1 MOV CK,SI DIV CL MOV DI+1,AL MOV AL,DI AAD DIV CL MOV DI,AL CALL CHANGE CALL DISP RET LP1:MOV CX,0004H;数据移位保存子程序(4 位)MOV SI,OFFSET VAR2 MOV DI,OFFSET VAR3 LP2:MOV AL,SI
29、+3 MOV SI+4,AL MOV AL,DI+3 MOV DI+4,AL DEC SI DEC DI LOOP LP2 RET LP3:MOV CX,0005H;保存上一次数据子程序 MOV SI,OFFSET VAR3 MOV DI,OFFSET VAR4 LP4:MOV AL,SI MOV DI,AL DEC SI DEC DI 24 LOOP LP4 RET CHANGE:MOV SI,OFFSET VAR2 MOV DI,OFFSET VAR3 MOV BX,OFFSET TABLE MOV CX,0005H COMP0:MOV AL,DI XLAT MOV SI,AL INC S
30、I INC DI LOOP COMP0 RET DISP:MOV SI,OFFSET VAR1 MOV DI,OFFSET VAR2 MOV DL,DI+4 CMP 3FH JNZ DIR4 MOV DL,DI+3 CMP DL,3FH JNZ DIR3 MOV DL,DI+2 CMP DL,3EH JNZ DIR2 MOV DL,DI+1 CMP DL,3FH JNZ DIR1 JMP DIR0 DIR4:MOV CX,0005H 25 JMP DIR DIR3:MOV CX,0004H JMP DIR DIR2:MOV CX,0003H JMP DIR DIR1:MOV CX,0002H
31、JMP DIR DIR0:MOV CX,0001H DIR:MOV AL,SI OUT 62H,AL MOV AL,DI OUT 60H,AL CALL TIME INC SI INC DI LOOP DIR RET TIME:PUSH AX PUSH CX MOV CX,0040H TIME1:MOV AX,0300H TIME2:DEC AX JNZ TIME2 LOOP TIME1 POP CX POP AX RET STTK:CALL DISP;放键测试程序 MOV AL,00H 26 OUT 61H,AL IN AL,62H AND AL,0C0H CMP AL,0C0H JNZ S
32、TTK JMP STT CODE ENDS END START 五:调试过程 1.对设计原理图进行电气检查。主要针对电路连接中的电气连接进行检查,并生成对应电路的网表。特别是对电路节点的连接检查。2.对设计的程序进行语法检查。检查程序中存在的语法错误。编译连接并下载到芯片中。3.对设计进行综合调试。对下载到芯片中的程序进行功能检查。直到完成设计要求的功能。六:课程设计体会 本次课程设计师自由选择设计课题的,我选择了简易计算加减乘除法计算器的题目,看起来不是很难,但是真正做起来才发现其困难之处。本次的课程设计是一个相对而言比较难的设计,因为这次设计不仅仅是课本上知识的整合,而且还有很多是课外的扩
33、展。这次课程设计可以说是一个挑战。我们做的题目是简易计算器的设计。才开始思路很清晰。或许是因为我们司空见惯了这种小机器,可是等做起来发现真的好难。首先 8255A 的初始化和 8088 的接线也是十分简单,但是等到编成的时候发现有很多不懂得地方,觉得很容易的算法在编程中很难实现。于是我开始查看课本和有关的资料,知道了一些编程常用的方法。受益匪浅。而后我用心编写这程序。经过自己的努力和同学的帮助终于完成了相应的要求。本次课程设计,不仅使我加深了对接口程序设计的认识,对接口各部件的工作 27 原理也有了进一步的了解,也增强了分析故障的能力,更重要的是培养了我们面对问题、解决问题的能力。从理论知识上
34、我对 8088 和 8255 的作用、功能以及初始化更加熟悉,并且有了客观上的理解。对键盘的使用和数码管显示问题也完全弄懂了。这次课程设计还是比较成功的。当然我还有很多不足之处,比如知识掌握的不够全面,研究的深度不够,有问题畏畏缩缩不敢问,程序编写不会查漏补缺。课后没有及时解决课上的问题留到第二天上课程设计在想办法,这说明我的惰性也很强。这些都是我需要去改进的地方。我会在以后的学习中多加注意。最后感谢老师的辛苦指导,使我的设计能过成功实现,使我完成了这次课程设计。另外感谢网络给予我便利,让我找到有些相关资料帮我解决了一些问题。七:参考文献 1许立梓、何小敏、陈玮等.微型计算机原理及应用.北京:机械工业出版社出版,2003.2康华光.电子技术基础.北京:高等教育出版社,1998 3白彩英.微型计算机常用芯片手册.上海:上海科学技术出版社,1984 4胡汉才.单片机原理及其接口技术.北京:清华大学出版社,2002 5电子工程手册编委会.中外集成电路简明速查手册。北京:电子工业出版社,1997 A