成绩:
汇编及接口技术课程设计
题目:竞赛抢答器的设计与实现
班 级:
学 号:
姓 名:
时 间:
目 录
一、设计目的-------------------------------------------------------------------------------------------1
二、 设计内容----------------------------------------------------------------------------------------- -1
三、 设计方案------------------------------------------------------------------------------------------1
1、注意事项--------------------------------------------------------------------------------------1
2、实验连线--------------------------------------------------------------------------------------1
3、软件设计-------------------------------------------------------------------------------------1
四、源程序-----------------------------------------------------------------------------------------------2
1、硬件测试-------------------------------------------------------------------------------------2
2、内部程序设计------------------------------------------------------------------------------2
3、实现程序-------------------------------------------------------------------------------------5
五、程序实现结果和现象---------------------------------------------------------------------------9
六、总结--------------------------------------------------------------------------------------------------9
竞赛抢答器的设计与实现
一、设计目的
1. 了解微机控制的竞赛抢答器的基本原理。
2. 进一步熟练8255的使用。
二、设计内容
设计一个7路的智力竞赛抢答器。要求:
1、在主持人侧,设置抢答指示电路和启动/复位开关。选手侧各设置1个抢答按钮。
2、使用开关K7代表启动/复位开关,K7向上拨时,表示启动一次抢答,绿色发光二极管亮作允许抢答指示。此时选手侧可以按动各自的抢答按钮。
3、使用实验仪的逻辑电平开关K0-K5来代表6个抢答按钮。当开关向上拨时表示按下按钮。
4、收到第1个抢答信号后,主持人侧红色发光二极管亮(绿色发光二极管灭)作抢答指示,在单个LED 灯上显示抢先一组的组别。
5、主持人向下拨K7,代表复位操作,红绿指示灯全灭,选手灯全灭。
6、主持人可以再次向上拨动K7,启动下一次抢答。
7、在数码管上显示选手编号。
8、通过8255完成设计。
三、设计方案
1. 注意事项:
A. 先关闭试验箱电源,再进行接线。
B. 实验过程中,要改变错误接线,也必须先关闭电源,再进行改线。
2. 实验连线
8255模块的RD 、WR 连到ISA 总线接口模块的IOR#、IOW#,8255选通信号CS 连到ISA 总线接口模块的IOY0。
8255模块的数据线D7~D0、连到ISA 总线接口模块的XD7~XD0。
地址线A1~A0连到XA2~XA1。
1)8255的端口A (PA0---PA7)和开关K0-K7相连。
2)8255的端口C (如PC7、PC6)分别和发光二极管(绿)、(红)连接。 3)8255的端口C (PC0---PC5)和发光二极管L0---L5相连。
4)8255的端口B (PB0---PB7)连接到LED 数码管模块的a ~h 各段。
5)右下角LED 的列端之一Xi 接GND 。(LED 为共阴极,故此其COM 端接地)。
3、软件设计:
首先初始化8255,然后判断是启动还是复位操作,若是复位操作,则控制8255输出的数据使绿色和红色指示灯、LED 灯全灭;否则启动下一次抢答,使绿色发光二极管亮;当8255的输入口PB 有不为0的数据时,则使绿色发光二极管灭并使红色发光二极管点亮。并判断先拨动开关的组号,在LED 灯上显示出其组号。最后使用LED 8段数码管,显示选手编号。
四、程序清单:
1. 硬件测试
DATA SEGMENT
P8255A DW 0600H
P8255B DW 0602H
P8255C DW 0604H
P8255M DW 0606H
DATA ENDS
;------------------------------------------------------------------------- 全亮 CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DX,P8255M
MOV AL,XXH ; 写8255控制字
OUT DX,AL ;PA 输入、PB 输出、PC 输出 HARDTST: MOV DX,P8255C
MOV AL,0FFH ;//page
OUT DX,AL
MOV AX,4C00H
INT 21H
CODE ENDS
END START
END START
当将page 位置的MOV AL,OFFH修改为MOV AL,0H时 ,LED 灯全灭。
2. 内部程序设计:
当选手按下按钮时,switch 语句判断其是那一位并在数码管上显示其相应的位置;
Switch 语句实现对应按钮的执行:
SWITCH
PROC PUSH PUSH MOV IN NEAR AX DX ; DX,P8255A AL,DX
K0: ;NOP //k0开关的执行 TEST AL,01H JZ K1 MOV DX,P8255C OUT DX,AL MOV DX,P8255B MOV AL,3FH OUT DX,AL MOV AL,00H OUT DX,AL JMP DONE1 K1: ;NOP //k1开关的执行 TEST AL,02H JZ K2 MOV DX,P8255C OUT DX,AL MOV DX,P8255B MOV AL,06H OUT DX,AL MOV AL,00H OUT DX,AL JMP DONE1 K2: ; NOP //k2开关的执行 TEST AL,04H JZ K3 MOV DX,P8255C OUT DX,AL MOV DX,P8255B MOV AL,5BH OUT DX,AL MOV AL,00H OUT DX,AL JMP DONE1 K3: ;NOP //k3开关的执行 TEST AL,08H JZ K4 MOV DX,P8255C OUT DX,AL
MOV DX,P8255B
MOV AL,4FH
OUT DX,AL
MOV AL,00H
OUT DX,AL
JMP DONE1
K4: ;NOP //k4开关的执行
TEST AL,10H
JZ K5
MOV DX,P8255C
OUT DX,AL
MOV DX,P8255B
MOV AL,66H
OUT DX,AL
MOV AL,00H
OUT DX,AL
JMP DONE1
K5: ;NOP //k5
TEST AL,20H
MOV DX,P8255C
OUT DX,AL
MOV DX,P8255B
MOV AL,6DH
OUT DX,AL
MOV AL,00H
OUT DX,AL
JMP DONE1
DONE1:
MOV AL,00H
INT 21H
POP DX
POP AX
RET
SWITCH ENDP
开关的执行
3. 实现程序:
DATA SEGMENT
P8255A DW 0600H
P8255B DW 0602H
P8255C DW 0604H
P8255M DW 0606H
LEDCODE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
LCODE DB ? ; 选手灯代码
DCODE DB 3FH ; 显示代码缓冲
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX,DATA
MOV DS,AX
MAIN: MOV DX,P8255M
MOV AL,90H ; 写8255控制字。
OUT DX,AL ;PA输入、PB 输出、PC 输出。MODE0
MOV DX,P8255B
MOV AL,00H ;
OUT DX,AL
MOV DX,P8255C
OUT DX,AL
;---------------------------------------------------------------------------- NEW: MOV DX,P8255A
IN AL,DX
TEST AL,80H
JNZ SECOND
FIRST: MOV DX,P8255C ;K7=0
MOV AL,00H ;
OUT DX,AL
JMP NEW
;---------------------------------------------------------------------------- SECOND: NOP
MOV DX,P8255A
IN AL, DX
TEST AL,7FH ;K0---K6=全0?
JNZ THIRD
MOV DX,P8255M
MOV AL,0EH
OUT DX,AL ;PC7=0
MOV AL,0DH ;PC6=1
OUT DX,AL
JMP NEW
THIRD: NOP ; K0---K6=非全0
MOV DX,P8255M
MOV AL,0FH ;PC7=1
OUT DX,AL
MOV AL,0CH ;PC6=0
OUT DX,AL
;---------------------------------------------------------------------------- FORTH: NOP
FIFTH: NOP
CALL SWITCH
DONE: NOP
CALL LEDLAMP
;CALL DISPLY
JMP NEW
;---------------------------------------------------------------------------- SWITCH PROC NEAR ;
PUSH AX
PUSH DX
MOV DX,P8255A
IN AL,DX
K0: ;NOP
TEST AL,01H
JZ K1
MOV DX,P8255C
OUT DX,AL
MOV DX,P8255B
MOV AL,3FH
OUT DX,AL
MOV AL,00H
OUT DX,AL
JMP DONE1
K1: ;NOP
TEST AL,02H
JZ K2
MOV DX,P8255C
OUT DX,AL
MOV DX,P8255B
MOV AL,06H
OUT DX,AL
MOV AL,00H
OUT DX,AL
JMP DONE1
K2: ; NOP
TEST AL,04H
JZ K3
MOV DX,P8255C
OUT DX,AL
MOV DX,P8255B
MOV AL,5BH
OUT DX,AL
MOV AL,00H
OUT DX,AL
JMP DONE1
K3: ;NOP
TEST AL,08H
JZ K4
MOV DX,P8255C
OUT DX,AL
MOV DX,P8255B
MOV AL,4FH
OUT DX,AL
MOV AL,00H
OUT DX,AL
JMP DONE1
K4: ;NOP
TEST AL,10H
JZ K5
MOV DX,P8255C
OUT DX,AL
MOV DX,P8255B
MOV AL,66H
OUT DX,AL
MOV AL,00H
OUT DX,AL
JMP DONE1
K5: ;NOP
TEST AL,20H
MOV DX,P8255C
OUT DX,AL
MOV DX,P8255B
MOV AL,6DH
OUT DX,AL
MOV AL,00H
OUT DX,AL
JMP DONE1
DONE1:
MOV AL,00H
INT 21H
POP DX
POP AX
RET
SWITCH ENDP
LEDLAMP PROC
PUSH
PUSH
NOP
POP
POP AX
RET
LEDLAMP ENDP
DISPLY PROC
PUSH
PUSH
NOP
POP
POP AX
RET
DISPLY ENDP
CODE ENDS
END START
NEAR AX DX DX NEAR AX DX DX ; ;
五. 程序实现结果及现象
在主持人在使用开关K7代表启动/复位开关,K7向上拨时,表示启动一次抢答,绿色发光二极管亮作允许抢答指示。选手侧可以按动各自的抢答按钮。当开关向上拨时表示按下按钮。收到第1个抢答信号后,主持人侧红色发光二极管亮(绿色发光二极管灭)作抢答指示,数码管上显示选手编号。当主持人向下拨K7,代表复位操作,红绿指示灯全灭,选手灯全灭。主持人可以再次向上拨动K7,启动下一次抢答。
六.总结
在本次课程设计中,我熟悉了对竞赛抢答器的设计及其工作流程。开始在实验中频繁遇到问题,但是在最终大家的讨论及其合作下,我们实现了其功能需求,当每一个子模块编写调试成功时,心里特别的开心。同时也感觉总体设计有点小不足,对于软件编程虽然每个模块的程序编译没有错误,但与连接硬件时会出现一点小问题,例如:在按键的执行显示模块。在设计switch 语句的结束后跳转问题商花费了好长时间,最终在老师的提醒下还是实现了功能。通过这次课程设计使我懂得了理论与实际相结合的重要性,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正解决问题、更深刻的认识问题,此过程也提高了自己的实际动手能力和独立思考的能力,以后自身的发展也会因此而受益颇深。
第 9 页