当前位置:文档之家› 竞赛抢答器实验报告

竞赛抢答器实验报告

竞赛抢答器实验设计报告学院:电子信息工程学院
专业:轨道交通信号与控制
班级:自动化1302
姓名:刘佳丽 13212153
安若琳 13212144
刘琛 13212155
时间: 2015/12/26
一、实验目的
竞赛抢答器是一个综合性的自主设计实验,所有知识涵盖本课程中的并行接口芯片、中断控制器、定时计数器、DOS功能调用等。

通过此实验可以理解微机系统中各种接口电路的配合使用,掌握软件硬件协同工作原理,熟悉微机原理与接口技术的综合应用。

最终达到如下实验目的:
(1)熟悉竞赛抢答器的基本工作原理;
(2)理解数码管的显示工作原理和共阴极、共阳极数码管显示的编码方法,特别是数码管中 LED 的驱动问题;
(3)掌握并行接口 8255、中断控制器、定时计数器、DOS 功能调用的综合应用。

二、实验内容
本实验为利用本课堂所学知识自主设计一个“竞赛抢答器”,并在微机原理与接口技术实验平台实现其基本功能。

利用逻辑开关 K0~K7 代表竞赛抢答按钮 0~7 号,当某个逻辑电平开关置高电平“1”时,相当某组抢答按钮按下,程序通过判断找出最先按下的那组,并在七段数码管上将其组号(0~7)显示出来,并使喇叭“嘀”响一下。

按空格键开始下一轮抢答,按其它键程序退出。

附加要求(选做):
(1)能判断犯规操作:即抢答未开始提前按键的;
(2)能根据按键按下时间排序,并给出各个按键按下的时间间隔,已作为冲突冲裁依据。

三、实验提示
1.硬件接线部分。

图 1为竞赛抢答器(模拟)的原理图,利用实验箱上已有的总线驱动器74LS244 驱动 LED共阴极数码管。

图 1 竞赛抢答器(模拟)的实验原理图
2. 软件编程提示
响铃的 DOS 功能调用:
MOV DL, 7 ; 响铃 ASCII 码为 07
MOV AH ,2
INT 21H
四、实验设计
1.基本思路
设置8255为C口输入、A口输出,读取C口数据,若为0表示无人抢答,若不为0则有人抢答。

根据读取数据可判断其组号。

从键盘上按空格键开始下一轮抢答,按其它键程序退出。

2.实验流程图
3、实验源程序
DATA SEGMENT
LIST DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;列表存储数码管显示内容DATA ENDS
STACK1 SEGMENT STACK
DW 100H DUP(0)
STACK1 ENDS ;定义堆栈段
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK1
START: MOV AX,DATA
MOV DX,0EC0BH
MOV AL,89H
OUT DX,AL ;对8255进行初始化
L0: MOV DX,0EC0AH
IN AL,DX ;读C口状态
CMP AL,0 ;如果为0则循环
JZ L0
MOV BL,0
L1: INC BL
SHR AL,1 ;将AL逻辑右移
JNC L1
DEC BL
MOV AL,BL ;求出组号
MOV BX,OFFSET LIST ; 七段显示代码表的首址送BX AND AX,00FFH ; 屏蔽AX高字节,组号
ADD BX,AX ; 形成显示字符的地址
MOV AL,[BX] ; 取出字符送AL
MOV DX,0EC08H
OUT DX,AL ; 送到A口输出显示
MOV DL,7
MOV AH,2
INT 21H ;响铃功能调用
MOV AH,01H
INT 21H
CMP AL,20H ;当为空格时跳到CLOSE
JZ CLOSE
INT 21H
CLOSE: MOV AL,0
MOV DX,0EC08H
OUT DX,AL
JMP L0
CODE ENDS
END START
4.扩展实验程序
//实现在每一轮抢答时在屏幕上给出抢答开始提示//
DATA SEGMENT
LIST1 DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
LIST2 DB ‘START’,0AH,0DH,’$’;定义提示开始抢答的字符串DATA ENDS
STACK1 SEGMENT STACK
DW 100H DUP(0)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK1
START: MOV AX,DATA
MOV DS,AX
MOV DX,0EC0BH
MOV AL,89H
OUT DX,AL ;对8255进行初始化
L0: MOV DX,0EC0AH
IN AL,DX ;读C口状态
CMP AL,0 ;如果为0则循环
JZ L0
MOV BL,0
L1: INC BL
SHR AL,1 ;将AL逻辑右移
JNC L1
DEC BL
MOV AL,BL ;求出组号
MOV BX,OFFSET LIST ; 七段显示代码表的首址送BX AND AX,00FFH ; 屏蔽AX高字节,组号
ADD BX,AX ; 形成显示字符的地址
MOV AL,[BX] ; 取出字符送AL
MOV DX,0EC08H
OUT DX,AL ; 送到A口输出显示
MOV DL,7
MOV AH,2
INT 21H ;响铃功能调用
MOV AH,01H
INT 21H
CMP AL,20H ;当为空格时跳到CLOSE
JZ CLOSE
MOV AH,4CH
INT 21H
CLOSE: MOV AL,OFFSET LIST2
MOV DX,0EC08H
OUT DX,AL
JMP L0
CODE ENDS
END START
五、实验总结
这是最后一次的微机实验,这次实验是一个综合性的设计,所有知识涵盖本课程中的并行接口芯片、中断控制器、定时计数器、DOS功能调用等。

通过此实验可以理解微机系统中各种接口电路的配合使用,掌握软件硬件协同工作原理,熟悉微机原理与接口技术的综合应用。

实验具体来说还是比较简单的,电路连接方面主要按照原理指导图进行,但在后期具体仿真出现了一个问题,就是两个数码管同时显示了,但是实验要求是只有一个数码管显示,在研究确定了程序没有问题之后我们转而开始检查我们的电路连接,最终发现原来只要把数码管其中一个管脚接地就可以解决问题。

本次实验的难点在于如何将8位开关信号转化为对应的二进制数字信号,我们使用的方法是:将8位开关信号逻辑右移,并记录右移次数,直至出现1时停止计数,则,此时的计数值即为第几位开关信号。

在拓展实验方面,我们一开始研究了如何实现要求中所说的防犯规和冲突仲裁。

但是在几番研究也没有出结果的时候,我们小组成员转而开始想,是否可以添加一些其他的拓展功能。

于是我们联想到可以利用DOS功能调用的字符串显示功能,在抢答开始之前给出提示字符串,这一设想也比较符合实际抢答的基本规则。

最终现实的时候,我们的屏幕上出现START的同时还出现了一些乱码,在询问助教老师分析后,主教告诉我们可能并不是程序的问题。

另外,此次此次试验还有一个未解决的困惑。

在我们添加了拓展功能后,每次按下空格键进行初始化时,响铃时间较之之前为改变时变长了,但鉴于我们程序中对于响铃的调用并未做改变,这一问题在询问助教后,也没有能得出最终的解释。

相关主题