资源描述
成绩:
汇编及接口技术课程设计
题目:竞赛抢答器的设计与实现
班 级: 120616
学 号: 120616124
姓 名:
时 间: 2014.12.30
目录
(一) 设计任务与要求
(二) 设计方案(包括设计思路、使用到哪些芯片、各个芯片的作用)
(三) 硬件线路设计(包括线路图及连线说明)
(四) 软件设计(包括程序流程图)
(五) 源程序(要有注释)
(六) 调试过程(包括实验过程中的硬件连线,实验步骤、出现的问题、解决的方法、 使用的实验数据等)
(七)总结
一、设计任务与要求
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. 实验连线(最关键的5组连线,要精挑细选)
Ø 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段数码管,显示选手编号。
试验箱IO端口地址
IOY0
IOY1
IOY2
IOY3
0600H
0640H
0680H
06C0H
四、软件设计
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,XXH ;写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
K0: NOP
K1: NOP
K2: NOP
K3: NOP
K4: NOP
K5: NOP
POP DX
POP AX
RET
SWITCH ENDP
LEDLAMP PROC NEAR ;
PUSH AX
PUSH DX
NOP
POP DX
POP AX
RET
LEDLAMP ENDP
DISPLY PROC NEAR ;
PUSH AX
PUSH DX
NOP
POP DX
POP AX
RET
DISPLY ENDP
CODE ENDS
END START
五. 源程序
试验程序: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 ;判断K7是否等于1,看是否有抢答
JNZ SECOND
FIRST: MOV DX,P8255C ;K7=0
MOV AL,00H ;
OUT DX,AL
MOV BX, 00H
JMP NEW;----------------------------------------------------------------------------
SECOND: NOP
MOV DX,P8255A
IN AL,DX
TEST AL,7FH ;K0---K6=全0?代表7个抢答按钮
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;------------------------------
SIXTH: MOV DX,P8255A
IN AL,DX
TEST BX, 01H
JNZ SEVEN 完成的锁档功能
JMP DONE
SEVEN: MOV DX,P8255A
IN AL,DX
TEST AL,80H
JNZ SEVEN ;JMP SIXTH;-----------------------------
DONE: NOP
CALL LEDLAMP ;CALL DISPLY
JMP NEW; -----------------------------------------------------------------------
PROC NEAR ;
PUSH AX
SWITCH PUSH DX
MOV DX,P8255A
IN AL, DX
TEST AL,01H
JNZ K0
TEST AL,02H
JNZ K1
TEST AL,04H
JNZ K2
TEST AL,08H
JNZ K3
TEST AL,10H
JNZ K4
TEST AL,20H
JNZ K5
K0: MOV DX,P8255M
MOV AL,01H
OUT DX,AL
MOV DX,P8255B
MOV AL,3FH
OUT DX,AL
MOV BX,01H
JMP DOWN
K1: MOV DX,P8255M
MOV AL,03H
OUT DX,AL
MOV DX,P8255B
MOV AL,06H
OUT DX,AL
MOV BX,01H
JMP DOWN
K2: MOV DX,P8255M
MOV AL,05H
OUT DX,AL
MOV DX,P8255B
MOV AL,5BH
OUT DX,AL
MOV BX,01H
JMP DOWN
K3: MOV DX,P8255M
MOV AL,07H
OUT DX,AL
MOV DX,P8255B
MOV AL,4FH
OUT DX,AL
MOV BX,01H
JMP DOWN
K4: MOV DX,P8255M
MOV AL,09H
OUT DX,AL
MOV DX,P8255B
MOV AL,66H
OUT DX,AL
MOV BX,01H
JMP DOWN
K5: MOV DX,P8255M
MOV AL,0BH
OUT DX,AL
MOV DX,P8255B
MOV AL,6DH
OUT DX,AL
MOV BX,01H
DOWN: POP DX
POP AX
RET
SWITCH ENDP
LEDLAMP PROC NEAR ;
PUSH AX
PUSH DX
NOP
POP DX
POP AX
RET
LEDLAMP ENDP
DISPLY PROC NEAR ;
PUSH AX
PUSH DX
NOP
POP DX
POP AX
RET
DISPLY ENDP
CODE ENDS
END START
六.调试过程
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 ;
OUT DX,AL
MOV AX,4C00H
INT 21H
CODE ENDS
END START
END START
2、三个相一致:
在硬件测试通过后,要注意三个相一致
(1)IOY*地址和数据段中的端口地址。
(2)控制字和外设连接。
(3)代码段中指令中的端口地址和接线。
3、避免冲突:
主程序中所用的寄存器,各司所职,不要冲突。
子程序中所用的寄存器,不要和主程序冲突。要用PUSH和POP入栈和出栈指令,保护现场和恢复现场。
4、步步为营:功能模块要一个一个地实现
比如,先进行启动抢答段、其次清除段、第三抢答段、然后选手灯点亮段,最后显示选手编号段。
5、选手灯代码LCODE,要在SWITCH程序中传递,并在LEDLAMP子程
序中使用;数码管的显示代码DCODE也要在SWITCH程序中传递,并
在DISPLY子程序中使用;SWITCH采用多分支程序设计技术。显示代
码可参考PDF实验指导书P110。
6、检查5个功能:启动与复位、抢答、选手灯显示、显示选手编号和锁档。
Step1 硬件测试通过。
实验结果:通过上述的硬件测试程序来测试电路,主持人侧的红绿灯和选手抢答灯全都亮,说明电路连接没问题
Step2 扳动K7=ON, 进行抢答。并能复位。存为TEST1.ASM。
实验结果:根据上述的程序清单,可以得到,当K7=ON,即主持人的绿灯亮时,选手可以抢答,如果主持人的绿灯灭则结束一轮抢答,如果再次使K7=ON,则进行下一轮抢答。
Step3 实现抢答。存为TEST2.ASM。
实验结果:当K7=ON,即主持人的绿灯亮时,可以扳动K0---K6来进行选手可以抢答并且相应的灯会亮,同时主持人侧的红灯变亮。
Step4 编写SWITCH程序,显示选手灯能点亮。存为TEST3.ASM。
试验程序: 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 ;判断K7是否等于1,看是否有抢答
JNZ SECOND
FIRST: MOV DX,P8255C ;K7=0
MOV AL,00H ;
OUT DX,AL
MOV BX, 00H
JMP NEW;----------------------------------------------------------------------------
SECOND: NOP
MOV DX,P8255A
IN AL,DX
TEST AL,7FH ;K0---K6=全0?代表7个抢答按钮
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;----------------------------————
SIXTH: MOV DX,P8255A
IN AL,DX
TEST BX, 01H
JNZ SEVEN 完成的锁档功能
JMP DONE
SEVEN: MOV DX,P8255A
IN AL,DX
TEST AL,80H
JNZ SEVEN
;JMP SIXTH ;-----------------------------
DONE: NOP
CALL LEDLAMP ;CALL DISPLY
JMP NEW;----------------------------------------------------------------------------
SWITCH PROC NEAR ;
PUSH AX
PUSH DX
MOV DX,P8255A
IN AL, DX
TEST AL,01H
JNZ K0
TEST AL,02H
JNZ K1
TEST AL,04H
JNZ K2
TEST AL,08H
JNZ K3
TEST AL,10H
JNZ K4
TEST AL,20H
JNZ K5
K0: MOV DX,P8255M
MOV AL,01H
OUT DX,AL
JMP DOWN
K1: MOV DX,P8255M
MOV AL,03H
OUT DX,AL
JMP DOWN
K2: MOV DX,P8255M
MOV AL,05H
OUT DX,AL
JMP DOWN
K3: MOV DX,P8255M
MOV AL,07H
OUT DX,AL
JMP DOWN
K4: MOV DX,P8255M
MOV AL,09H
OUT DX,AL
JMP DOWN
K5: MOV DX,P8255M
MOV AL,0BH
OUT DX,AL
MOV BX,01H
DOWN: POP DX
POP AX
RET
SWITCH ENDP
LEDLAMP PROC NEAR ;
PUSH AX
PUSH DX
NOP
POP DX
POP AX
RET
LEDLAMP ENDP
DISPLY PROC NEAR ;
PUSH AX
PUSH DX
NOP
POP DX
POP AX
RET
DISPLY ENDP
CODE ENDS
END START
实验结果:当K7=ON时,绿灯亮,选手可以抢答,当有选手的灯亮时,则主持人只记住第一个按灯的选手,其他的选手灯不亮,扳动K7则可以复位。
tep5 改写SWITCH程序,传递数码管显示代码DCODE。并实现显示选手编号。存为TEST4.ASM。
实验结果:此时显示屏上会出现选手抢答的号码,K7=ON的时候,选手抢答,第一个抢到的选手对应的选手灯会亮,同时显示屏会显示几号选手抢答成功。
Step6 完善主程序,实现锁档。存为TEST5.ASM。
实验结果:在锁档后,已经有选手 抢答到题目后,其他的选手再次抢答,则对应的选手灯不会亮,显示屏依然显示的是第一次抢到的选手的号码。则锁挡成功。
七.心得体会
通过本次课程设计,了解了微机控制的竞赛抢答器的基本原理。进一步熟练了8255的使用。首先初始化8255,然后判断是启动还是复位操作,若是复位操作,则控制8255输出的数据使绿色和红色指示灯、LED灯全灭;否则启动下一次抢答,使绿色发光二极管亮;当8255的输入口PB有不为0的数据时,则使绿色发光二极管灭并使红色发光二极管点亮。并判断先拨动开关的组号,在LED灯上显示出其组号。在实验的过程中必须先关闭试验箱电源,再进行接线。如果要改变错误接线,也必须先关闭电源,再进行改线。
实验中必须要做到细心,在接线的过程中要谨慎地找准每根线的连接点,在修改程序的时候要细心,算控制字的时候要计算清楚,如果有错误的话就会影响整个实验,并且会浪费很多时间来进行修改。实验的时候如果遇到问题则要请教老师或者同学,不要不懂装懂,或者查询资料来增加自己的知识
展开阅读全文