竞赛抢答器.docx
- 文档编号:7094016
- 上传时间:2023-01-17
- 格式:DOCX
- 页数:18
- 大小:163.49KB
竞赛抢答器.docx
《竞赛抢答器.docx》由会员分享,可在线阅读,更多相关《竞赛抢答器.docx(18页珍藏版)》请在冰豆网上搜索。
竞赛抢答器
竞赛抢答器
一、题义分析及解决方案:
1.题义需求分析:
本课程设计要求利用8086系统接口电路设计一个可供八人竞赛使用的竞赛抢答器,并显示抢答者的编号(1~8)。
主持人按下启动按钮允许抢答,显示器循环显示数字1~8,参赛方分别按下不同的抢答按钮参与抢答,一旦其中有一位按下按钮,显示器静止显示抢答者的编号。
此时,若其他抢答按钮按下均无效。
由题义分析可知,主持人需要一台控制设备控制抢答是否被允许,竞赛者各需一台抢答设备供抢答使用,本设计还需要一台设备显示抢答者的编号。
此外,在此次设计中,还应避免无人抢答和有两人或两人以上抢答者同时抢答的情况。
当这两种情况任一种出现时,均判为抢答无效,需重新抢答。
2.解决问题的方法及思路:
1).硬件部分:
a.选择可编程并行接口芯片8255A,实现八个竞赛抢答器的显示换码及输出。
本设计使8255A工作于方式0,即基本输入输出方式;将PA口作为输入口,读入八个竞赛者抢答的信号;PB口作为输出口,用于控制显示器的段选,即显示哪个数字;PC0作为输入口,读入主持人的控制信号,是否允许抢答。
b.选用二进制逻辑按钮,其中的八个按钮分别供八位参赛者抢答之用。
c.选用LED七段数码显示控制电路板一块,用于循环显示数字1~8,有抢答信号时显示抢答的结果。
只有一个抢答者抢答时显示抢答者的编号,当有两个或两个以上抢答者同时抢答时,显示错误信息E。
2).软件部分:
通过编写程序实现抢答过程。
首先,读主持人的抢答允许信号,当抢答允许时,显示器循环显示八位抢答者的编号1~8,等待抢答者抢答。
再读抢答者的抢答信号,当有抢答信号时,判断同时抢答的人数,只有一人则显示抢答者的编号,若有两人或两人以上同时抢答,则显示E,表示抢答无效,需重新抢答。
二、硬件设计:
1.芯片8255A
1).芯片8255A在本设计中的作用:
PA口送入抢答者开关量并进行锁存,PC0送入主持人是否允许抢答的信号量,通过控制程序的判断和处理,从PB口输出,在LED显示器上显示抢答结果。
2).芯片8255A的功能说明:
8255A是一种可控制编程的并行接口芯片,采用40脚双列直插式封装,单一+5V电源,全部输入/输出均与TTL电平兼容。
它有A、B、C三个并行输入/输出端口,其功能全部由程序设定,每个端口都有自己的特点。
本设计中8255A工作于方式0,即基本输入输出方式,其中PA口作为输入口,PB口作为输出口,PC0作为输入,C口的其他位不用。
8255A在方式0下可将三个数据端口划分为4个独立的部分,A、B口分为两个8位端口,C口高4位和低4位分别用作两个4位端口。
在此方式下,输出的数据被锁存,而输入的数据是不锁存的。
1 8255A的内部结构图如下:
图2——18255A的内部结构图
2 8255A的方式控制字:
D7D6D5D4D3D2D1D0
1
A组工作方式
A口I/O
C7-C4I/O
B组工作方式
B口I/O
C3-C0I/O
|||||||
特征位00:
方式01:
输入1:
输入0:
方式01:
输入1:
输入
01:
方式10:
输出0:
输出1:
方式10:
输出0:
输出
10:
方式2
图2——28255A的方式控制字
3 8255A的置位/复位控制字:
D7D6D5D4D3D2D1D0
0
×
×
×
写入位编码
写入内容
写入位|编码|
PC00000:
写入0
PC10011:
写入1
PC2010
PC3011
PC4100
PC5101
PC6110
PC7111
图2——38255A的方式控制字:
4 8255A的端口录址及操作功能:
A1
A0
端口号及其功能
0
0
0
1
0
端口A—>数据总线
输入操作(读)
0
1
0
1
0
端口B—>数据总线
1
0
0
1
0
端口C—>数据总线
0
0
1
0
0
数据总线—>端口A
输出操作(写)
0
1
1
0
0
数据总线—>端口B
1
0
1
0
0
数据总线—>端口C
1
1
1
0
0
数据总线—>控制字寄存器
x
x
x
x
1
未选中8255A,数据总线—>三态
断开功能
1
1
0
1
0
非法状态
x
x
1
1
0
数据总线—>三态
表2——18255A的端口录址及操作功能表
3).芯片8255A的技术参数:
参数名称
符号
测试条件
规范值
最大
最小
输入低电平电压
VIL
0.8v
-0.5v
输入高电平电压
VIH
Vcc
2.0v
输入低电平电压
<数据总线>
VOL
IOL=2.5mA
0.45v
输入低电平电压
<外部端口>
VOL
IOL=1.7mA
0.45v
输入高电平电压
<数据总线>
VOH
IOH=-400μA
2.4v
输入高电平电压
<外部端口>
VOH
IOH=-200μA
2.4v
达林顿驱动电流
IDAR
REXT=750
VEXT=1.5v
4.0mA
1.0mA
电源电流
ICC
120mA
输入负载电流
IIL
I=VCC~0v
+10mA
-10mA
输出浮动电流
IOFL
VOUT=VCco~0v
+10mA
-10mA
表2——28255A技术参数表
由上可知:
8255A的达林顿驱动电流最大值为4.0mA。
2.二进制逻辑按钮
1).二进制逻辑按钮在本设计中的作用:
八个按钮分别供8个竞赛者参与抢答使用。
2).二进制逻辑按钮的功能说明:
图2--4抢答者使用的按钮
本设计通过二进制逻辑按钮输入开关的编码,显示按动按钮的抢答者编号,按下为0信号,松开时为1信号。
输入开关编码
编号
11111110
1
11111101
2
11111011
3
11110111
4
11101111
5
11011111
6
10111111
7
01111111
8
表2——3二进制逻辑按钮真值表
3).二进制逻辑按钮的技术参数:
二进制逻辑按钮的工作电压一般为0-5V,0V表示低电平,用0表示,5V表示高电平,用1表示。
二进制逻辑按钮按下为0信号,松开为1信号。
3.LED发光二极管
1).LED发光二极管在本设计中的作用:
显示抢答者的编号,只选用一位。
2).LED发光二极管的功能说明:
有段选码和位选码确定数字1~8的输出并在延时程序中保持复位。
它是一种当外加电压超过额定电压时发生击穿,并因此而产生可见光的器件。
这种数码管是有7段或8段笔画显示器组成一个字符而形成的。
图2——5LED发光二极管逻辑图图2——6数码管内部结构
图2——7段选逻辑图
数字
dp
G
f
e
d
c
b
a
二进制编码
0
0
0
1
1
1
1
1
1
3Fh
1
0
0
0
0
0
1
1
0
06h
2
0
1
0
1
1
0
1
1
5Bh
3
0
1
0
0
1
1
1
1
4Fh
4
0
1
1
0
0
1
1
0
66h
5
0
1
1
0
1
1
0
1
6Dh
6
0
1
1
1
1
1
0
1
7Dh
7
0
0
0
0
0
1
1
1
07h
8
0
1
1
1
1
1
1
1
7Fh
表2——4LED显示管段选码编码表
3).LED发光二极管的技术参数:
LED发光二极管的压降一般为1.5-2.0V,其工作电流一般取10-20Ma,发光二极管可应用于直流驱动电路、交流驱动电路和脉冲驱动电路。
8255A的最大驱动电流为4.0mA,而LED的工作电流一般为10-20mA。
4.驱动器74LS244
1).74LS244在本设计中的作用:
用于驱动显示器,使编号能在LED上显示出来。
2).74LS244的功能分析
由于8255A的达林顿驱动电流最大为4mA,而发光二极管的驱动电流为10-20mA,8255A的驱动电流远远小于LED的驱动电流,这样肯定无法驱动LED发光二极管显示不出编号,所以需要选择驱动器74LS244。
3).74LS244的主要技术参数
关键参数说明:
74LS244最大输出电流为24mA。
图2——874LS244缓冲器逻辑图
G1
1A1~1A4
1Y1~1Y4
G2
2A1~2A4
2Y1~2Y4
0
1
1
0
1
1
0
0
0
0
0
0
1
0
高阻
1
0
高阻
表2——574LS244技术参数
最小
典型
最大
单位
VCC
4.75
5
5.25
V
高电平
输出电源
15
mA
低电平
输出电源
24
mA
TA
0
70
℃
表2——674LS244真值表
由于74LS244的驱动电流为24mA,满足题义要求,可以使竞赛者的编号从LED发光二极管上显示出来。
5.硬件总逻辑图及其说明:
图2——9硬件总逻辑图
在本设计中,8255A工作于方式0,PA口接入参赛者的抢答信号输入,PB口输出抢答者的编号,PC0控制抢答是否允许,当抢答允许时,LED显示管循环显示1~8的数字,8255A为基本输入输出方式。
8255A片选信号由PC机的高地址经过地址锁存器再由138译码器译码后的输出信号。
3、控制程序设计
1.控制程序设计思路说明:
根据所设计的硬件逻辑图,所需编写的控制程序主要有三个方面:
其一在程序中判断最高优先级者,其二在LED数码管中循环显示数字1~8,其三利用8255A进行换码显示抢答者编号。
具体实现步骤如下:
首先初始化8255A,使8255A工作于方式0,A口和C口作为输入口,B口作为输出口。
其中A口作为抢答者信号的输入,C口作为主持人信号的输入。
再设置LED显示管的位选码,读主持人开关量,为1表明不允许抢答,为0允许抢答。
允许抢答时,在显示管上循环显示数字1~8,每0.5s显示一个,每显示一个数字,读端口A的状态,当有抢答信号输入时,通过程序查表找出与端口A状态相同的数据,并以十进制LED上显示,以此来标志抢答器的按钮号码。
若无抢答信号,则显示循环的下个数字;若有两个或两个以上的抢答者同时按下按钮,则显示E,作为抢答无效标志。
最后重新复位,为下一轮抢答做好准备。
2.程序流程图:
图2—10程序流程图
3.控制程序:
.MODELTINY
PCIBAR3EQU1CH;8位I/O空间基地址(它就是实验仪的基地址,也DMA&
;32BITRAM板卡上的8237提供基地址)
Vendor_IDEQU10EBH;厂商ID号
Device_IDEQU8376;设备ID号
.STACK100
.DATA
IO_Bit8_BaseAddressDW?
msg0DB'BIOS不支持访问PCI$'
msg1DB'找不到StarPCI9052板卡$'
msg2DB'读8位I/O空间基地址时出错$'
COM_ADDDW00F3H;控制口偏移量
PA_ADDDW00F0H;PA口偏移量
PB_ADDDW00F1H;PB口偏移量
PC_ADDDW00F2H;PC口偏移量
NUMBERDB06H;显示1
DB5BH;显示2
DB4FH;显示3
DB66H;显示4
DB6DH;显示5
DB7DH;显示6
DB07H;显示7
DB7FH;显示8
DB79H;显示E
.CODE
START:
MOVAX,@DATA
MOVDS,AX
NOP
CALLINITPCI
CALLModifyAddress;根据PCI提供的基地址,将偏移地址转化为实地址
MOVDX,COM_ADD
;置8255A控制口地址
MOVAX,98H
;10011000B,A口方式0,输入;B输出,B口方式0;
;C口高4位输入,低4位输出
OUTDX,AL;禁止显示
PC1:
MOVDX,PC_ADD
INAL,DX;读主持人开关
CMPAL,00H;检测主持人开关是否置0
JNZPC1;ZF=0表示主持人开关为0,不允许抢答,则继续检测
;ZF=1表示主持人开关为1,允许抢答
MOVAL,07FH
OUTDX,AL;设置数码管位选码
MOVDX,PB_ADD;B口地址
LEABX,NUMBER;将代码表首地址存入BX中
PB1:
MOVAL,0
MOVCL,8;显示代码表的所有内容要循环8次
PUSHAX;保存AX中的内容
PB2:
XLAT
OUTDX,AL;显示数码管要显示的数字
PUSHDX
MOVDX,PA_ADD;A口地址
INAL,DX
CMPAL,0FFH
;AL=0FFH,则ZF=1;否则ZF=0
JNZPB3
;ZF=0表明无人抢答,继续循环检测A口有无数据输入
;ZF=1表明从A口有抢答者信号读入
CALLDL500MS;延时0.5s
INCAL
POPDX
POPAX
LOOPPB2
JMPPB1
PB3:
MOVDL,AL
MOVBL,0;将BL清零用于记录有几人同时按键
MOVCL,8;设置循环次数8次,分别检测8位参赛者是否按键
TEST1:
RORDL,1
JCTEST2
;CF=1跳转TEST2
INCBL;累加记录抢答同时者的数量
TEST2:
LOOPTEST1
CMPBL,1
JAERROR;抢答人数大于1时,则跳转至出错子程序
MOVBL,00H;将BL清零用于记录是几号参赛者抢答的
NEXT:
RORAL,1
JNCPRINT;有抢答信号
INCBL;累加计算BL开关位置
JMPNEXT
ERROR:
MOVBL,8
PRINT:
MOVAL,BL
LEABX,SSEGMENT;查表
XLAT;将BX的内容(代码表首地址)+AL的内容(表
;格偏移量)作为有效地址,最终内容存入AL中
MOVDX,PB_ADD
OUTDX,AL;显示抢答者号码
PC2:
MOVDX,PA_ADD
INAL,DX;读取A口数据
CMPAL,0FFH;检测所有开关是否置1
JNZPC2;ZF=0表示所有开关未置1则继续检测
PC3:
MOVDX,PC_ADD;读主持人开关量
INAL,DX
CMPAX,00H
JZPC3;检测主持人开关是否为1,为1则跳转进入下一轮
JMPPC1;置1则可以进行下一轮抢答
RET
DL500MSPROCNEAR
PUSHAX
PUSHDX
MOVDX,500
;延时500ms
MOVAH,0FFH
;星研公司提供的软中断
INT21H
POPDX
POPAX
RET
DL500MSENDP
INITPCIPROCNEAR
MOVAH,00H
MOVAL,03H
INT10H;清屏
MOVAH,0B1H
MOVAL,01H
INT1AH
CMPAH,0
JZINITPCI2
LEADX,msg0
INITPCI1:
MOVAH,09H
INT21H
JMPExit
INITPCI2:
MOVAH,0B1H
MOVAL,02H
MOVCX,Device_ID
MOVDX,Vendor_ID
MOVSI,0
INT1AH
JNCINITPCI3;是否存在StarPCI9052板卡
LEADX,msg1
JMPINITPCI1
INITPCI3:
MOVDI,PCIBAR3
MOVAH,0B1H
MOVAL,09H
INT1AH;读取该卡PCI9052基地址
JNCINITPCI4
LEADX,msg2
JMPINITPCI1
INITPCI4:
ANDCX,0FFFCH
MOVIO_Bit8_BaseAddress,CX
RET
INITPCIENDP
ModifyAddressPROCNEAR
ADDCOM_ADD,CX
ADDPA_ADD,CX
ADDPB_ADD,CX
ADDPC_ADD,CX
RET
ModifyAddressENDP
Exit:
MOVAH,4CH
INT21H
ENDSTART
四、上机调试过程
1、硬件调试:
在这一环节,花了将近1天的时间对硬件线路进行链接,根据实验前对实验方案的分析,在预设方案的基础上进行改动,将主持人开关选用二进制逻辑开关的一位,8个竞赛者使用二进制逻辑按钮。
2、软件调试:
由于主持人开关变量和数码管的数据显示都使用到了8255A的C口,故8255A的方式控制字要调整,由原来的99H改为98H,将老师的模式拿来套用,然而这却引发一系列的问题,经过不断的运行和调试,终于完成了没有错误的程序。
3、联机调试:
联机调试时比较简单,通过单步测试和断点调试,根据数码管显示的数据判断程序的问题:
1)打开主持人开关,数码管显示1后没有循环显示2,而是8,检查程序后发现,xlat命令是将BX的内容(代码首地址)与AL的内容(表格偏移量)相加作为有效地址,并从中取出此地址单元中的内容送到AL中,故AL中数据变换了,而程序要求循环显示1~8,Al应保持从0开始,始终加1,这就要保存AL的内容。
2)继续调试,之间的都是一些判断出错问题,一一单步调试解决,程序通过。
3)程序全速运行还有一些细节问题,当有两个抢答者分别先后按键,有时会显示E,按钮反应速度太慢,将延时程序的延时由1s改为0.5s。
4)当8号参赛者按下按钮时,数字8不能锁存,将8255A控制字改为98H,C口高8位输入,低8位输出。
解决了以上的一些主要问题后,具有抢答功能的程序就完成了,联机调试一下就运行出来了。
4、调试结果及问题的提出
修改之前:
抢答者通过口令使用8位的拨动开关进行抢答,拨动后,显示速度最快的,若同时抢答则显示E,这种情况出现的几率太小。
等到所有抢答者的信号全部清零后,在主持人口令的允许下,才可进行下次抢答。
问题:
其一,主持人口令的下达是通过声音,而机器速度非常快,因而不能阻止有人作弊提前拨动开关,因而需要将口令变成机器指令的形式,以阻止作弊。
其二,需要添加一个开关,而拨动开关有限,只能将抢答者改为按钮开关,主持人使用拨动开关,有不少问题需要解决,比如哪个电平有效的问题,硬件的修改,软件的修改等一系列问题。
其三,使用拨动开关需要锁存信号,这问题只要在软件上稍作修改即可。
修改之后:
主持人使用开关进行控制抢答,这样有效阻止了作弊。
主持人开关同时给人的感觉也有清零的作用,因为信号是锁存的,所以只有通过拨动主持人开关来使得信号回复为0,进入下轮抢答。
5、设计总结及问题讨论
1、总结
首先程序检测主持人开关量,如果允许即循环显示1~8,那么显示器上应该循环显示1~8,每0.5s显示一个数字;不允许则不显示。
如果允许抢答,而8位选手也抢答了,显示器将显示最先抢答者的号,并锁存输出!
程序检测抢答者开关是否全部置为初始状态,若没有则继续循环检测,直到全部归为初态,再检测主持人的开关是否关闭即为1,让程序跳入下一轮抢答!
2、问题讨论
1)输入信号有无的判断的讨论:
在程序中,由于开关是低电平有效,所以都要与0FFH比较,来判断是否有输入。
如果没有输入,那么就等于1,跳回重新判断,如果有输入,就等于0,继续执行。
2)对同时抢答判断的讨论:
在程序中,通过开关量来判断是否有同时抢答的情况。
将开关量存入DL中,将其循环右移,并添加清过零的BL寄存器,用来记录进位次数。
如有,DL循环右移有进位BL就进行加1操作,最后判断BL是否大于1。
如果大于1,就说明有2个或以上的人同时抢答。
如果等于1,就表示,没有同时抢答情况。
3)输出最先抢答者编号:
通过对以上同时输入的判断后,如果没有同时输入就可以进行最先抢答者的判断。
就是将已经存入开关量的AL进行循环右移,同样需要清过零的BL寄存器来记录进位。
当有进位后,停止循环右移,将BL的内容容存入AL,然后通过查找段选表的首地址将BL的内容加上AL的内容,最终存入AL中,最后通过LED输出显示抢答者的编号。
3、体会及建议
通过本次课程设计给我的启发挺大的,我对汇编的编程思想和能力有了进一步提高,在动手能力方面也得到提高。
在实验室我表现的很冷静,不像以前那么茫然,对线路的链接,程序的调试都很得心应手。
老师的指导更让我知道我惟一的缺点是不够细心和认真,有很多细节方面的问题我都犯了错误。
最大的收获我想是学会了使用Protel,原先完全不会用的我,在电子系同学的指教下,现在也略知一二了。
建议就是感觉半天半天的做设计,总是出现中断,不能在最有思路的时候将问题搞定,因为灵感来的时候往往要等到第二天了!
还希望老师能多了解每个同学的进展,提供一些必要的帮助!
设计者:
石磊
完成时间:
2008年12月25日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 竞赛 抢答