课程设计任务书专业自动化班级姓名设计起止日期2013.12.16~2013.12.20设计题目:基于8086CPU的数字时钟的设计设计任务(主要技术参数):1、利用实验系统上提供的8253和LED数码显示等电路,设计一个电子时钟;2、格式如下:6个数码由左向右分别显示为:时、分、秒。指导教师评语:成绩:签字:年月日课程设计说明书NO.11引言随着在现代技术进步,电子产品越来越多的在生活中出现,服务于人们的生活,从简单的电子手表,到人人必备的手机,我们都可以看到电子时钟的身影。本系统就是基于8086系统,配合8255和8253芯片开发的一个数字电子时钟,有显示时分秒的功能。2设计方案论证2.1一秒定时方案的选择运用8253产生周期为2秒的方波,通过8255芯片的A、B、C口读取电平高低,判断电平变化,进而判断1秒延时是否已经到达,这种方法可以写成子程序,执行返回就近似于1秒延时。2.2时钟时分秒的处理方式选择时钟的时分秒的处理方法实际上时数学逻辑问题。在编辑过程中我想到两种解决方案。方案一:将时分秒当做三个数据进行处理,设置三个数据空间,作为是分秒的数据缓存区,再将缓存区的内容转换成显示数据。每次延时之后判断“秒”是否应该向“分”进位,“分”是否应该向“时”进位,“时”是否已经超过24.这个过程理论上可以实现,但是逻辑判断较为繁琐。方案二;将时分秒分成六位,放在显示数据缓存区里,每次一秒延时之后判断是否向高位进一,若还不进一,则跳回最低位,再次进行一秒延时;由于秒和分都是60进制,处理方法一样,而“时”是24进制,应该进行额外处理。2.3八段数码管动态显示对于8279八段数码管的显示需要入码位和段码,因此采用74LS373作为位码输出端口,8255的A、B、C口作为段码输出口。通过CPU输出数据进行位码选择,经74LS373沈阳大学课程设计说明书NO.2输出到位码输入口;设置到六位数据缓存区,经过换码可以取得相应的段码输出到段码输入口,并简单延时,就可以显示了。2.4系统原理通过并行接口芯片8255和8086计算机的硬件相连,以及通过8253一秒延时的方法,来实现适中的计时功能。8086工作在最小模式,5255芯片片选端接到CPU的片选段CS0,A口组委输出口,B口作为输入口,B口的第一位用于检测电平;8253片选端接到CPU的片选段CS2,用于锁存位码。一秒计时和功能有软件控制进行。3系统硬件设计3.18086简介Intel8086是16位的微处理器(其内部总线为16位,外部总线为8位,故称为准16位微处理器),它采用HMOS工艺40条引脚封装。8086工作时使用5V电源,时钟频率5MHz(8086-1为10MHz,8086-2为8MHz)它有20根地址线,故可寻址的内存空间为1MB【2】。(1)8086的主要特性Intel8086/8088CPU是Intel公司推出的高性能的微处理器,具体如下主要特性:(a)8086CPU数据总线为16位,8088CUP数据总线为8位。(b)地址总线都是20位,低16位用于数据总线复用,可直接寻址为1MB的存储空间。(c)有16位的端口地址,可以寻址64KB的I/O端口。(d)有99条基本指令,指令功能强大。(e)有9种基本寻址方式。(f)可以处理内部和外部中断,外部中断源多达256个。(g)兼容性好,8086、8085在源程序一级兼容。沈阳大学课程设计说明书NO.3(h)8086/8088标准主频为5MHz,8086/8088-2主频为8MH【3】。(i)支持单处理器或多处理器系统工作。(2)8086CPU寄存器结构8086CPU中有14个16位的寄存器,其中有4个16位的通用寄存器,2个16位指针寄存器,2个16位变址寄存器,1个16位指令指针及1个16位标志寄存器【8】。通用寄存器包括累加器AX,基址寄存器BX,计数寄存器CX,数据寄存器DX四个寄存器,位于CPU的EU中,每个数据寄存器可存放16位操作数,也可拆成两个8位寄存器,用来存放8位操作数。指针和变址寄存器包括:堆栈指针SP、基址指针BP、源变址寄存器SI、和目的变址寄存器DI四个16位寄存器,可以来存放数据和地址。段寄存器包括:代码段寄存器CS,数据段寄存器DS,附加段寄存器ES,堆栈段寄存器SS【4】。3.28255简介8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,并行接口是以数据的字节为单位与I/O设备或被控制对象之间传递信息。CPU和接口之间的数据传送总是并行的,即可以同时传递8位、16位、32位等。用+5V单电源供电,能在以下三种方式下工作:方式0--基本输入/出方式、方式1--选通输入/出方式、方式2--双向选通工作方式【3】。8255的内部结构及引脚图如图2所示。沈阳大学课程设计说明书NO.4图48255内部结构及引脚图28255内部结构及引脚图具体的各引脚功能如下【3】:D0~D7为双向数据信号线,用来传送数据和控制字。RD为读信号线,与其它信号线一起实现对8255接口的读操作通常接系统总线的IOR信号。WR为写信号线,与其它信号一起实现对8255的写操作,通常接系统总线的IOW。沈阳大学课程设计说明书NO.5CS为片选信号线,当它为低电平(有效)时,才能选中该8255芯片,也才能对8255进行操作【6】。A0,A1为口地址选择信号线。8255内部有3个口;A口,B口,C口,还有一个控制寄存器,它们可由程序寻址。A0,A1上的不同编码可分别寻址上述3个口和一个控制寄存器,具体规定如表1所示。表18255的寻址方式A1A0选择00A口01B口10C口11控制寄存器通常A0,A1分别接系统总线A0和A1,它们与CS一起来决定8255的接口地址。RESET为复位输入信号。此端上的高电平可使8255复位。复位后,8255的A口,B口,C口均被定为输入状态【9】。PA0~PA7为A口的8条输入输出信号线。PB0~PB7为B口的8条输入输出信号线。PC0~PC7,8条线根据其工作方式可作为数据的输入或输出线,也可以用作控制信号的输出或状态信号的输入线【7】。沈阳大学课程设计说明书NO.68255工作方式控制字和C口按位置位/复位控制字格式如图3所示【4】。图图3置位/复位控制字格式8255的寻址:8255占外设编址的4个地址,即A口,B口,C口和控制寄存器各占一个外设接口地址。对同一个地址分别可以进行读写操作。例如,读A口可将A口的数据读出;写A口可将CPU的数据写入A口并输出【8】。如表2为方式0下系统的输入输出组合,其中分为A,B组,A组分为A口和C口,B组分为B口和C口【1】。沈阳大学课程设计说明书NO.7表2方式0下,8255的16种输入输出组合A组B组A口(PA0---PA7)C口(PC4---PC7)B口(PB0---PB7)C口(PC0---PC3)入入入入入入入出入入出入入入出出入出入入入出入出入出出入入出出出出入入入出入入出出入出入出入出出出出入入出出入出出出出入出出出出3.3七段LED显示器及其接口七段LED显示器:由七个发光段构成,每段均为1个LED二极管。通过控制不同段的点亮和熄灭,显示出16进制数字或字符【10】。沈阳大学课程设计说明书NO.8七段LED显示器有共阳极和共阴极两种结构,如图5所示的七段LED实际上包含8个LED(7段字形加上小数点DP)。1位LED显示器有1根位选线和8根段选线,段选线控制字符的选择,位选线控制显示位的亮和暗。LED数码管采用砷化镓、镓铝砷、和磷化镓等材料制成,其内部结构为一个PN结,具有单向导电性。从图5可以看出,要是数码管显示数字,有两个条件:(a)是要在VT端(3/8脚)加正电源;(b)要使(a,b,c,d,e,f,g,dp)端接低电平或“0”电平。这样才能显示的。将七个发光管进行组合,排列成数字图形8,再根据需要控制七个管的亮与灭,即可显示出定义数字【10】。LED技术参数说明:发光二极管的压降一般为1.5-2.0V,即工作电压要求不高,而且构造简单,其工作电流一般取10-20mA为宜【4】。图4七段LED显示器3.4连线设计以下为间断,其中8255片选端接到CS0,PA口接到数码管的数码输出端口LED-A至LED-G,B口第一位作为电平检测功能线:8253接到CS1,GATE0和GATE1接到+5V电平,8253C1K0接到375KHZ的CLK4,out0接clk1,out1接到PC2;74LS373的片选端接沈阳大学课程设计说明书NO.9到CS2,D0至D5接到八段数显管的位码输入端LED1至LED6。以下为电路图:图1电路图4软件编程实现4.1芯片初始化:Starrt:Movdx,04b6h;8253初始化用以输出周期为两秒的方波Mova1,00110110b;定时器0输出10HZ的方波沈阳大学课程设计说明书NO.10Outdx,a1Movax,37500Movdx,04b0hOutdx,a1Mova1,ahOutdx,a1Movdx,o4b6h;定时器1输出0.5HZ的方波,从而产生一秒的定时Mova1,01010110bOutdx,a1Movdx,04b2hMova1,20Outdx,a14.2时分秒的处理:M:leasi,shujuCallDECT;秒的个位处理Mova1,[si]Inca1Mov[si],a1;秒的个位加一Cmpa1,0ahJnzm;秒的十位处理Mova1,0Mov[si],a1IncsiMova1,[si]沈阳大学课程设计说明书NO.11Inca1Mov[si],a1Cmpa1,06hJnzMMova1,0Mov[si],a1;时的处理Mova1,0Mov[si],a1IncsiMova1,[si]Inca1Mov[si],a1Cmpai,04hJnzhourCIncsiMova1,[si]Cmpa1,02hJnzhourCMova1,0Mov[si],a1DecsiMov[si],a1JmpMhourC:Cmpa1,0ahK1:jnzM;时的十位处理沈阳大学课程设计说明书NO.12Mova1,0Mov[si],a1IncsiMova1,[si]Inca1Mov[si],a1Cmpa1,03hJnzK14.3一秒延时子程序检测电平变化,判断是否秒加一DECT:pushsi;堆栈保护进行地址保护DECTread:callDISP;调用显示子程序Leasi,dianpingMovah,[si]Movdx,04a2h;判断电平,若有跳变则[si]加一Ina1,dxCmpa1,ahJzDECTreadMov[si],a1PopsiRet4.4数码管显示子程序DISP:;显示子程序,将六个位都显示一遍PushsiMova1,0feh沈阳大学课程设计说明书NO.13Movcx,6Leasi,shujuDisplayloop:Movdx,04c0h;373输出位码,并锁存Outdx,a1Rola1,1PushaxMovdx,04a6h;8255控制字:A口出,B口入Mova1,82hOutdxa1Mova1,[si]IncsiLeabx,screenXLAT;换码指令取段码CalloutputPopaxLoopdisplayloopPopsiMovdx,04a6h;8255控制字:A口出,B口入Mova1,82hOutdxa1Mova1,[si]IncsiLeabx,screenXLAT;换码指令取段码Calloutput沈阳大学课程设计说明书NO.14PopaxLoopdisplayloopPopsiDelay:PushcxMovcx,ofhDelayloopLoopdelayloopPopcxRet5调试记录及结果分析这个项目除了开始部分的探索阶段,其他全过程相对较顺利。调试成功之后,发现了一些问题:(1)由于软件判断指令判断周期有一定的延时,况且在调用显示程序过程中存在短延时,因此数字时钟的计数时间相对正常计时时间相对正常计数时间要慢一些,这也符合理论,因此该程