微机课程设计8路抢答器.doc
Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-date微机课程设计8路抢答器广东海洋大学目录第一章 八路抢答器的设计要求与设计案41.1 八路抢答器方案的选择与比较41.2 八路抢答器的元件选择 4第二章 八路抢答器的硬件设计62.1 八路抢答器的硬件框图 62.2 显示电路设计 62.3 抢答电路设计 72.4 开始、复位开关控制电路设计 72.5 可编程并行接口8255及其引脚说明82.6 8086及引脚说明 10第三章 八路抢答器的软件设计 183.1 主程序流程图 183.2 显示模块程序设计 183.3 延时模块程序设计 193.4 开始模块程序设计 193.5 复位模块程序设计 20第四章 设计体会与小结 21附录一 硬件电路 22附录二 程序代码 23附录三 元件清单 24附录四 参考文献 24前言微机接口课程设计是将理论知识和实践能力相统一的一个环节,是真正锻炼学生能力的一个环节。抢答器能保证比赛中抢答的公正性,在很多场合得到了广泛的应用。 抢答器具有锁存与显示功能。即选手按动按钮,锁存相应的编号,并在LED数码管上显示。选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止。现在很多地方都可能会有各种智力竞赛,当遇到抢答环节时,如果要求主持人自己去用肉眼观察那一个选手抢答的速度最快无疑会对比赛结果造成很大的影响,同时使比赛失去了公平和公正性,这时候我们想到了抢答记分器是必要设备。数字抢答器由主体电路与扩展电路组成。优先编码电路、锁存器、译码电路将参赛队的输入信号在显示器上输出;用控制电路和主持人开关启动电路,以上两部分组成主体电路。通过定时电路和译码电路将秒脉冲产生的信号在显示器上输出实现计时功能,构成扩展电路。本论文主要介绍了一种用8255芯片实现的数码八位抢答器的电路组成、设计构想及功能。该抢答器除具有基本的抢答功能外,还具有计时的功能。主持人通过时间预设开关计算抢答时间。系统将完成自动倒计时。若在规定的时间内有人抢答,则计时将自动停止;若在规定的时间内无人抢答,主持人按复位键重新开始。抢答器在现实生活中应用很广泛,因此抢答器的的设计具有非常重要的意义。第一章 八路竞赛抢答器的设计要求与设计方案1.1 八路竞赛抢答器的方案选择与比较本设计以微机原理及接口技术为基础,以实验箱为工具,完成P智能抢答器设计。该智能抢答器包括8086最小应用系统整体设计模块、键盘处理模块(DOS调用)、答题计时模块、LED数码管显示模块。选用8086作为微处理器、扩展可编程并行I/O接口8255A芯片、可编程定时计数芯片8253(或不用)、可编程中断控制器8259A(或不用)、LED数码管及键盘和发光二极管等元件,制定方案如下:方案一 选用8255A,8253,8259,实验箱键盘显示区1. 8253作为定时器使用。2. 8259利用IR0端作为定时到的中断引入端,IR2端作为开始键按下的中断引入端,IR3端作为清零键按下的中断引入端,IR4端作为暂停键按下的中断引入端。3. 8255 作为并行输入输出,A口键盘接显示区,C口接清零键和开始键,B口8个抢答开关4. 键盘显示区由四个LED数码管和10个按键组成。方案二 选用8255,实验箱键盘显示区1. 8255作为并行I/O接口,A口接8个抢答开关,B口显示区,C口清零键和开始键。2. 利用软件编程进行定时功能方案选择:方案二采用扫描,没有用到8259,8253程序编制简单,但是cpu耗费了更多的时间在扫描,效率相对来说较低。方案一采用中断,程序结构化更为清晰,且cpu少了循环扫描的时间,效率较高。但是多用了一个8259中断控制芯片,一个8253定时/计时芯片,程序编制上涉及到中断服务子程序的编写,稍显复杂,且硬件相应增多,费用也相应较多。经过小组讨论,先采用更实用、经济的方案二,完成基本和扩展功能。若有时间,再采用方案一完成实验。1.2 八路竞赛抢答器的元件选择1)处理器的选择微型机具有体积小、重量轻、耗电少、价格低廉、可靠性高、结构灵活等特点,所以选择8086系统2)显示电路 显示可通过彩灯和数码管来实现。如果用彩灯作为显示功能,则不是很直观。而数码管具有显示亮度高,使用寿命长,且能直观方便的看到倒计时数字,和选手编号,因此选用数码管显示。 3)芯片选择8255作为并行I/0接口,能满足10个输入按键的输入功能,声音系统的输出,和LED数码管的输出。并且8255的每个接口还有锁存和数据缓冲作用。所以选择8255芯片。第二章 八路竞赛抢答器的硬件设计2.1 八路竞赛抢答器的硬件框图8255A八段数码管显示电路按键电路倒计时和抢答电路系统复位等辅助电路8086CPU 图2.1-八路竞赛抢答器硬件框图2.2 显示电路设计8255芯片的PB0至PB7分别与数码管的八个引脚相连。将8255芯片中需要显示的信息通过B口送入数码显示区,由数码管的亮灭显示出来。图2.2-显示电路2.3 抢答电路设计8255芯片的PA0至PA7分别与8个拨码开关相连,将八位选手的抢答信号(由拨码开关控制)通过A口送入8255芯片。图2.3-抢答电路2.4 开始和复位电路 8255芯片的PC0口对应开始按键,PC3口对应复位按键。将抢答开始和结束的信号(由开始按键和复位按键控制)通过C口送入8255芯片。 图2.4-开始和复位电路2.5 可编程并行接口8255及其引脚说明图2-5 8255A引脚图引脚功能RESET:复位输入线,当该输入端处于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。 CS:芯片选择信号线,当这个输入引脚为低电平时,即/CS=0时,表示芯片被选中,允许8255与CPU进行通讯;/CS=1时,8255无法与CPU做数据传输。 RD:读信号线,当这个输入引脚为低电平时,即/RD=0且/CS=0时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。 WR:写入信号,当这个输入引脚为低电平时,即/WR=0且/CS=0时,允许CPU将数据或控制字写入8255。 D0D7:三态双向数据总线,8255与CPU数据传送的通道,当CPU 执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。 PA0PA7:端口A输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入锁存器。 PB0PB7:端口B输入输出线,一个8位的I/O锁存器, 一个8位的输入输出缓冲器。 PC0PC7:端口C输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入缓冲器。端口C可以通过工作方式设定而分成2个4位的端口, 每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。' A1,A0:地址选择线,用来选择8255的PA口,PB口,PC口和控制寄存器. 当A1=0,A0=0时,PA口被选择; 当A1=0,A0=1时,PB口被选择; 当A1=1,A0=0时,PC口被选择; 当A1=1.A0=1时,控制寄存器被选择。8255端口地址端口地址PA口60HPB口61HPC口62H控制口63H表2-12.6 8086及引脚说明图2-6 8086引脚图两种模式下,名称和功能相同的32个引脚1、VCC、GND:电源、接地引脚(3个),8086CPU采用单一的+5V电源,但有两个接地 引脚。2、 AD15AD0(Address Data Bus):地址/数据复用信号输入/输出引脚(16个),分时输出 低16位地址信号及进行数据信号的输入/输出。3、A19/s6A15/s3(Address Status Bus):地址/状态复用信号输出引脚(4个),分时输出 地址的高4位及状态信息,其中s6为0用以指示8086CPU当前与总线连通;s5 为1表明8086/8088CPU可以响应可屏蔽中断;s4、s3共有四个组态,用以指明当前 使用的段寄存器,如表9-5所示,00ES,01SS,10CS,11DS。4、NMI(Non-Maskable Interrupt)、INTR(Interrupt Request):中断请求信号输入引脚(2),引入中断源向CPU提出的中断请求信号,高电平有效,前者为非屏蔽中断请求,后者为可屏蔽中断请求信号。5、(Read):读控制输出信号引脚(1),低电平有效,用以指明要执行一个对内存单元或I/O端口的读操作,具体是读内存单元,还是读I/O端口,取决于控制信号。6、CLK/(Clock):时钟信号输入引脚(1),时钟信号的方波信号,占空比约为33%,即1/3周期为高电平,2/3周期为底电平,8086/8088的时钟频率(又称为主频)为4.77MHz,即从该引脚输入的时钟信号的频率为4.77MHz。7、Reset(Reset):复位信号输入引脚(1),高电平有效。8088/8086CPU要求复位信号至少维持4个时钟周期才能起到复位的效果,复位信号输入之后,CPU结束当前操作,并对处理器的标志寄存器、IP、DS、SS、ES寄存器及指令队列进行清零操作,而将CS设置为0FFFFH。8、READY(Ready):“准备好”状态信号输入引脚(1),高电平有效,“Ready”输入引脚接收来自于内存单元或I/O端口向CPU发来的“准备好”状态信号,表明内存单元或I/O端口已经准备好进行读写操作。该信号是协调CPU与内存单元或I/O端口之间进行信息传送的联络信号。9、 (Test):测试信号输入引脚(1),低电平有效,TEST信号与WAIT指令结合起来使用,CPU执行WAIT指令后,处于等待状态,当TEST引脚输入低电平时,系统脱离等待状态,继续执行被暂停执行的指令。10、MN/MX(Minimum/Maximum Model Control)最小/最大模式设置信号输入引脚(1),该输入引脚电平的高、低决定了CPU工作在最小模式还是最大模式,当该引脚接+5V时,CPU工作于最小模式下,当该引脚接地时,CPU工作于最大模式下。11、/S7(Bus High Enable/Status):高8位数据允许/状态复用信号输出引脚(1),输出。分时输出有效信号,表示高8为数据线D15D8上的数据有效和S7 状态信号,但S7未定义任何实际意义。 利用信号和AD0信号,可知系统当前的操作类型,具体规定见表2-2 所示。表2-2 和A0的代码组合和对应的操作A0操作所用数据引脚00从偶地址单元开始读/写一个字AD15 AD001从奇地址单元或端口读/写一个字节AD15 AD810从偶地址单元或端口读/写一个字节AD7 AD011无效-01从奇地址开始读/写一个字(在第一个总线周期将低8位数据送到AD15 AD8,下一个周期将高8位数据送到AD7 AD0 )AD15 AD010 在8088系统中,该引脚为,用来与、一起决定8088芯片当前总线周期的读写操作,如表2-3所示。 性能 1 0 0 中断响应 1 0 1 读I/O端口 1 1 0 写I/O端口 1 1 1 暂停(Halt) 0 0 0 取指令操作码 0 0 1 读存储器 0 1 0 写存储器 0 1 1 无源表2-3(3).最小模式下的24-31引脚 当8086CPU的引脚固定接+5V时,CPU处于最小模式下,这时候剩余的2431共8个引脚的名称及功能如下:1、(Interrupt Acknowledge)中断响应信号输出引脚(1),低电平有效,该引脚是CPU响应中断请求后,向中断源发出的认可信号,用以通知中断源,以便提供中断类型码,该信号为两个连续的负脉冲。2、ALE(Address Lock Enable):地址锁存允许输出信号引脚(1),高电平有效,CPU通过该引脚向地址锁存器8282/8283发出地址锁存允许信号,把当前地址/数据复用总线上输出的是地址信息,锁存到地址锁存器8282/8283中去。注意:ALE信号不能被浮空。3、(Data Enable):数据允许输出信号引脚,低电平有效,为总线收发器8286提供一个控制信号,表示CPU当前准备发送或接收一项数据。4、(Data Transmit/Receive):数据收发控制信号输出引脚(1),CPU通过该引脚发出控制数据传送方向的控制信号,在使用8286/8287作为数据总线收发器时,信号用以控制数据传送的方向,当该信号为高电平时,表示数据由CPU经总线收发器8286/8287输出,否则,数据传送方向相反。5、(Memory/Input &Output): 存储器/I/O端口选择信号输出引脚(1),这是CPU区分进行存储器访问还是I/O访问的输出控制信号。当该引脚输出高电平 时,表明CPU要进行I/O端口的读写操作,低位地址总线上出现的是I/O端口的地址;当该引脚输出低电平时,表明CPU要进行存储器的读写操作,地址总线上出现的是访问存储器的地址。 6、(Write): 写控制信号输出引脚(1),低电平有效,与配合实现对存储单元、I/O端口所进行的写操作控制。 7、HOLD(Hold Request): 总线保持请求信号输入引脚(1),高电平有效。这是系统中的其它总线部件向CPU发来的总线请求信号输入引脚。 8、HLDA(Hold Acknowledge):总线保持响应信号输出引脚,高电平有效,表示CPU认可其他总线部件提出的总线占用请求,准备让出总线控制权。(4).最大模式下的24-31引脚当8086CPU的引脚固定接地时,CPU处于最大模式下,这时候剩余的2431共8个引脚的名称及功能如下:1、QS1、QS0(Instruction Queue Status):指令队列状态信号输出引脚(2),这两个信号的组合给出了前一个T状态中指令队列的状态,以便于外部88086CPU内部指令队列的动作跟踪,如下表所示:性能00无操作01从指令队列的第一个字节取走代码10队列为空11除第一个字节外,还取走了后续字节中的代码表2-42、:总线周期状态信号输出引脚(3),低电平的信号输出端,这些信号组合起来,可以指出当前总线周期中,所进行数据传输过程的类型,总线控制器8288利用这些信号来产生对存储单元、I/O端口的控制信号。、与具体物理过程之间的对应关系,如表所示。表9-6 的状态编码性能100中断响应101读I/O端口110写I/O端口111暂停000取指001读存储器010写存储器011无作用表2-5这里对无源状态(在的最小模式中也存在,见P19)作一说明:从表中可以看出,每一种的组合都对应一个具体的总线操作,除111外,其余都称为有源状态。也就是说,在有源状态(对应前一个总线周期的和本总线周期的和状态)中,至少有一个信号为0,当时(对应总线周期的和且READY1),也就是一个总线操作即将结束,另一个总线周期还未开始时,称为无源状态,很显然,这时中任一信号的改变,都意味着一个新的总线周期的开始。3、 (Lock):总线封锁输出信号引脚(1),低电平有效,当该引脚输出低电平时,系统中其它总线部件就不能占用系统总线。 信号是由指令前缀LOCK产生的,在LOCK前缀后面的一条指令执行完毕之后,便撤消信号。此外,在8086的2个中断响应脉冲之间,信号也自动变为有效的低电平,以防止其它总线部件在中断响应过程中,占有总线而使一个完整的中断响应过程被中断。4、(Request/Grant):总线请求信号输入/总线允许信号输出引脚(2)。这两个信号端可供CPU以外的两个处理器,用来发出使用总线的请求信号和接收CPU对总线请求信号的应答。这两个引脚都是双向的,请求与应答信号在同一引脚上分时传输,方向相反。其中比的优先级高。(5).相关问题的说明1、8086的数据线与地址线、状态线是分时复用的,即在某一时刻,总线上出现的是输出地址信息,在另一时刻,总线上是所需读、写的数据信息,或状态信息。2、除了个别引脚外,8086的控制信号引脚的定义是一致的,有差别的是,8088的第18脚为,8086为,主要是为了使前者能与8位微处理器8080/8085 相兼容的缘故。8086第34引脚为/S7,这是因为8086 有16根数据线,可以用高、低8位总线分别进行一个字节的传送,也可以同时进行两个字节的传送, 正是为了指明这几类操作而设置的。3、Reset引脚是复位信号输入端,系统启动、或在系统运行过程中,CPU在接收到Reset信号后,会使系统复位。复位后,CPU处于如下状态: CPU的标志寄存器、指令指针寄存器IP、段寄存器DS、ES、SS和指令队列均被清零,码段寄存器CS被置为FFFFH,CPU将从0FFFF0H处开始执行指令。4、CPU与内存、I/O端口之间在时间上的匹配主要靠“READY”信号。5、信号与(或)配合使用,指明从内存或者I/O端口读信息6、高4位地址线与状态线分时复用,在T1状态,输出地址信息,在其余状态,输出状态信息。(6).8086CPU的引脚分类8086CPU的40个引脚可以分成下列几大类:(1)数据/地址复用线、地址线、地址/状态复用线AD0AD7 、AD8AD15、)A16A19/S3S6;(2)常规信号GND(2个)、CLK;(3)常用信号ALE、;(4)中断INTR、NMI、;(5)、READY、RESET;(6)HOLD、HLDA;(7)(8086)、。第三章八路抢答器的软件设计 软件的设计的重点在延时,显示倒计时和选手编号和按键抢搭、开始和清零的实现。延时采用嵌套循环的方式实现。3.1 主程序流程图8255A初始化开始按键是否按下 N Y倒计时显示启动倒计时时间到否 Y N是否有人抢答 N Y 显示抢答号码停止倒计时显示 复位按键是否按下 N Y 图3.1-主程序流程图3.2 显示模块程序设计基本显示模块设计的重点是由显示代码取得相应的段码,通过锁存器控制输出给相应的数码管显示。B口输出数据转换为八位段码数码管显示图3.2-显示模块程序流程图3.3 延时模块程序设计延时模块的关键是计算计算机一秒能执行多少指令,再通过循环控制。在CX中存入外循环次数在BX中存入内循环次数BX减一BX是否自减为零 NCX减一 YCX是否自减为零 N延时完成 Y图3.3延时模块程序流程图3.4 开始模块程序设计读入C口数据开始按键是否按下 N往下执行程序 Y 图3.4-开始模块程序设计流程图3.5 复位模块程序设计复位按键是否按下 N Y将B口输出为0,即讲数码管清零重新开始抢答读入C口数据 图3.5-清零模块程序设计流程图第四章 设计体会与小结微机原理及应用作为我们主要的专业课程之一,我觉得做这个课程设计是很有意义的,同时也很有必要。当拿到题目时,确实不知道怎么着手,有些迷茫,上网查资料,历时两个星期,解决一个又一个的困难,终于完成任务。在这次课程设计中,运用到了很多以前的专业知识,虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的一大收获。另外,要做好一个课程设计,就必须做到:在设计程序之前,对所用的8086有一个系统的了解,知道8086内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常的,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计结束了,但是从中学到的知识会让我受益终身。发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。设计过程,好比是我们人类成长的历程,常有一些不如意,但毕竟这是第一次做,难免会遇到各种各样的问题。在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,不能灵活运用。通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。另外,要非常感谢我的指导老师,是他指引我克服一个由一个的困难,让我学会对困难无所畏惧,以及对问题的一些很重要的思考方法。我学会对困难无所畏惧,以及对问题的一些很重要的思考方法。附录附录一 系统硬件原理图附录二 程序清单源程序:DATA SEGMENTDATA ENDSCODE SEGMENTASSUME DS:DATA,CS:CODESTART:MOV AL,10010001B OUT 63H,AL MAIN:IN AL,62H TEST AL,01H JZ MAIN MOV AL,00H OUT 61H,AL B1: MOV AL,77H OUT 61H,AL CALL A1 MOV AL,6FH OUT 61H,AL CALL A1 MOV AL,7FH OUT 61H,AL CALL A1 MOV AL,07H OUT 61H,AL CALL A1 MOV AL,7DH OUT 61H,AL CALL A1 MOV AL,6DH OUT 61H,AL CALL A1 MOV AL,66H OUT 61H,AL CALL A1 MOV AL,4FH OUT 61H,AL CALL A1 MOV AL,5BH OUT 61H,AL CALL A1 MOV AL,06H OUT 61H,AL CALL A1 MOV AL,3FH OUT 61H,AL CALL AA AA PROC IN AL,62H TEST AL,08H JZ C1 JMP AA C1: MOV AL,00H OUT 61H,AL JMP MAIN RETAA ENDP A1 PROC MOV CX,0100H BB1:MOV BX,00B0HBB2:IN AL,60H CMP AL,00000001B JZ AA1 CMP AL,00000010B JZ AA2 CMP AL,00000100B JZ AA3 CMP AL,00001000B JZ AA4 CMP AL,00010000B JZ AA5 CMP AL,00100000B JZ AA6 CMP AL,01000000B JZ AA7 CMP AL,10000000B JZ AA8 DEC BX JNZ BB2 LOOP BB1 RET A1 ENDPAA1:MOV DX,61H MOV AL,06H OUT DX ,AL JMP AA AA2:MOV DX,61H MOV AL,5BH OUT DX ,AL JMP AAAA3:MOV DX,61H MOV AL,4FH OUT DX ,AL JMP AAAA4:MOV DX,61H MOV AL,66H OUT DX ,AL JMP AAAA5:MOV DX,61H MOV AL,6DH OUT DX ,AL JMP AAAA6:MOV DX,61H MOV AL,7DH OUT DX ,AL JMP AAAA7:MOV DX,61H MOV AL,07H OUT DX ,AL JMP AAAA8:MOV DX,61H MOV AL,7FH OUT DX ,AL JMP AACODE ENDSEND START附录3 元件清单元件数量808618255A1蜂鸣器1数码管1电阻10排阻1开关2附录4 参考文献微型计算机原理及应用 郑学坚/周斌 清华大学出版社微机原理与接口技术 李芷/杨文显 电子工业出版社微机接口技术及其应用 李育贤 西安电子科技大学出版社 新版汇编语言程序设计 钱晓捷 清华大学出版社-