竞赛抢答器设计实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

微机原理与接口技术研究性综合训练实验报告

竞赛抢答器设计实验报告

一、实验设计

设计一个七路抢答器,以模拟竞赛中的抢答器功能。当主持人按开始键后,选手才可抢答,否则违规。该抢答器具有如下功能:

1、该抢答器有一个开始键,由拨动开关控制,由主持人使用;

2、该抢答器可供7人同时抢答,由拨动开关控制,选手使用;

3、当选手违规时,红灯亮和扬声器报警,数码管显示最先违规的选手号码;

4、当选手抢答成功,绿灯亮和扬声器鸣叫,数码管显示最先抢答到的选手号码;

5、抢答前,所有的波动开关必须拨到下方,新一轮的抢答才可以开始。

二、研究方案设计

1、方案分析

本实验的关键点是如何判断出哪个选手首先抢答成功,可考虑下述方案:

利用标志位和8255 A 口的状态值作判断。令PA0 ~ PA7 接K0~K7 拨动开关,其中PA0~PA6 接选手的开关,PA7 接主持人的开关。每次查询8255 A 口状态时,只有当PA0~PA7 值全为0,程序才可向下执行,否则将一直处于等待状态。当新一轮抢答开始,即由PA7 由0 变为1(主持人拨动开始键时),直到PA0~PA6 中有一个值由0 变为1 时(某个选手最先拨动抢答键时),才会执行LED 显示、二极管发光和扬声器发生的程序段,否则再次处于等待状态。

2、所需器件

可编程并行接口接口芯片8255、可编程定时器/计数器8253,红、绿两个发光二极管,扬声器,LED 八段数码管,8 个拨动开关。

3、拨动开关、扬声器及显示功能的定义

拨动开关:8 个拨动开关中,K7 作为主持人的开始键,另外K0~K6 七个拨动开关用做7 位选手的抢答按键。

扬声器:用与红、绿两个发光二极管配合使用。抢答成功时绿灯亮扬声器鸣叫,抢答违规时红灯亮扬声报警。

LED:显示的内容与选手号对应,抢答成功或违规都要显示。

4、系统所选用各芯片的工作方式

8255A 编程方法:

(1)A 口工作在方式0,作为输入端口用于连接主持人和选手按键(PA7~PA0 依次对应拨动开关0~7);

(2)C 口工作在方式0,均作为输出端口(PC0连接8253的GATE0,PC2 接绿灯,PC3 接红灯)。

8253 编程方法:

选择通道0:操作类型为先读写低字节再读写高字节,工作在方式3 即方波发生器。当抢答成功,计数初值设为1000H;当违规抢答,计数初值设为2000H。

5、芯片连接

8255 连接方式:

PA0 ~ PA7 接K0~K7 拨动开关;PC0 连接8253 的GATE0,PC2 接绿灯,PC3 接红灯,片选接200h-20fh孔

8253 连接方式:

CLK0-2MHZ,OUT0-扬声器,GATE0 连接8255 的PC0,片选接220h-22fh孔

LED八段数码管的片选接210h-21fh孔

附件:程序清单

DATAS SEGMENT

A_PORT EQU 200H

B_PORT EQU 201H

C_PORT EQU 202H

CONTROL_PORT EQU 203H

IO8253A EQU 220H

IO8253B EQU 221H

IO8253C EQU 223H

LED_SHOW DB 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;数码表显示数字0~9 DATAS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS

START:

MOV AX,DATAS

MOV DS,AX

MOV DX,CONTROL_PORT

MOV AX,10010000B ;设8255为A口输入,C口输出

OUT DX,AL

MOV BX,OFFSET LED_SHOW ;使BX指向段码管首址

MOV DX,IO8253C ;向8253写控制字

MOV AL,36h ;使0通道为工作方式3,输出方波

OUT DX,AL

MOV AX,2000 ;写入循环计数初值2000

MOV DX,IO8253A

OUT DX,AL ;先写入低字节

MOV AL,AH

OUT DX,AL ;后写入高字节

WAIT:

MOV CX,0

DELAY00:

LOOP DELAY00

MOV DX,C_PORT

MOV AX,00000000B

OUT DX,AL

MOV DX,210H ;数码管显示7,游戏开始

MOV AL,[bx+7]

OUT DX,AL

MOV DX,211H ;用第一个八段数码管显示

MOV AL,01h

OUT DX,AL

MOV DX,C_PORT

MOV AX,00000000B

OUT DX,AX

MOV DX,A_PORT

IN AL,DX ;从8255的A口输入数据

CMP AL,0

JZ HOST_START ;如果A口值是0跳转到下一步,等主持人开始

JMP WAIT ;不是则接着等,开关都拨为0才能进入下一步HOST_START:

MOV DX,C_PORT

MOV AX,00000000B

OUT DX,AL

MOV DX,210H

MOV AL,[bx+8] ;数码管显示8,检测主持人K7是否为1

OUT DX,AL

;检测是否有人抢答并检测主持人是否开始

MOV DX,A_PORT

IN AL,DX

MOV CX,0

TEST AL,00000001B

JNZ QIANGDA

INC CX

TEST AL,00000010B

JNZ QIANGDA

INC CX

TEST AL,00000100B

JNZ QIANGDA

INC CX

TEST AL,00001000B

JNZ QIANGDA

INC CX

TEST AL,00010000B

JNZ QIANGDA

INC CX

TEST AL,00100000B

JNZ QIANGDA

INC CX

TEST AL,01000000B

JNZ QIANGDA

INC CX

TEST AL,10000000B

JNZ START_GAME ;主持人按下K7

JMP HOST_START

QIANGDA:

MOV DX,210h

MOV SI,BX

ADD BX,CX

MOV AL,[BX]

OUT DX,AL

MOV BX,SI

MOV DX,211h

MOV AL,01h

相关文档
最新文档