竞赛抢答器课程设计微机接口课程设计报告.docx
- 文档编号:23548802
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:20
- 大小:92.22KB
竞赛抢答器课程设计微机接口课程设计报告.docx
《竞赛抢答器课程设计微机接口课程设计报告.docx》由会员分享,可在线阅读,更多相关《竞赛抢答器课程设计微机接口课程设计报告.docx(20页珍藏版)》请在冰豆网上搜索。
竞赛抢答器课程设计微机接口课程设计报告
计算机科学与技术系
课程设计报告
2008~2009学年第二学期
课程
微型计算机原理与接口技术
课程设计名称
竞赛抢答器
学生姓名
学号
专业班级
指导教师
2009年2月
竞赛抢答器
一.题义分析及解决方案
1.题义与需求分析
题目要求利用8086系统接口电路设计一个可供八人竞赛使用的抢答器,并显示竞答者编号(1~8)。
根据题义可知:
本设计是要设计一个能够提供给8个人使用的竞赛抢答装置,能够使得抢答者的编号,显示的装置。
首先是主持人发出抢答允许信号,当抢答者收到信号后,便立刻进行抢答,然后通过装置,将最先抢答者的编号显示出来。
根据以上分析,提出以下几个问题:
主持人如何发出抢答的信息?
竞赛者如何进行抢答?
如何将分辨抢答的顺序,谁是最先抢答的?
如何显示抢答者的编号?
抢答的总体规则是什么?
怎样控制?
2.解决问题的思路和方法
(1)、解决思路:
上述提出的问题发现第一、第二和第四个问题需要用硬件来实现,而第三和第五个问题需要软件编程来实现。
组号
器件名称
特点
1
小键盘
键盘(Keyboard)是常用的输入设备,它是由一组开关矩阵组成,结构相对复杂
逻辑开关
结构简单,使用方便,价格便宜
2
8255A芯片
8255芯片是可编程的并行接口芯片,不需要附加外部电路便可和大多数并行传输数据的外部设备相连,数据的各位同时传送,使用十分方便
8251A芯片
8251芯片是可编程的串行接口芯片,数据一位一位地顺序传送,电路简单,传输距离远
3
LED
LED显示器与LCD显示器相比,LED在亮度、功耗、可视角度和刷新速率等方面,都更具优势。
LED与LCD的功耗比大约为10:
1,LED的最显著特点是使用寿命长,光电转换效能高,绿色环保
表一:
所用芯片功能
首先我们可用列表比较的方法来选择合理的器件,具体器件的名称和特点如表一所示。
对硬件选择进行分析进行分析:
通过对小键盘和微动开关比较,我们选择结构简单,使用方便微动开关作为抢答者的抢答器件。
对8255和8251芯片进行比较,选择方便易使用的8255作为本设计的主要芯片。
对显示设备的选择,选择LED更为经济实惠。
通过以上分析,本次设计所选用的芯片为:
8255A芯片、微动开关和LED发光二
极管。
(2)、解决问题的方法
a.硬件部分:
首先选择可编程并行接口芯片8255A,实现八个竞赛抢答器的显示换码并输出。
使8255A工作在方式0——基本输入输出,将PA口做为输入口,PB口做为输出口,PC1=0做位选码。
选用LED七段数码显示控制电路板一块,使用其显示1~8位抢答者编号。
b.软件部分:
通过编写程序来实现抢答的功能。
首先应当实现抢答器的最基本功能,即当抢答允许信号发出后,抢答者做出了抢答,要在LED上显示最先抢答者的编号。
这是基本功能,其次应该考虑同时有两个人抢答的情况,如过出现了,这个情况,就在显示设备上显示E,表示错误,需要重新抢答。
另外,在抢答结束后,需要进行下一轮的抢答,因此如果出现有抢答者的开关没有松开的情况,就无法进行下一轮的抢答。
所以要对开关是否松开进行判断。
二.硬件设计
1.芯片8255A
(1)8255A在本设计中的作用
PA口送入开关量进行锁存,通过控制程序进行判断和处理,最后从PB口输出。
(2)8255A的主要功能分析
8255A是一种可控制编程的并行接口芯片,本设计中将PA做输入口,PB作输出口,工作于方式0,PC1作为输入口,C口其他位不用。
8255A工作方式0又称为基本输入/输出(同步传送)方式,该方式下可将三个数据端口划分为四个独立的部分,A口和B口作为两个8位端口,C口高四位和低四位可用作两个4位端口。
8255A在方式0下输出的数据被锁存,而输入的数据是不锁存的。
8255A的端口录址及操作功能如图二所示:
D7D6D5D4D3D2D1D0
1
A组工作方式
A口I/O
C7-c4I/O
B组工作方式
B口I/O
C3-c0I/O
|||||||
特征位00方式01输入1输入
8255A的方式控制字:
0方式01输入1输入
01方式10输出0输出1方式10输出0输出
10方式2
D7D6D5D4D3D2D1D0
0
×
×
×
写入位编码
写入内容
写入位|编码|
D00000写入0
D10011写入1
D2010
D3011
D4100
D5101
D6110
D7111
表二:
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
数据总线—>三态
表三:
8255A的端口录址及操作功能表
2.LED发光二极管
(1)芯片在本设计中的作用
LED发光二极管用于显示竞赛者的编号
(2)LED的功能分析
LED发光原理及特性:
发光二极管是由Ⅲ-Ⅳ族化合物,如GaAs(砷化镓)、GaP(磷化镓)、GaAsP(磷砷化镓)等半导体制成的,其核心是PN结,因此它具有一般P-N结的I-N特性,即正向导通,反向截止、击穿特性。
此外,在一定条件下,它还具有发光特性。
在正向电压下,电子由N区注入P区,空穴由P区注入N区。
进入对方区域的少数载流子(少子)一部分与多数载流子(多子)复合而发光。
假设发光是在P区中发生的,那么注入的电子与价带空穴直接复合而发光,或者先被发光中心捕获后,再与空穴复合发光。
除了这种发光复合外,还有些电子被非发光中心(这个中心介于导带、介带中间附近)捕获,而后再与空穴复合,每次释放的能量不大,不能形成可见光。
发光的复合量相对于非发光复合量的比例越大,光量子效率越高。
由于复合是在少子扩散区内发光的,所以光仅在靠近PN结面数μm以内产生。
有段选码和位选码确定数字1~8的输出并在延时程序中保持复位。
它是一种当外加电压超过额定电压字符而形成的。
有段选码和位选码确定数字1~8的输出并在延时程序中保持复位。
它是一种当外加电压超过额定电压时发生击穿,并因此而产生可见光的器件。
这种数码管是有7段或8段笔画显示器组成一个字符而形成的。
时发生击穿,并因此而产生可见光的器件。
这种数码管是有7段或8段笔画显示器组成一个
(3)LED的技术参数分析
LED发光二极管的压降一般为1.5-2.0V,其工作电流一般取10-20Ma,发光二极管可应用于直流驱动电路、交流驱动电路和脉冲驱动电路。
由于8255A的最大驱动电流为4.0mA,而LED的工作电流一般为10-20mA,所以需要加一个驱动器74LS244。
图一:
数码管结构
数字
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
E
0
1
1
1
1
0
0
1
79h
表四:
LED显示管段选码编码表
3.微动开关
(1)微动开关在本设计中的作用
当竞赛者进行抢答时,可通过微动开关作为输入信号。
2)软件部分
对于设计中的抢答规则由软件来实现,考虑到8位选手的各自按下抢答装置与自己的编号间的对应关系,8个信号有可能在同一时间段内有两个或以上信号输入,各自之间在时间上不会牵制,即涉及并行的方式输入,后要对输入的开关量进行处理、输出,连接至LED显示,其中需有一主控装置,据此结合课程的所学的相关知识可知,使用可编程并行接口芯片825能够满足要求,实现相关功能。
实现时,可设置8255的A口作为八个输入信号,用逻辑电平开关K0—K7代表抢答装置的抢答开关1—8号。
当某个逻辑开关置“1”时,显示有效,当有两个或以上选手同时按下抢答器时,信号无效,显示“E”。
将B口输出信号与7段LED的a—h连接,即可用LED显示器输出抢答结果。
另外,用8255的C口中的PC7作为主控信号,高电平时表示允许抢答,低电平时禁止抢答。
在实验中需设置C口位控制选用新实验箱的八个LED显示中的一个。
5.硬件总逻辑图及其说明(见下页)
三.控制程序设计
1.控制程序思路说明
根据所设计的硬件逻辑图,所需要编写的控制程序主要有两个方面:
其一在程序中判断最高优先级者。
再利用8255A进行换码通过七段LED显示器用其中的一个LED显示抢答者编号。
具体实现步骤如下:
首先初始化8255A,使8255A工作在方式0,A口作输入口,B口作输出口,然后使按键复位并按复位键,通过8255A使LED显示器显示出0,示意抢答的开始,然后读断口A的状态,并通过程序查表找出与断口A状态相同的数据,并以十进制在LED上进行显示,以此来标志抢答器的按键号码,然后重新复位进行新一轮抢答,如果有两个或两个以上的竞答者同时按下开关,则仍显示零,作为抢答无效的标志。
然后重新复位,为下一轮抢答作好准备。
图二:
硬件总逻辑图辑图
2.程序流程图
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口偏移量
.CODE
START:
MOVAX,@DATA
MOVDS,AX
NOP
CALLInitPCI
CALLModifyAddress;根据PCI提供的基地址,将偏移地址转化为实地址
movdx,COM_ADD;控制口地址
movax,90h;10010000
outdx,ax;设置工作方式0,A口输入,B口输出,C口输出LED位选码控制
ctrl0:
movax,00h;禁止显示LED全灭
movdx,PB_ADD;B口地址输出
outdx,ax
ctrl3:
movdx,PB_ADD
movax,3fh;输出显示0表示允许抢答
outdx,ax
movdx,PC_ADD;设置数码管位选码
moval,7Fh;只使用最左边一位
outdx,al
ctrl2:
movdx,PA_ADD;通过A口地址读输入信号
inax,dx;读A口状态
notax;取反,因为微动开关按下为低电平有效
cmpal,00h;检测是否有输入
jzctrl2;没有则继续检测
movdl,al
movbl,00h;bl用于记录有几人同时按键
movcx,8h;循环次数
cheshi1:
rordl,1;循环右移一位,末位进CF
jnccheshi2;若没有进位,即CF=0则跳转recheshi继续测试
incbl;有进位,bl自加记录同时抢答人数
cheshi2:
loopcheshi1;循环测试8次
cmpbl,1
jaerror;有一人以上同时抢答,则报错
movbl,00h;bl清零
next:
roral,1;有抢答信号
jcprint;有则输出
incbl;bl用来记录是哪一位选手
jmpnext
error:
movbl,8
print:
moval,bl
leabx,ssegment;查表
xlat;将BX的内容(代码表首地址)+AL的内容(表格偏移量)作为有效地
;址,最终内容存入AL中
movdx,PB_ADD
outdx,al
movdx,PC_ADD;设置数码管位选码一位显示
moval,7Fh
outdx,al
ctrl5:
movdx,PA_ADD
inax,dx
cmpal,0ffh;检测开关是否已松开
jnzctrl5;没有松开继续检测
jmpctrl0;松开开关,即结束则重新开始
ret
ssegment:
db06h
db5bh
db4fh
db66h
db6dh
db7dh
db07h
db7fh
db79h
DL4SPROCNEAR
pushax
pushdx
movdx,4
movah,0ffh
int21h
popdx
popax
RET
DL4SENDP
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硬件调试:
在接线连接好以后,运行程序,发现在七段LED上显示的结果少了一段,C段始终不显示,后来将A口与B口对换,即A口输出,B口输入,显示正确。
2.软件调试:
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位输出。
解决了以上的一些主要问题后,具有抢答功能的程序就完成了,联机调试一下就运行出来了。
(1)、对硬件部分的调试,LED显示少了一段,最初怀疑是LED出现问题,但是经过验证,发现LED完好无损,而段选编码也是正确的。
于是,便怀疑是8255A的PA口或者是PB口某个引脚出现了问题。
因为本设计是一A口输入,B口输出,如果输入的A口某个引脚出现了问题或者B口某个引脚出现了问题,都有可能导致LED显示少某一段。
因此,对设计进行了调整,以B口做为输入,A口作为输出,并对程序进行了修改,发现此时LED显示正确。
因此可以断定并非是8255A的问题,因为如果是A口或者B口某个引脚出现了问题,将A口与B口的功能交换是不可能出现显示不少段的。
因此对本问题的可能原因进行分析:
可能是8255A的A口与B口的某个插针接触不良,而在实验中有疏忽大意了,导致这样的结果。
(2)、对软件部分的调试,可以知道延时的需要于否是无关紧要的,因为这个延时是用来的等待抢答者信号的输入,而在程序中,对抢答者有没有输入信号已经做了判断,如果没有人抢答,就会返回重新判断,直到有抢答者输入信号为止,因此这个延时是不需要的。
五、设计结果分析和问题讨论
1、课程设计结果:
当LED上显示了“0”后,抢答者便可以进行抢答,如果没有显示便不可以。
由于在本次设计中只需要1位数码管,因而应将其余的数码管置为无效,所以在程序中应向C口写入控制字7FH;
在抢答者抢答过后,在LED上就显示出最先抢答的者的编号。
如果出现了两个人同时抢答的情况,显示的结果为E,表示抢答无效。
而在一轮抢答结束后,如果有抢答者没有将开关松开,就无法进行下一轮抢答,必须将开关松开才可以。
2、设计结果分析:
本设计是以8255A的A口作为输入,B口作为输出的,抢答者是以A口输入信号,C口全部作为输出,通过程序来实现具体的功能,也就是将最先抢答者的编号输出显示,或者有两人同时抢答的时候输出显示“E”。
在设置8255A的工作方式时,所以应为90h,否则结果出错
3、问题讨论:
(1)、输入信号有无的判断:
在程序中,由于开关是低电平有效,所以首先对开关量取反,然后通过与00H比较,来判断是否有输入。
如果没有输入,那么就等于0,跳回重新判断,如果有输入,就等于1,继续执行。
(2)、同时抢答的判断:
在程序中,是通过开关量来判断是否有同时抢答的情况。
通过取反,将开关量存入DL中,将其循环右移,并添加清过零的BL寄存器,用来记录进位次数。
如过,DL循环右移有进位BL就进行加1操作,最后判断BL是否大于1。
如果大于1,就说明有2个或以上的人同时抢答。
如果等于1,就表示,没有同时抢答情况。
(3)、输出最先抢答者编号:
通过对以上同时输入的判断后,如过没有同时输入就可以进行最先抢答者的判断。
就是将已经存入开关量的AL进行循环右移,同样需要清过零的BL寄存器来记录进位。
当有进位后,停止循环右移,将BL的内容容存入AL,然后通过查找段选表的首地址将BL的内容加上AL的内容,最终存入AL中,最后通过LED输出显示抢答者的编号。
(4)输入信号有无的判断的讨论:
在程序中,由于开关是低电平有效,所以都要与0FFH比较,来判断是否有输入。
如果没有输入,那么就等于1,跳回重新判断,如果有输入,就等于0,继续执行。
(5)对同时抢答判断的讨论:
在程序中,通过开关量来判断是否有同时抢答的情况。
将开关量存入DL中,将其循环右移,并添加清过零的BL寄存器,用来记录进位次数。
如有,DL循环右移有进位BL就进行加1操作,最后判断BL是否大于1。
如果大于1,就说明有2个或以上的人同时抢答。
如果等于1,就表示,没有同时抢答情况。
(6)输出最先抢答者编号:
通过对以上同时输入的判断后,如果没有同时输入就可以进行最先抢答者的判断。
就是将已经存入开关量的AL进行循环右移,同样需要清过零的BL寄存器来记录进位。
当有进位后,停止循环右移,将BL的内容容存入AL,然后通过查找段选表的首地址将BL的内容加上AL的内容,最终存入AL中,最后通过LED输出显示抢答者的编号。
4.收获体会
(1)8255A
通过本次课程设计我熟练掌握了可编程并行接口芯片8255A的内部结构(数据总线缓冲器,三个八位端口,A口和B口的控制电路,读写控制逻辑),工作方式(方式0--基本输入输出方式,方式1—选通输入输出方式,方式2—双向选通输入输出方式),初始化(方式选择控制字,C口按位置位控制字)及其应用。
8255A有两个八位的输入输出端口,由于内部电路原因,通常将A口(PA0-PA7)作为输入用,B口(PB0-PB7)作为输出用,C口作为辅助用。
本实验,在设计程序时,选取8255A的工作方式0(控制端口为04A6H)。
(2)七段LED显示器
通过这次课程设计我也掌握了作为终端显示的七段LED显示器物理构造,工作原理,数字成象的原理及技术参数。
(3)汇编语言
通过这次课程设计,我重新复习了汇编语言程序设计中的数据和程序的寻址方式,各个指令的作用和含义。
使我对汇编语言有了更深层次的掌握,同时也对用汇编语言进行编程有了进一步的理解。
在为期两周的课程设计中,我们能把课堂上学习到的理论知识,经过思考、揣摩,运用于实践中,逐步实现设计中的各种功能,心中有一种很大的欣慰感,以理论指导实践,反过来,我们在课堂上学到的理论知识,很多情况都不是很明白其中的道理,也不清楚这点具体可以用在什么方面。
在逐步实验过程中,通过每一个功能的实现,通过上机实践,对理论知识也有了更为透彻的理解和认知。
深刻认识到上机实践操作的重要性,觉得一周的时间太短,对于设计的优化方面的工作还有许多可以充实,总觉得能再多点时间会做到更好,希望在以后的学习中,更多地给我们安排一些动手操作的实验课,以更深入地了解计算机方方面面的知识。
通过这次设计实践使自己进一步加深了对专业知识和理论知识学习的认识和理解,使自己对于现实生活中的实际问题有了更贴切的整体把握和领会,并很好的将之与所学的相关知识达到了很好的联系与对接,同时对于所学知识的应用能力、分析问题和解决问题的能力都得到了全面的提高。
设计者:
网络工程2班
陈贤龙0604032004
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 竞赛 抢答 课程设计 微机 接口 报告