1、接口技术课程设计 微机原理课程设计 课题:八路数字抢答器设计 学院:电子与信息工程学院 班级:11通信1班 学号:20111334020 姓名:杨丹 指导教师:乔杰 2013/11/15 目录 一.实验目的…………………………………………………………3 二.八路数字抢答器的内容与功能…………………………………3 三. 八路数字抢答器的设计原理与方案…………………………3 3.1八路数字抢答器的设计思路………………………………3 3.2八路数字抢答器的硬件设计………………………………
2、4 3.2.1 八路数字抢答器的硬件框图……………………4 3.2.2 通过译码器产生片选信号………………………4 3.2.3 显示电路设计……………………………………5 3.2.4 异或门实现禁止多位选手抢答设计……………5 3.2.5 抢答器设计……………………………………6 3.2.6 开始与复位……………………………………6 3.3 主程序流程图…………………………………………7 四. 设计体会与小结…………………………………………8 五.附录…………………………………………………8 附录一 …………………………………………………………9 附录二
3、……………………………………………………………10 一.本次课程设计应达到的目的: 1、综合运用相关课程中所学到的理论知识去独立完成某一设计课题; 2、通过查阅手册和相关文献资料,培养学生独立分析和解决问题的能力; 3、进一步熟悉8086CPU和常用接口电路,加深对专业知识和理论知识学习的认识和理解; 4、学会电路的安装与调试; 5、进一步熟悉电子仪器的正确使用; 6、学会撰写课程设计的总结报告; 7、培养严肃认真的工作作风和严谨的科学态度。 二.本课程设计课题任务的内容和功能: ·以8086为核心,设计一个8位竞赛抢答器:同时供8名选手或8
4、个代表队比赛,分别用8个按钮S1~S8表示。 ·设置一个系统清除和抢答控制按钮,按钮由主持人控制。。 ·系统能进行多次抢答,按停止或者倒计时到0后能重新按下开始按钮进行抢答。 ·抢答器具有锁存,清除锁存与显示功能。在主持人按开始键之前出现抢答情况,虽然已经锁存,但开始按钮将锁存信号清零。并且每次停止后,重新开始也会将之前抢答者的锁存信号清除,进行下一轮的抢答。 ·抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如20秒)。 ·当主持人启动“开始”键后,定时器进行减计时,同时扬声器发出短暂的声响,声响持续的时间为0.5s左右。 ·参
5、赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。 ·如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00。 三.八路数字抢答器的设计原理与方案 3.1 八路数字抢答器的设计思路 1、用8255A作为输入输出设备,A口输出,c口高位作为输出,B口作为键盘输入,c口低位作为主持人控制键输入。 2、8253A作为定时装置,由0计时器产生1秒为周期的方波,其中高电平0.5秒,用此0.5秒的高电平作为1计数器 的门控制信号,控制1计数器的通断!1计数器输出一定频率的脉冲,使扬声器
6、发声! 3、用异或门配合组成电路实现禁止多位选手抢答 3.2 八路数字抢答器的硬件设计 3.2.1 八路竞赛抢答器的硬件框图 八段数码管显示电路 8255A 按键电路 倒计时和抢答电路 系统复位等辅助电路 8086CPU 3.2.2 通过译码器产生片选信号 3.2.3 显示电路设计 8255芯片的A口分别与数码管的八个引脚相连。将8255芯片中需要显示的信息通过A口送入数码显示区,由数码管的亮灭显示出来 3.2.4 异或门实现禁止多位选手抢答 3.2.5 抢答电路
7、设计 8255芯片的PB0至PB7分别与8个拨码开关相连,将八位选手的抢答信号(由拨码开关控制)通过B口送入8255芯片。 3.2.6 开始和复位电路 (开始按钮要有对锁存信号的清除功能) 8255芯片的PC0口对应开始按键,PC1口对应复位按键。将抢答开始和结束的信号(由开始按键和复位按键控制)通过C口送入8255芯片。二极管的作用:开始按钮清除锁存信号,而锁存信号不影响开始按钮。 3.3 主程序流程图 开始 初始化8255A BP送初值并显示00 读C口低位值 开始键是否按下 响声开始,BP送20,20秒倒计时开始 检查B口值 是否有人抢答 显示选
8、手号和抢答剩余时间 停止键是否按下 显示00 倒计时有没有结束 是 否 否 是 否 否 是 是 四 设计体会与小结 该实验经历了两周的时间,由于微机原理不学已有半年时间,加上刚刚学过的单片机,应该来说编程还是很有难度的。从刚开始懵懵懂硬件不会连接,到后来编程随意自如。虽然只有短短两周时间,却感觉学了一学期的内容。 本次实验我们组做一个抢答器,参阅了很多资料,参考百度文库里的硬件连接,最后自己附加接线以及编程功能。 本次设计中的难点:1:数码管动态显示问题:比如想让显示30,可却显示-1,而将8086频率降低以后,数码管一闪一闪的却能显示
9、完整的3和0,经查各种资料用来各种办法,才了解软件本身的问题,只能先送选中的位,再送段码才能完整显示。2,锁存信号的清除问题。即使没有开始按钮,只要按动了抢答按钮,其键值就会锁存并一直作用在PB口无法清零。然后按下开始后,其号码也会出现,这就产生了违规抢答,而且只能抢答一次,下一轮的抢答无法进行,这就需要清除违规或前一轮的抢答信号。因此,经过百般思考,在开始键与锁存使能端加单向二极管,当开始按下,其使能端为低电平,清除锁存,而没有抢答键按下时,使能端本身的低电平并不能传送到PC0口。3:8253控制扬声器。在此,本人也是用了大约半天时间学会控制8253通断以及控制时间的。(不是定时计数问题)
10、 仿真遇到的问题:由于软件本身不自带MASN32编译器,编译出现source code build FAILED with error。因此,我自己下载了emu8086软件来调试程序并且生成exe文件。 这次设计中,我学到了不少东西。现在用protues仿真能设计出很多东西了,带有倒计时功能以及报警功能的抢答器就是最好证明。个人感觉已经熟练运用此软件了,以后做设计已经变得如此简单。感谢张洁老师的教导,让我学习了非常重要的课程设计。 五.附录 附录一 系统仿真原理及运行结果图 附录二 程序清单 DATA SEGMENT TABLE1 DB 3FH,0
11、6H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH TABLE2 DB 0FFH,0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH BP DB ? SI DB ? COUNT DB 50 ; 设置变量 CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX ;8255初始化 MOV DX,0EEH
12、 MOV AL,10000011B ;A,B,C方式0,A,C输出,B输入 OUT DX,AL MOV BP,00 ;BP初值设置0 CC1: CALL BB1 ;开始显示0 MOV DX,0ECH ;读取C口低位值 IN AL,DX AND AL,0FH ;检查主持人开始抢答键是否按下 CMP AL,0E
13、H JNE CC1 ;没按下,跳到cc1,继续显示0 CALL BB2 ;驱动扬声器 MOV CX,0FFH MOV BP,20 ;设置抢答时间20秒 CC2: CALL BB1 ;按下,开始显示20秒倒计时 MOV DX,0EAH ;读取b口值,看是否有人抢答 IN AL,DX CMP
14、 AL,0FFH JNE CC3 ;有人抢,跳CC3处理 DEC COUNT JNZ CC2 MOV COUNT,50 ;没人抢,倒计时,每延时一秒 DEC BP JS CC4 ;倒计时结束时跳CC4 JMP CC2 CC4:MOV BP,0 CALL BB1 CALL BB2
15、 ;倒计时结束响喇叭 JMP CC1 CC3: MOV SI,08H ; 键值1-8 NEXT: IN AL,DX CMP AL,TABLE2[SI] ;检查键值 JE DONE DEC SI JMP NEXT DONE: MOV DX,0ECH ;显示键值 MOV AL,0E0H OUT DX,AL LEA BX,TA
16、BLE1 ;取段码 MOV AX,SI XLAT MOV DX,0E8H OUT DX,AL CALL DELAY CALL BB1 MOV DX,0ECH IN AL,DX AND AL,0FH ; 检查停止键 CMP AL,0DH JNE DONE ; 按下,停止 MOV BP,0 C
17、ALL BB1 ;显示00此处不响喇叭 JMP CC1 ;准备下一轮抢答 BB1 PROC NEAR ;显示子程序 MOV AL,0B0H ;第三位显示 MOV DX,0ECH ;C口高位 OUT DX,AL ; 此为了数码管完整显示必须先送位后送段码
18、 MOV AX,BP MOV DL,0AH DIV DL MOV BX,OFFSET TABLE1 XLAT MOV DX,0E8H OUT DX,AL CALL DELAY MOV AL,70H ;第四位显 MOV DX,0ECH ;C口高位 OUT DX,AL MOV AL,AH XLAT
19、MOV DX,0E8H OUT DX,AL CALL DELAY RET BB1 ENDP BB2 PROC NEAR ;8253驱动发声子程序 MOV AL,16H OUT 0F6H,AL MOV AX,1000 OUT 0F0H,AL MOV AH,AL OUT 0F0H,AL MOV AL,56H OUT 0F6
20、H,AL MOV AL,2 OUT 0F2H,AL MOV CX,50 L: CALL DELAY LOOP L AND AL,00H ;关喇叭 OUT 0F6H,AL RET BB2 ENDP DELAY PROC NEAR ; 延时子程序 PUSH BX PUSH CX MOV BX,10 T0: MOV CX,0FFH T1: LOOP T1 DEC BX JNZ T0 POP CX POP BX RET DELAY ENDP CODE ENDS END START 12






