数字钟_接口课设报告_8086微机原理与接口技术课程设计.doc_第1页
数字钟_接口课设报告_8086微机原理与接口技术课程设计.doc_第2页
数字钟_接口课设报告_8086微机原理与接口技术课程设计.doc_第3页
数字钟_接口课设报告_8086微机原理与接口技术课程设计.doc_第4页
数字钟_接口课设报告_8086微机原理与接口技术课程设计.doc_第5页
免费预览已结束,剩余16页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

接口技术课程设计接口技术基础 实验报告学院:计算机科学与技术学院班级:计091学号:0913022032姓名:曹恒楼指导老师:顾 晖时间:2012/6/16目 录数字钟的设计31设计需求分析与解决方案31.1设计需求分析31.1.1题目要求31.1.2根据题目要求提出问题31.2解决问题方法及思路31.2.1硬件设计选择部分31.2.2软件设计分析42硬件设计52.1选择芯片825552.1.1芯片8255 A在本设计中的功能作用52.1.2芯片8255 A的功能分析52.1.38255 A 方式控制字52.1.48255 A与外设相连的逻辑图62.2选择器件 LED62.2.1LED在本设计中的作用62.2.2LED功能分析62.2.3LED技术参数72.3硬件设计思路及连线图72.3.1硬件设计思路72.3.2硬件接线原理图、连接图73软件设计思路及程序控制流程框图 83.1软件设计思路83.2程序流程图的相关说明93.3程序控制流程框图93.4程序清单(见附录)114实验环境115上机调试过程115.1硬件调试115.2软件调试135.3软、硬件联立调试135.4调试结果136实验运行结果、分析156.1实验运行结果与分析156.2问题讨论157实验心得168参考文献17附录(源代码)17数字钟的设计1、 设计需求分析与解决方案1.1设计需求分析1.1.1题目要求设计一个接口与七段LED显示器,显示一个计时时钟,显示初值为0,每隔一秒改变一次显示值,60s为一分钟,60min为一小时,LED显示器循环显示时、分、秒的动态值。 1.1.2根据题目要求提出问题1、选择用于显示时间的显示器;2、怎样使显示器实现显示时间;3、如何实现计时功能,是用软件还是硬件实现;4、选择何种接口芯片以及考虑该接口芯片及LED显示器的技术参数,考虑最大工作电流,需不需要其他辅助芯片等;5、对设计题目功能的扩展,在设计中加入其他功能;6、可否用不同的设计方法完成设计,与其他计算机语言设计相比的异同之处。1.2解决问题方法及思路1.2.1硬件设计选择部分1、接口芯片的选择秒位设置完毕后,如何将时间信息传送到外设中,即选择何种芯片用于CPU与外设之间传送信息。接口芯片是微型机系统中实现输入输出的常用器件,是CPU与外设之间的界面,一方面要接收CPU进行输入/输出所发出的一系列信息,另一方面又要与外设交换数据以及一些联络信号等。为增加本设计的灵活性,在接口的选择上要求是可编程的输入/输出接口8255A芯片或8251A芯片。8255A芯片:它是一种可编程通用并行接口芯片,它有24条可编程的I/O引脚,采用40脚双列直插式封装,单一+5V电源,全部输入/输出均与TTL电平兼容。在8255A中有A、B、C三个并行输入/输出端口,其功能全部由程序设定,每个端口都有自己的特点。A口、B口通常作为独立的I/O端口使用,C口也可以作为一般的I/O端口使用,但当A口、B口作为应答式的I/O端口使用时,C口分别以来为A口、B口提供应答控制信号。如果采用8255A作为计时时钟的输入/输出接口,那么8255A的三个端口设置如下:A口工作与方式0,作为输出口,其PA0PA6分别与外设的段选码相连,用以确定在何时显示时间的哪一位;B口工作与方式0,作为输出口,其PB0PB7分别与外设相连,作为位选线;C口用来为A口、B口提供应答控制信号。8251A芯片:它是一种可编程通用串行接口芯片,是通用的同步异步接收/发送器,它的作用是把计算机的并行数据转换成串行数据发送出去,把接收到的外部串行数据转换成并行数据送入计算机内部,它可以通过编程选用同步/异步通信方式,它具有独立的发送器和接收器,能够以单工、半双工或全双工方式进行通信,并提供相应的控制信号。最佳解决方案:如果采用8251A作为计时时钟的输入/输出接口,那么就需要把计算机的并行数据转换成串行数据发送出去,把接收到的外部串行数据转换成并行数据送入计算机内部,这个过程是需要时间的,所以从时间效率方面来说并没有8255A芯片合适;另外,可编程并行接口芯片(8255A)数据传输速度快,虽然使用的通信线多,但是传输距离并不算远,所以在解决接口问题时,采用可编程并行接口芯片8255A是比较合适的。2、时间显示为实现计时时钟的显示,可选择共阴极(或共阳极)七段LED上,芯片LCD或LED,表1-1为两种芯片的比较:发光二极管,是由发光二极管排列组成的显示器件,它采用低电压扫描技术,具有耗电少,使用寿命长,成本低,亮度高,故障少,视角大,视角大,可视距离远的特点。通过分析和对比以及实验室实验条件可知LED显示器要较优于LCD显示器,因此本实验选择LED来实现时间的显示。3、秒钟设计秒钟的设计有两种解决方案:硬件实现、软件实现:(1)硬件分析:可选择8253A芯片,8253A是一种定时准确、使用方便、灵活性大的可编程定时器/计数器,其定时的时间长度可以通过软件来设置,对芯片设置处置初值后,计数器开始工作,微处理器就可以去做其他工作,定时时间到,电路会产生一个信号,向微处理器提出中断请求,告诉处理器定时时间已到。(2)软件分析:为实现1秒长度的设定,可执行一个循环程序,通过循环次数和循环嵌套的层数来调节计时时间的长短,该方法的优点是不需要专用的硬件,从而成本低,方法简单灵活,使用起来也比较容易。(3)最佳解决方案:通过以上分析,硬件实现1秒的设定虽然较准确,但用软件来实现可以极大的节约成本,而且通过周密的计算循环的次数和循环嵌套的层数也可以将计时的准确度提高,所以在实现计时时间方面选择软件是比较好的方案。1.2.2软件设计分析1、初始值设置在程序中的数据段定义秒位数据second,分位数据minute,时位数据hour,初始值都设为00H,并在LED显示器上显示初值。2、8255初始化设置8255的工作方式:B口和C口都用于输出,且都工作在方式0。3、计时过程从初始值开始显示,当显示了1s时,秒位加1,并判断秒位是否为60,若不是,则直接显示时间;若是,则将秒位置0,分位加1,接着判断分位是否为60,若不是,则直接显示;若是,则将分位置0,时位加1,然后判断时位是否为25,若不是,则直接显示;若是,则将时位置0,日期加1,并判断日期是否加到31,若是,则将日期清零,重新计时。如此循环。4、1秒时间的设定执行一个循环程序,通过循环次数和循环嵌套的层数来调节计时时间的长短,该循环次数处定为0100h。2、 硬件设计2.1选择芯片82552.1.1芯片8255 A在本设计中的功能作用8255是并行的I/0接口芯片,内部有三个相互独立的8位数据端口。8255实现了外设与8086之间的数据传输。8255的B口工作于方式0,作为输出口,其PB0PB7分别与LED数码管显示器的显示器的八段a,b,c,d,e,f,g,dp相连,C口作为输出口,其PC7PC0与LED数码管显示器的LED0LED7相连,作为位选。2.1.2芯片8255 A的功能分析1、8255A是可编程并行接口,内部有3个相互独立的8位数据端口,即A口、B口和C口。三个端口都可以作为输入端口或输出端口。A口有三种工作方式:方式0、方式1和方式2;B口可以工作在方式0或方式1下;C口通常作为联络信号使用。8255的工作只有当片选CS有效时才能进行工作,而控制逻辑端口实现对其他端口的控制。当8255 A工作在方式0时,即基本输入输出方式时,可将三个数据端口划分为四个独立的部分:A口和B口作为两个8位端口,C口的高4位和低4位可以用作两个4位的输入输出口,各个端口都可独立地用作输入或输出。2、数据总线缓冲器是一个8位双向三态缓冲器,三态是由读/写控制逻辑控制的,它可与系统的DB直接相连,实现CPU和8255A之间的信息传送;读写控制器用于管理数据、控制字或状态字的传送,接收来自CPU的地址信息及一些控制信号,然后向A组、B组控制电路发送命令,控制端口数据的传送方向。2.1.38255 A方式控制字8255A的方式控制字(见图2-1) 图2-18255A的方式控制字2.1.48255 A 与外设相连的逻辑图图2-38255与外设相连的逻辑图PA7PA0:A口数据信号线;PB7PB0:B口数据信号线;PC7PC0:C口数据信号线。2.2选择器件LED2.2.1LED在本设计中的作用LED发光二极管(Light-Emitting Diode),在本设计中采用7段数字发光二级管,是作为终端用来显示计时时钟的时、分、秒、毫秒值的。2.2.2LED功能分析LED发光二级管分为共阳极和共阴极两种,共阳就是7段的显示字码共用一个电源的正极,同理共阴就是7段的显示字码共用一个电源的阴极,共阴极数码管原理示意图如下:(见图2-4)图2-4LED原理图LED数码管采用砷化镓、镓铝砷、和磷化镓等材料制成,其内部结构为一个PN结,具有单向导电性。从上图可以看出,要是数码管显示数字,有两个条件:1、是要在VT端(3/8脚)加正电源;2、要使(a,b,c,d,e,f,g,dp)端接低电平或“0”电平。这样才能显示的。将七个发光管进行组合,排列成数字图形8,再根据需要控制七个管的亮与灭,即可显示出定义数字。2.2.3LED技术参数数字DPgfedcba二进制编码(字形)0001111113FH10000001103H2010110115BH3010011114FH40110011066H5011011016DH6011111017DH70000011107H8011111117FH9011011116FHA0111011177HB011111007CHC0011100169HD010111105EHE0111100179HF0111000171H表2-5LED共阴极显示管段选码编码表2.3硬件设计思路及连线图2.3.1硬件设计思路8086的8位数据线D7D0与8255的D7D0相连,地址线经74LS373锁存后其低位A0、A1分别与8255的A0、A1相连,其他地址线经74LS138译码后,其CS0接8255的片选CS引脚,其入口地址为00F0H00F3H。8255的A口PA0PA7分别与逻辑开关的K1K8相连,其中开关量K7用于判断是否修改时间,K5K6用于判断修改哪一位,K1K4为要修改的值;B口作为段选;C口作为位选段码信号。2.3.2硬件接线原理图图2-6 硬件连线原理图图2-7硬件连接图3、 软件设计思路及程序控制流程框图3.1软件设计思路1、初始化8255A,设置其工作方式。2、设置初值,定义对应十六进制数的七段代码表及其时间区表。3、显示计时并循环判断,当1秒时间到是则秒位加1计时显示。4、8255A芯片个端口地址为:控制端口地址:206HA口地址:200HB口地址:202HC口地址:204H3.2程序流程图的相关说明首先对8255A进行初始化,然后开始读取开关量,判断是否要修改时间,若需修改,则判断需修改哪位,随后将该位对应的时间区数据修改为逻辑开关K1K4对应的值,若不需要修改则继续显示并循环判断,当1秒时间到达时,则秒位加1计时显示。3.3程序控制流程框图开始8255初始化送1秒时间常数数读取开关量修改时间修改秒低位修改秒高位修改分低位修改分高位修改时低位修改时高位显示时间1秒时间秒位加1秒=60秒为00分加1分=60分为00时加1时=23时为00重计时NNN修改日低位修改日高位图3-1程序流程图图3-2中断操作流程图3.4程序清单(见附录)4、 实验环境系统环境:Win-7系统软件环境:Proteus5、 上机调试过程5.1硬件调试本次课程设计采用的是Proteus集成软件开发环境,把总体分为3大块,第一块就是8086CPU译码电路,如下图5-1,第二块为8255A控制的时间显示电路,如下图5-2,第三块为8255A不可屏蔽中断控制电路,如下图5-3.在硬件接线连接时,应将8255A的A口与端控制端口相连,用于决定显示值,B口也同段控制端口相连,决定显示值,而C口8位接两个位控制端口,用于决定哪个数码管显示。中断电路与8086CPU译码电路均参照课本先有实验图连接,至此,硬件线路已经接好。图 5-1 8086CPU译码电路图 5-2 数码管显示电路图 5-3 中断控制电路5.2软件调试在软件部分,程序分为三个部分:8255A初始化部分,读入初值、循环操作部分,显示出数字量部分。5.3联立调试软件和硬件分别调试完毕后,进行联机调试,出现了新的问题:显示在LED数码管上的数字不停跳跃,变幻不定,数值显示不稳定,控制不好。要解决这个问题,我问了几个同学,分别进行修改,刚开始采用6位,改了好久总是控制显示的不好,要么奇数位显示要么偶数位显示,修改了延时操作,又增加了清屏操作,但是数码管还是显示不好。所以最后决定用两个4位数码管显示,增加毫秒位,这样在软件设计时没有出现显示问题,除此之外,每个数字显示后的延时是利用延时子程序的循环次数来控制的,为了使数字编码显示得清楚,应该通过调试,确定延时子程序的循环次数。在本设计中,循环次数设为16(10h)次。5.4调试结果调试后编码结果正确,显示清楚,稳定,且可通过按键进行清零,及校时操作。图 5-4-1 程序运行效果图 5-4-2 清零操作图 5-4-3 校时操作六、实验运行结果、分析6.1实验运行结果与分析结果:当程序开始全速运行时,LED显示器上显示“00 00 00 00”,一秒后变为“00 00 01”这样每隔一秒秒位加1,显示“ 00 00 59”的后一秒显示为“00 01 00”,显示“23 59 59”的后一秒显示为“ 00 00 00”。三个按键分别用于实现复位清零、分钟加一、小时加一的系列校时操作,按下复位后,数码管显示初值,加一即在原来基础上进行。分析:将8255A的 A口(PA0-PA7)作为输出用,A口(PA0-PA7)作为输出用(送段选码),B口(PB0-PB7)作为输出用(送段选码),C口作为输出用(送位选码)。程序首先从8255A的A口读取初始值,并进行显示时间,若按键有中断则响应中断操作。在8255A的B口送段选码,C口送位选码后在LED显示器上显示时间;若中断操作为分钟加一或小时加一,则将对应的值经段码表转换及程序转换后在B口(PB0-PB7)输出作为段选码,在C口输出位选码后在LED显示器上显示时间。然后程序判断之前设置的一秒的时间常量有没有到,若一秒时间到,则将时间加一后接着显示。6.2问题讨论该试验一开始较简单仅显示分秒,没有出现什么问题,后来加上时日和毫秒以及按键后致使程序变得复杂,条件跳转超出范围而调用子程序又有错,后来终于使用JMP指令完成了程序,结果达到了要求但程序太繁杂条理不清,然后自己又将程序进行一些优化,把多余的操作删掉后,终使程序较为理想。七、实验心得微机原理与接口技术是一门很有趣的课程,任何一个计算机系统都是一个复杂的整体,学习计算机原理是要涉及到整体的每一部分。讨论某一部分原理时又要涉及到其它部分的工作原理。这样一来,不仅不能在短时间内较深入理解计算机的工作原理,而且也很难孤立地理解某一部分的工作原理。所以,在循序渐进的课堂教学过程中,我总是处于“学会了一些新知识,弄清了一些原来保留的问题,又出现了一些新问题”的循环中,直到课程结束时,才把保留的问题基本搞清楚。学习该门课程知识时,其思维方法也和其它课程不同,该课程偏重于工程思维,具体地说,在了解了微处理器各种芯片的功能和外部特性以后,剩下的是如何将它们用于实际系统中,其创造性劳动在于如何用计算机的有关技术和厂家提供的各种芯片,设计实用的电路和系统,再配上相应的应用程序,完成各种实际应用项目。这次实验我选择的题目有是数字钟,因为一开始感觉并不是很难,所以就想一个人独自完成本次的课程设计,刚开始我的想法是硬件主要利用两个芯片,8255和8253,利用8253的通道0实现计时单元,同时利用软件进行计数,而时间显示则采用6个7段数码管分别显示时、分、秒,并采用动态扫描方式来实现。但我依着这个总体设计想法做了两天后,硬件也连接好了,代码也写好了,但是数码管总是显示的不对,然后又花了一天的时间去调代码,可是最后还是没调出来,主要就是对数码管的控制不好,用8255的C口PC0PC6来分别控制六个数码管,但是总是显示的不对,请同学帮看看后,也没有得到很好的解决。所以我立刻改了方案,利用软件计数,同时用8255的C口控制8个7段数码管,多出的两位用来增加毫秒的显示功能,同时利用不可屏蔽中断NMI实现始终的复位、校时的功能,当然这样的设计也不是一帆风顺的,主要的困难来自对程序的理解,例如始终的两位,逢十就要向十位进一,余数用作个位的显示,同时每100ms要向秒进1,每逢60s要向分进1,每逢60min要向小时进1,而一天只有24小时,整个过程要用软件进行控制,其实是有难度的,还涉及到内存的存取原理,低位高位的转换等等,都是需要我一个人去解决的,功夫不负有心人,经过我的摸索以及向同学的一些请教,我最终对实验的原理有了清晰的认识。虽然主要芯片就是用了8255,但是在那么短的时间内能够完成设计既定的功能,我对这个结果还是很满意的。总之,通过这次课程设计,我更加清晰的认识了计算机中常用接口电路及8255A的应用和设计技术,也认识到了理论知识对应用技术的指导性作用。通过实践,我进一步加深了对专业知识和理论知识学习的认识和理解,使自己的设计水平和对所学的知识的应用能力以及分析问题、解决问题的能力得到了一定的提高。我也更加深入地理解了,微机原理课程上讲到的各种芯片的功能,以及引脚的作用,同时加深了对于主要芯片的应用的认识。在实验过程中,我也遇到了一些困难,但是我通过及时请教同学,查询相关资料,及时解决了问题,但仍有不足之处,我将会在今后学习中更加努力。八、参考文献1 顾晖,梁惺彦等.微机原理与接口技术.北京:电子工业出版社,2011.82 沈美明,温冬婵.IBM-PC汇编语言程序设计(第2版). 北京:清华大学出版社,2001附录(源代码):IO1EQU200H IO2EQU400H CODESEGMENTCODE ASSUMECS:CODESTART:MOVES,AXMOVSI,2H*4;不可屏蔽中断NMI向量设置MOVAX,OFFSET UPDATETIME;偏移地址MOVES:SI, UPDATETIME MOVAX, SEG UPDATETIME;段地址 MOVES:SI+2,AX MOVAL,10001001B;显示8255A初始化,A,B,C三端口均工作在方式0,基本输出MOVDX,IO1+6OUTDX,AL MOVAL,10000000B;控制器8255A初始化,C端口输出MOVDX,IO2+6OUTDX,AL LOP1: CALLTIMEDISPLAY;调用时间显示器CALLTIMESET;调用设置时间JMPLOP1 MOVAH,4CHINT21HTIMESETPROC;设置时间显示器PUSHDXPUSHCXPUSHBXPUSHAXPUSHSIPUSHDIPUSHFLEADI,TIMEOUTMOVDX,WORD PTRDI;取计时器分钟MOVCX,WORD PTRDI+2;取计时器秒钟MOVBX,WORD PTRDI+4;取计时器分钟MOVAX,WORD PTRDI+6;取计时器秒钟XCHGAH,AL;由于内存关系,高低位交换XCHGBH,BLXCHGCH,CL;由于内存关系,高低位交换XCHGDH,DLCMPAL,9;毫秒100进1,与9相比,如果相等则加一后向高位进一;否则直接加一JNZNEXT2MOVAL,-1;因为都要加一,所以要显示0这里给-1值CMPAH,9JNZNEXT3MOVAH,-1CMPBL,9JNZNEXT4MOVBL,-1CMPBH,5;秒60进1JNZNEXT5MOVBH,-1CMPCL,9JNZNEXT6MOVCL,-1CMPCH,5;分60进1JNZNEXT7MOVCH,-1CMPDL,9JNZNEXT8MOVDL,-1CMPDH,2;24小时JNZNEXT9MOVDH,-1 NEXT9:INCDH;加1操作 NEXT8:INCDL NEXT7:INCCH NEXT6:INCCL NEXT5:INCBH NEXT4:INCBL NEXT3:INCAH NEXT2:INCAL XCHGAH,AL;由于内存关系,高低位交换XCHGBH,BLXCHGCH,CL;由于内存关系,高低位交换XCHGDH,DLMOVWORD PTRDI,DX;取计时器分钟MOVWORD PTRDI+2,CX;取计时器秒钟MOVWORD PTRDI+4,BX;取计时器分钟MOVWORD PTRDI+6,AX;取计时器秒钟POPFPOPDIPOPSIPOPAXPOPBXPOPCXPOPDXRET TIMESETENDPTIMEDISPLAY PROC;调用时间显示器PUSHCXPUSHBXPUSHAXPUSHSIPUSHDIPUSHFMOVCL,77H;01110111循环右移MOVCH,0LEASI,TIMEOUTMOVDI,SIADDDI,4DISP2:MOVAL,CL;输出位码MOVDX,IO2+4OUTDX,AL MOVBX,OFFSET LEDTAB;输出A段码MOVAL,SIXLATMOVDX,IO2OUTDX,AL MOVBX,OFFSET LEDTAB;输出B段码MOVAL,DIXLATMOVDX,IO2+2OUTDX,ALCALLDISPLAY;延时 MOVAL,0H;清空A端口的内容MOVDX,IO2OUTDX,AL MOVAL,0H;清空B端口的内容MOVDX,IO2+2OUTDX,AL INCDIINCSIRORCL,1INCCHCMPCH,4JZNEXTTIMEJMPDISP2NEXTTIME:POPFPOPDI

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论