微机课程设计报告抢答器文档格式.doc
- 文档编号:1500605
- 上传时间:2023-04-30
- 格式:DOC
- 页数:18
- 大小:247.50KB
微机课程设计报告抢答器文档格式.doc
《微机课程设计报告抢答器文档格式.doc》由会员分享,可在线阅读,更多相关《微机课程设计报告抢答器文档格式.doc(18页珍藏版)》请在冰点文库上搜索。
(1)随机数产生
为确保从每次按启动键到LED点亮的时间是不同的(真正随机变化的),一开始可随机读取某100个RAM单元值求和作为初始值,这可以通过设置一个random变量,在程序初始化部分调用随机数产生子程序rand给其赋值实现:
randproc
pushcx
pushsi
movcx,100
movsi,34h
addr:
xoral,al
moval,[si]
addrandom,al
incsi
loopaddr
andrandom07h
popsi
popcx
ret
randendp
《微机实验及课程设计》报告
(2)8253倒计时
8253的计数器0接实验箱上1MHz脉冲,设初值为1000,工作方式为2,OUT0产生频率1kHz低脉冲;
OUT0接计数器1时钟端,初值设为1000,工作方式为2,OUT1产生频率为1Hz的第脉冲,所以计数器1表示倒计时ms;
OUT1接计数器2时钟端,初值设为20,工作方式设为2,实现20秒倒计时功能。
8253初始化
mov dx,P8253M
mov al,00111100B;
8253CNT0=10000方式2B
out dx,al
mov ax,1000 ;
赋初值
mov dx,P8253A
mov al,ah
out dx,al
mov al,01011101B;
8253CNT1=100方式2D
mov al,1000
mov dx,P8253B
mov dx,P8253M
mov al,10011101B;
8253CNT2=20方式2D
mov al,20h;
20如赋初值20,则数码管显示初值为14
mov dx,P8253C
(3)计算选手反应时间
在点亮抢答允许灯前提取当前时间。
;
按下启动钮 取当前时间
mov dx,P8253C
in al,dx
mov ah,al
mov c_time,al
and al,0fh
mov ledl,al
mov cl,4
ror ah,cl
and ah,0fh
mov ledh,ah
四.方案实现与测试(或调试)
方案的实现,系统的硬件电路图如下:
调试:
(1)按照电路图连接电路,8253主要是用于定时器的作用,给两位数码管输出20秒的倒计时,8255的PA口为输入,PA7和PA6是作为抢答器的输入端,抢答器的输入采取脉冲发生器产生的脉冲作为抢答信号。
PA1是屏幕显示反应时间的按键输入,PA0是开始键的输入。
PC7是PlayerA抢答灯按键输入,PC6是PlayerB抢答灯按键输入,PC4为抢答灯的输出,PC3为开始灯输出,PC2连接8253的GATE0-GATE2,PC1为数码管S0,PC0为数码管S1。
PB7-PB0接a-h。
(2)在调试中,主要的调试还是代码的调试,通过TD和DEBUG两种调试方式,通过逐步调试,发现和找到错误之处,进行更改,最终得到正确的调试结果。
五.分析与总结
通过此次的微机实验,通过编程了解到了汇编语言的编程,并且在编写程序的过程,进一步地熟悉了一个系统程序的编写和调试工作。
编程中,最重要的是通过TD或者DEBUG两种调试手段来进行程序的调试,从而找到程序的运行中出错的地方,进行调试,最终能够运行出正确的代码。
代码调试正确后,通过在实验板上连线,进行验证,最终得到正确的实验结果。
在此次的微机实验过程中,由于时间的仓促,我们只完成了基础部分的功能,提高部分的功能基本没有来得及做。
相信在基础部分的前提下,在以后的时间里,可以进一步地提高,将功能再进一步的完善。
参考书目:
(五号,宋体加粗)
[1]东南大学《微机系统与接口》课程组,《微机实验及课程设计教程(试用版3.0)》,2010年
[2]杨素行等,《微型计算机原理与应用(第3版)》,北京,清华大学出版社,2009年
源代码:
;
--------抢答反应测试仪-----------
DATA SEGMENT
MESS1db'
********madebyadministrator********'
0dh,0ah,'
$'
288接8255
P8255A equ 0b808H ;
开关输入
P8255B equ 0b809H
P8255C equ 0b80AH
P8255M equ 0b80BH
c0-cs0
c1-cs1
c2-gate0,1,2
c3-L0 主持人灯
c4-L2 抢答提示灯
c5-
c6-L6 playerA灯
c7-L7 playerB灯
280H接8253
P8253A equ 0b800H
P8253B equ 0b801H
P8253C equ 0b802H
P8253M equ 0b803H
led7 equ 0b809H;
接数码管七段输入
LED DB 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;
共阴七段码
start_sdb?
start_msdb?
end_s db ?
end_ms db ?
react_sdb0
react_msdb?
ledh db ?
ledl db ?
random db 0
c_time db ?
enableA db ?
enableB db ?
DATA ENDS
---------------------------------------
STACKS SEGMENT
DB 100DUP(?
)
STACKS ENDS
--------------------------------------
CODE SEGMENT
ASSUME CS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVAH,09H
MOVDX,OFFSETMESS1;
显示提示信息
INT21H
MOV AX,DATA
MOV DS,AX
mov ax,stacks
mov ss,ax
;
8255初始化
MOV DX,P8255M
MOV AL,90H;
初始化8255控制字A口输入,B、C输出
OUT DX,AL
8253初始化
mov ax,10000 ;
mov al,100
callprorand;
产生初始随机数
wait_for_start:
;
游戏的初始化
8255B接led
;
c3-L0 关主持人灯
mov al,00000110b
mov dx,P8255M
out dx,al
c4-L2 关抢答提示灯
mov al,00001000b
c6-L6 关playerA灯
mov al,00001100b
c7-L5 关playerB灯
mov al,00001010b
mov al,0 ;
7段led灭
mov dx,led7
out dx,al
c0接cs0,c1接cs1
c2接gate0,1,2
;
关计数
mov al,00000100b
;
关断7段
mov al,00000000b;
数字低位
mov al,00000010b;
数字高位
mov dx,P8255A
in al,dx
test AL,01H;
判断主持人开关是复位还是启动
K0是开始开关,高电平开始
JZ wait_for_start
按下启动钮开始游戏
开启主持人灯L0
mov al,00000111b
开始计数
mov al,00000101b
out dx,al
start_game:
mov ledh,ah
动态显示7段
movbl,ledh
movbh,0
leasi,LED
addsi,bx
moval,byteptr[si];
---moval,led[bl]?
?
movdx,led7
outdx,al
开启cs0
mov al,0000001b
call delay ;
延时一点
;
关闭cs0
mov al,00000000b
movbl,ledl
outdx,al
开启cs1
mov al,00000011b
关闭cs1
mov al,00000010b
mov enableA,0 ;
屏蔽先抢答行为
mov enableB,0
mov bl,c_time
subbl,20
negbl;
求20-bl
mov dl,random
cmp bl,dl;
是否到了点亮抢答灯的时间
jg light1
jmp start_game
light1:
pushcx;
DOS功能调用 取点亮抢答灯时的精确时间用于计算反应时间
pushdx
mov ah,2ch
int 21h
mov start_s,dh
mov start_ms,dl
pop dx
pop cx
light:
打开抢答提示灯
mov al,00001001b
mov dx,P8255A;
检测开关状态
in al,dx
A6接Aplayer,A5接Bplayer
test al,01000000b ;
如果灯亮的时候是没有按下就开启抢答使能
jnz next1
mov enableA,1
next1:
test al,00100000b
jnz next2
mov enableB,1
next2:
cmp enableA,1 ;
如果抢答使能而且按下了抢答键
jne nextB
否则A抢答有效
testal,01000000b
jz nextB
mov al,00001101b;
点亮A抢答灯
jmp quit
nextB:
cmp enableB,1
jne next
B抢到了,亮L7
testal,00100000b
jz next
mov al,00001111b;
点亮B抢答灯
skip1:
jmpwait_for_start ;
跳板
next:
A、B都抢答无效或A、B都没抢答
JZ skip1
取当前时间
7段灯扫描不能停止
jmp light ;
继续检测按键,是否有人抢答
quit:
收尾
取当前精确时间
pushcx
push dx
mov ah,2ch
int 21h
mov end_s,dh
mov end_ms,dl
pop dx
pop cx
moval,end_s;
计算反应时间
movreact_s,al
moval,start_s
subreact_s,al
moval,end_ms
movreact_ms,al
addreact_ms,100
decreact_s
moval,start_ms
subreact_ms,al
cmpreact_ms,100
JLNdeal
subreact_ms,100
increact_s
Ndeal:
mov dx,P8255A
in al,dx;
检测test键
test al,00000010b ;
有无按下检测键
jz ntest;
未按下
按下,显示反应时间
keyt:
mov dl,react_s
movrandom,al
addrandom,3;
用上次的反应时间做下次的随机数初值
ror dl,cl
and dl,0fh
add dl,30h
mov ah,02h
int 21h
mov dl,2eh
mov dl,react_ms
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 课程设计 报告 抢答