课程设计任务书课程名称微机原理及应用院部名称机电工程学院专业电气工程及其自动化班级吴映阳指导教师李国利金陵科技学院教务处制2摘要学了微型计算机原理与应用课程之后,为了巩固和检测所学知识,我选择基于8088CPU的模拟计算器设计。要完成设计首先需要构建简单的微型计算机应用系统,其次是确定组成各部件的芯片,然后画原理图并且用仿真软件仿真。仿真正确后再连接硬件电路,电路连接完成后进行调试。设计过程中我们用到了8088CPU、可编程计时器8253、可编程并行输入/输出芯片8255A、74LS138、2*8矩阵式键盘、六位七段LED数码管。原理图设计完成之后用PROTUES仿真软件对原理图进行了仿真得到了预期的结果。我们的模拟计算器能实现5位十进制数以内的及减法运算和2位十进制数以内的乘除法运算。关键词:模拟计算器,8088CPU,PROTUES,8255A3目录一、概述……………………………………………………………………………4二、硬件电路………………………………………………………………………42.1、CPU控制模块…………………………………………………………………42.2、键盘输入模块…………………………………………………………………62.3、可编程并行通信接口芯片8255A……………………………………………72.4、可编程计数器/定时器……………………………………………………82.5、总原理图……………………………………………………………………9三、软件设计框图……………………………………………………………………10四、源程序……………………………………………………………………………11五、调试过程…………………………………………………………………………26六、课程设计体会……………………………………………………………………26七、参考文献…………………………………………………………………………274模拟计算器设计一、概述设计思路:首先利用程序不断扫描键盘是不是有输入,如果没有就一直扫描,如果有就停止扫描,完成输入,利用汇编的程序核对输入键的数值,通过调用子程序实现5位十进制数以内的及减法运算和2位十进制数以内的乘除法运算。运算完成后将运算的结果储存并显示到LED显示器上。二、硬件电路设计硬件电路键盘输入及LED数码管通过8255A接口与系统总线连接,键盘的16个按键组成8*2矩阵,其中8根矩阵线作为8255A的输出线与PB7~PB0连接,2根矩阵线作为8255A的输入线与PC7、PC6连接。键盘采用逐次扫描原理,16个按键中0~9座位数字健,+、-、*、/、=作为加、减、乘、除和等号功能键,C为清零键。1、CPU控制模块16位微处理器,内含29000个晶体管,时钟频率为4.77MHz,地址总线为20位,可使用1MB内存。8088内部数据总线都是16位,外部数据总线是8位。图1-1.8284时钟发生器图1-2.8088CPU5公用信号引脚名称功能引脚号类型AD15~AD0地址/数据总线(分时复用)2~16,39双向,三态A19/S6~A16/S3地址/状态总线(分时复用)35~38输出,三态BHE/S7(SSO)数据总线高8位允许/状态34输出MN/MX最小/最大方式控制33输入RD读控制32输出TEST测试信号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地址锁存允许25输出INTA中断响应24输出62、键盘输入模块键盘是常用信息输入元件,其实键盘也是由一个个按钮组成,如果是独立按钮的话必须要需要一个I/O口对它进行检测,而键盘往往这需要键盘按钮数一半的I/O口数对它进行检测,也许对一个比较简单的系统I/O口数一般不是问题,但对于一个大型、复杂的系统来说I/O资源就显得非常珍贵了,尽量减少I/O使用是非常利于降低成本,另外一方面键盘比用独立按键要美观。我们设计时使用的是8*2行列式键盘,如图2-1所示。图中有8行2列,8根行线与PA口相连,2根列线与PC口的PC6、PC7相连。PA、PB口要么全部输入或输出。PC口可以进行输入和输出。按键设置在行、类交点处(数字或字符为其键号),行、列线分别连接到按键开关的两端。当列线通过上拉电阻接+5V时,就被钳位在高电平状态。键盘中有无按键按下是由行线送入全扫描字、列线读入行线状态来判断。这就是:给航线所有I/O线均置成低电平,然后读入列线电平状态。如国有按键盘下,总会有一根列线电平被拉至低电平,从而使列线输入不全为1。图2-1键盘电路图2-2数码管电路3、可编程并行通信接口芯片8255A(1)并行输入/输出端口A,B,C8255A内部包括三个8位的输入输出端口,分别是端口A、端口B、端口C,相应信号线是PA7~PA0、PB7~PB0、PC7~PC0。端口都是8位,都可以作为输入或输出。通常将端口A和端口B定义为输入/输出的数据端口,而端口C则既可以作数据端口,又可以作为端口A和端口B的状态和控制信息的传送端口。7(2)A组和B组控制部件端口A和端口C的高4位(PC7~PC4)构成A组;由A组控制部件实现控制功能。端口B和端口C的低4位(PC3~PC0)构成B组;由B组控制部件实现控制功能。A组和B组利用各自的控制单元来接收读写控制部件的命令和CPU通过数据总线(D0~D7)送来的控制字,并根据他们来定义各个端口的操作方式。(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信号有效,清除8255A中所有控制字寄存器内容,并将各个端口置成输入方式。图2-4.8255A内部结构88253111098765432D71D6D5D4D3D2D1D0CLK0OUT0GET0GND1214151617181920212223240UT1CLK1GATE1OUT2GATE2A1WRA0CSCKL2RD+5v13定义工作方式控制字:工作方式0:8255A中各端口的基本输入/输出方式。图2-5.8255A工作方式控制4、可编程计数器/定时器8253具有3个独立的计数通道,采用减1计数方式。在门控信号有效时,每输入1个计数脉冲,通道作1次计数操作。当计数脉冲是已知周期的时钟信号时,计数就成为定时。(1)、8253内部结构8253芯片有24条引脚,封装在双列直插式陶瓷管壳内。1.数据总线缓冲器数据总线缓冲器与系统总线连接,8位双向,与CPU交换信息的通道。这是8253与CPU之间的数据接口,它由8位双向三态缓冲寄存器构成,是CPU与8253之间交换信息的必经之路。2.读/写控制9读/写控制分别连接系统的IOR和IOW,由CPU控制着访问8253的内部通道。接收CPU送入的读/写控制信号,并完成对芯片内部各功能部件的控制功能,因此,它实际上是8253芯片内部的控制器。A1A0:端口选择信号,由CPU输入。8253内部有3个独立的通道和一个控制字寄存器,它们构成8253芯片的4个端口,CPU可对3个通道进行读/写操作3对控制字寄存器进行写操作。这4个端口地址由最低2位地址码A1、A0来选择。5、总原理图图2-7、PROTUES画出的总原理图10三、软件设计框图进行加、减、乘、除运算,存结果开始8255A初始化有无压键?是数字键?加号?减号?乘号?除号?等号?清零?显示扫描设加标志设减标志设乘标志设除标志NNY清零显示器,清标志有标志?保存数据放键?显示扫描清零显示器YNNNNNNNNYYYYYYYY11四、源程序一、源程序STACKSEGMENTSTCAKDB64DUP(?)STACKENDSDATASEGMENTORG3000HVAR1DB00H,01H,02H,03H,04HVAR2DB3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FHVAR3DB00H,00H,00H,00H,00H,00H,00H,00H,00H,00HVAR4DB00H,00H,00H,00H,00H,00H,00H,00H,00H,00HTABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71HDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAL,88HOUT63H,AL;82255A初始化MOVBX,0000H;BX清零STT:MOVAL,00H;键盘测试OUT61H.ALNEXT:INAL,62HANDAL,0C0HCMPAL,0C0HJNZKEYABCCALLDISP;调用显示程序JMPSTT12KEYABC:CALLTIME;延时,去抖动INAL,62HANDAL,0C0HCMPAL,0C0HJNZKEYJMPSTTKEY:MOVAL,0FEH;键盘扫描识别OUT61H,ALINAL,62HTESTAL,80HJNZKEY_0CALLKEY8JMPSTTKKEY_0:TESTAL,40HJNZKEY_9CALLKEY0JMPSTTKKEY_9:MOVAL,0FDHOUT61H,ALINAL,62HTESTAL,80HJNZKEY_1CALLKEY9JMPSTTKKEY_1:TESTAL,40HJNZKEY_ACALLKEY1JMPSTTKKEY_A:MOVAL,0FBH13OUT61H,ALINAL,62HTESTAL,80HJNZKEY_2CALLKEYAJMPSTTKKEY_2:TESTAL,40HJNZKEY_BCALLKEY2JMPSTTKKEY_B:MOVAL,0F7HOUT61H,ALINAL,62HTESTAL,80HJNZKEY_3CALLKEYBJMPSTTKKEY_3:TESTAL,40HJNZKEY_CCALLKEY3JMPSTTKKEY_C:MOVAL,0EFHOUT61H,ALINAL,62HTESTAL,80HJNZKEY_4CALLKEYCJMPSTTKKEY_4:TESTAL,40H14JNZKEY_DCALLKEY4JMPSTTKKEY_D:MOVAL,0DFHOUT61H,ALINAL,62HTESTAL,80HJNZKEY_5CALLKEYDJMPSTTKKEY_5:TESTAL,40HJNZKEY_DCALLKEY5JMPSTTKKEY_E:MOVAL,0BFHOUT61H,ALINAL,62HTESTAL,80HJNZKEY_6CALLKEYEJMPSTTKKEY_6:TESTAL,40HJNZKEY_FCALLKEY6JMPSTTKKEY_F:MOVAL,07FHOUT61H,ALINAL,62HTESTAL,80H15JNZKEY_7CALLKEYFJMPSTTKKEY_7:TESTAL,40HJNZKEY_71CALLKEY7JMPSTTKKEY_71:JMPSTTKKEY9:CMPBH,00H;按键9处理子程序JZKEY9_1;未按过符号键,不清零CALLCLEAR;已按过符号键,清零KEY9_