微机课程设计--抢答计时器
东南大学自动化学院东南大学自动化学院微机实验及课程设计微机实验及课程设计专业综合设计报告专业综合设计报告姓姓 名:名: XXX 学学 号:号: xxxxxxxx 专专 业:业: XXX 实实 验验 室:室: 516 组组 别:别: 同组人员:同组人员: XXX 设计时间:设计时间: 2011 年年 9 月月 19 日日 2011 年年 10 月月 17 日日评定成绩:评定成绩: 审阅教师:审阅教师: 1 / 20目目 录录一专业综合设计的目的与要求一专业综合设计的目的与要求22二原理设计二原理设计33三方案论证三方案论证44四方案实现与测试四方案实现与测试88五分析与总结五分析与总结99附录附录11112 / 20一一. . 专业综合设计的目的与要求专业综合设计的目的与要求1、课程设计目的(1)深入理解与运用汇编语言进行程序设计,加强对指令的灵活调用,以完成特定的课程设计课题要求;(2)将汇编程序设计与微机接口的连接相结合,从硬件角度深入理解与运用 8255 的并行输入输出功能;(3)通过对实际应用中的问题分析解剖,细化为一个个小功能,分别构造微机实验的模型。(4)加强团队内部队员交流、合作的能力,增强合作意识。2、课程设计的指标和要求抢答反应测试仪1)基本要求 (难度系数 1.0)设计一个用于智力竞赛的抢答计时器,同时能测试人的反应时间。按启动钮,测试开始,2 个八段码倒计时开始(如从 10 秒或 20 秒倒计时) ,在随机时间的内点亮抢答允许灯,参赛双方(或三方)分别按各自的抢答按钮参与抢答。一旦其中一位按下按钮,相应的 LED 显示灯亮并响“嘟”的一声,此时若其它按钮按下均无效。若一直计数到零,无一人按下按钮,则抢答结束(以后再按抢答钮无效) 。按测试钮,在 PC 机上显示反应时间XX.XX 秒。要求:(1) 编制 1 个随机数产生子程序,由随机数决定从按启动钮到点亮抢答允许灯的时间(如在 3 秒15 秒之间内任意变动) ,使被测试者对 LED 亮的时间无法预见,以确保测试结果的可信;(2) 必须在见到 LED 亮后按测试钮才有效,即一直按着按钮或提前按下按钮无效;(3) 反应时间显示 XX.XX 秒,准确到百分之一秒。2)设计提示(1) 为确保从每次按启动按钮到 LED 亮时间是不同的(真正随机变化的) ,一开始可随机读取某 100 个 RAM 单元值求和作为初始值,以后由测试到的反应时间作为下一个随机初始值;(2) 抢答允许灯亮后立即检测抢答按钮状态,若未按下有效(若已按下无效) ,然后不断扫描按钮状态,直到有按下代表“响应”动作。3 / 203)进一步设计要求(1)用 8×8 点阵显示反应时间 XX.XX 秒(用红色代表秒, 绿色代表 0.01 秒,交替显示);(2)在倒计时过程中附音乐伴奏;(3)增加测试功能,测试人对不同事物的反应(响应)时间。功能要求:按启动钮,测试开始,一旦红灯亮,立即按红灯测试钮,一旦绿灯亮,立即按绿灯测试钮,但黄灯亮为干扰。若按错钮,则显示出错并响“嘟”一声。编制 2 个随机数产生子程序,一个决定从按启动钮到 LED 亮的时间,另一个决定亮何种颜色灯。二二. . 原理设计原理设计实验主要使用到 8253 和 8255 两块芯片。1、主体设计输入为一系列开关量和时钟,输出为数码管的 7 段码和 LED 显示以及计算机屏幕信息。本次实验使用 8253 和 8255 来实现抢答的功能,并且来测试选手的反应时间。数码管用于倒计时,LED 灯来显示允许抢答以及选手对应的抢答灯,乒乓按钮则用于主持人的各种操作和两位选手的抢答。2、随机数的产生为了使测试者对 LED 亮的时间无法预见,确保测试结果的可信性,程序使用随机数(在 3 秒15 秒之间内任意变动)来确定按下启动钮到点亮抢答允许灯的时间。为确保从每次按启动按钮到 LED 亮时间是不同的(真正随机变化的) ,一开始可随机读取某 100个 RAM 单元值求和作为初始值,以后由测试到的反应时间作为下一个随机初始值。3、倒计时倒计时从 20S 开始,程序使用面板上的 1MHZ 脉冲,利用 8253 进行 10000 分频得到0.01S 的基本计数脉冲,然后利用计数器计数,例如计到 N 个脉冲,则反应时间为(2000-N)*0.01S,取前两位用于数码管显示倒计时,单位为 S。4、数码管显示倒计时预置数码管断码:LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;共阴七段码由于倒计时需使用两位数码管,故程序中将实现数码管的动态显示,电路参考实验书中的动态显示模块,通过 8255 的输出口 C 口的 C0、C1 控制数码管的亮灭,将计数得到的4 / 20整数时间逐个显示出来。5、PC 机显示反应时间在检测到测试牛按下后调用存在某内存中的反应时间进行显示即可。主持人按下抢答允许键则数码管开始从 20 倒计时,一段随机时间后,抢答允许灯亮,开始抢答,抢答到的选手对应的抢答灯亮,并且其他人不可以再做抢答。这是主持人再按下读数按钮,则在 PC 机上显示该选手的反应时间。三三. . 方案论证方案论证1、系统实现硬件电路图连接如图 2 所示图 2 硬件连线图8255 设置为 A 口输入,BC 口输出工作方式,A 口检测按键状态。倒计时采用 8253 三个计数器级联方式,计数器 0 接实验箱上 1MHZ 脉冲,从计数器 2 的 OUT 端口输出 1HZ 时钟,设其初值为 20,则从 20 开始倒计时,从而用硬件实现倒计时功能。5 / 202、程序流程图写8253、8255控制 字,赋初值是否复位?关闭LED显示灯开启主持人灯、开始 倒计时取当前时间(秒)并 显示倒计时到了抢答时间?记录当前精确时间开启抢答允许灯是否有人抢答?记录当前精确时间是否按测试键?显示反应时间是否按复位键?点亮相应的LED并响铃计算反应时间 React_s,react_msY YY YY YY YY YN NN NN NN NN N图 1 程序流程图6 / 203、重要模块(1)倒计时 8253 的计数器 0 接实验箱上 1MHZ 脉冲,设初值为 1000,工作方式为 2,OUT0 产生频率 1KHZ 低脉冲;OUT0 接计数器 1 时钟端,初值设为 1000,工作方式为 2,OUT1 产生频率为 1HZ 的第脉冲,所以计数器 1 表示倒计时 MS;OUT1 接计数器 2 时钟端,初值设为 20,工作方式设为 2,实现 20 秒倒计时功能。MOV DX , P8253M ; 8253初始化MOV AL , B ;8253 CNT0=10000 方式2 BOUT DX , AL MOVAX , 1000 ;赋初值MOV DX , P8253AOUT DX , ALMOVAL , AH OUTDX , AL MOV DX , P8253MMOV AL , B ; CNT1=100 方式2OUT DX , AL MOVAL , 1000MOV DX , P8253BOUT DX , ALMOV DX , P8253MMOV AL , B ; CNT2=20 方式2 DOUT DX , AL MOVAL , 20H ;数码管显示初值为20MOV DX , P8253COUT DX , AL(2)随机数产生为确保从每次按启动键到 LED 灯点亮的时间是不同的,一开始可随机读取某 100 个RAM 单元值求和作为初始值,这可以通过设置一个 RANDOM 变量,在程序初始化部分调用随机数产生子程序 RAND 给其赋值实现:PRORAND PROC PUSH CX PUSH SI MOV CX , 100 MOV SI , 34H ADDR: XOR AL,AL MOV AL , SI ADDRANDOM , AL7 / 20INC SI LOOPADDR AND RANDOM 07H POPSI POPCX RET PRORAND ENDP(3)反应时间的计算在点亮抢答允许灯前提取当前时间,记录为 START_S , START_MS 。在检测到有选手抢答后,再次提取当前时间,记录为 END_S,END_MS。两次相减,考虑边界条件,则得到反应时间 REACT_S,REACT_MS。按测试键,再将反应时间显示在屏幕上。;取当前时间MOVDX , P8253C INAL ,DX MOVAH , AL MOVC_TIME , AL AND AL , 0FH MOVLEDL , AL MOVCL , 4 RORAH , CL ANDAH , 0FH MOVLEDH , AH;DOS 功能调用取点亮抢答灯时的精确时间 用于计算反应时间PUSH CX PUSH DX MOV AH , 2CH INT 21H MOV START_S , DH MOV START_MS , DL POP DX POP CX;计算反应时间MOVAL,END_S MOVREACT_S , AL MOVAL , START_S SUBREACT_S , AL MOVAL,END_MS MOV REACT_MS , AL ADD REACT_MS , 100 DEC REACT_S8 / 20MOVAL , START_MS SUBREACT_MS , AL CMP REACT_MS , 100 JL NDEAL SUBREACT_MS , 100 INC REACT_S(4)抢答时“嘟”的响声INT 21H 的功能号 02H 功能描述:响铃。入口参数:AH02H。通过 DL 输入 ASCII码为 07。本程序用这个中断响铃。MOV DL,7 ;响铃 ASCII 码为 07MOV AH,2 INT 21H(5)使抢答按键在抢答允许灯亮后按下才有效设置 ENABLEA、ENABLEB 变量表示选手有无抢答,如果抢答则屏蔽其答题信息。首先在抢答允许灯亮之前使其值赋 0。在点亮抢答灯后立即(下一行程序)检测按键状态,如果此时 A 键为1 ,则说明 A 提前按键了,跳过检测 B,否则使其赋 1,表示没有提前按键。同理检测 B 有无提前。在检测 A、B 谁先抢答前,要先判断对应的 ENABLE 值,如果为 1,则继续检测 A 键是否为 1,否则跳过再次循环检测。四四. . 方案实现与测试方案实现与测试调试分硬件调试和软件调试,在实验时,应先进行硬件调试,确保试验箱、各个芯片、连线均完好,在进行软件调试。硬件调试可通过一个简单的方法进行:选取一个以前实验调试好的标准程序运行,所选程序要用到本次试验用到的各个部件(8255 各口,8253 各口,280 和 288 口) ,观察运行结果是否正常,如果正确,基本上说明硬件完好。也可 DEBUG 相关指令测试各个部件。软件调试可以使用 TD 单步跟踪,但是在前期这样很浪费时间,前期最好分模块进行调试,