基于单片机的反应测试仪的设计与实现
2015-06-24张奇
张奇
摘要:近年来单片机的应用正在不断发展,同时也带动了传统控制检测不断进度。反应测试仪就是其中之一,它能够定量的测试人的反映速度。每个人的中枢神经系统对外界刺激是不同的,所以每个人对不同事物的反应时间是有差异的,利用这种仪器,可以在人才的选拔中起到积极的作用。例如在选择体育运动员,杂技等对机敏素质要求高的学员时, 反应测试仪可以提供科学的数据作为参考,其潜在实用价值较大。该文以单片机技术为核心,以硬件为基础,软硬件相结合,设计介绍了一种简单反应测试仪的设计。
关键词:单片机;反应测试仪;8255A、8279、8253芯片
中图分类号:TP313 文献标识码:A 文章编号:1009-3044(2015)11-0235-03
Design and Implementation of Test Instrument Based on Single Chip Microcomputer
ZHANG Qi
(Department of Computer Science and Technology, Hefei University, Hefei 230601, China)
Abstract: The application of SCM is the continuous development in recent years, but also led to the continuous progress of traditional control detection. Reaction tester is one of them, it can test the quantitative response speed. The central nervous system to the outside stimulation of each person is different, so each reaction time on different things are different, the use of this instrument, can play a positive role in the selection of personnel. For example, in the selection of athletes, acrobatics and other high demands on the quality of smart students, reaction tester can provide scientific data for reference, its potential practical value. In this paper, In this paper, based on single chip microcomputer as the core, take the hardware as the foundation, combining software and hardware design, introduces the design of a simple reaction tester.
Key words: single chip microcomputer; reaction tester, 8279; 8255A, 8253 chip
1 功能分析及解决方案
1.1功能需求分析
本设计实现能测试一个人的反应时间的仪器。为了能够测试人的反应时间,需要一个启动信号,即用户可以分辨的启动信号,并通过该启动信号反馈给系统,从而得到该用户的反应时间。给予用户的刺激信号可是多种多样,比如光信号、电信号、声波信号、气味等不同的信号。在控制端口,系统发出刺激信号反馈给用户,用户通过眼、耳、鼻等感觉器官得到刺激信号并迅速反馈给系统。系统接收端的接受反馈信号可以是光信号、电信号等不同的信号。通过不同芯片的工作将其信号转换为数字信号即可。
通过检索大量资料、以及访谈调查发现,实际生活中的反应测试仪应该尽量简单可用,为了简化反应测试仪的难度,本设计只考虑光信号作为刺激信号,电信号作为回馈信号的反应测试仪。即当系统有光信号产生时,系统开始工作,当得到用户的电信号回馈时,测试停止并得到该用户的反应时间。为了能够更好的回馈给用户,可以使用声音信号作为传送结果的载体,也可以通过视觉信号作为传送结果的载体,为了简化复杂度,笔者选择了LED数码管作为反应时间回馈的载体。
1.2解决问题方法及思路
1)硬件部分
针对需求中的分析,作如下解决:①用LED数码管作为刺激信号;②用按键的高低电平信号作为用户的回馈信号;③计时我们采用可编程定时器/计数器8253,8253通道1作为基准信号发生器,产生0 .01ms的方波信号作为通道0的时钟信号。通道1工作在方式2(频率发生器),时钟信号接62.5KHZ的频率,经过625分频后产生周期为0.01ms的方波信号作为通道0的时钟信号,以0.01ms为基准不断计数即可。④为了显示反应时间,我们选择了8段数码管作为显示工具,为了能够有效的控制数码管,特别的我们选择了一个专用芯片8279,通过8279送出数码管的位选和段选选择数码管的4位作为显示的载体,8279外接2M的时钟信号,通过CS、A0选中,使输出端口B、C送出段选和位选信号。
2)软件部分
首先,根据硬件需求采用8255A、8279和8253芯片,为实现对数码管、键盘的控制,采用汇编语言,分别对8255A、8251A和8253进行初始化设置。
然后,程序查询8255A的PA口输入的开关信号,决定8255A何时向外部设备发送的刺激信号,即低电平信号(LED灯点亮)。
最后,程序查询8255A的PB端口接收缓冲区内回馈电信号,根据所得到的信号(低电平有效),调用相应模式子程序,控制转换测试时间为BCD码,并通过数码管显示该时间即可。
2硬件设计
2.1可编程定时器计数器8253
1)可编程定时器计数器8253在本设计中的作用
在本系统中,可编程定时器计数器8253主要用于计数功能,以达到测试人的反应时间的目的。
2)可编程定时器计数器8253的功能分析
可编程定时器计数器8253有6种工作方式,分别为:方式0(计数结束产生中断);方式1(可编程出发器);方式2(频率发生器);方式3(方波发生器);方式4(软件出发选通);方式5(硬件出发选通)
3)可编程定时器计数器8253的技术参数分析
表1 8253的端口选择和操作
2.2可编程并行接口8255
1)可编程并行接口8255在本设计中的作用
在本设计中,可编程并行接口8255主要用于和用户之间交互信息,其中包括接受用户的输入:主要是启动按钮的输入和测试按钮的输入;用于输出系统信息的主要有LED数码管,通过可编程并行接口8255控制LED灯闪亮,用于计时测试正式开始。
2)可编程并行接口8255的功能分析
可编程并行接口8255共有3种工作方式,分别为:
① 方式0:基本输入/输出方式;
② 方式 1:选通输入/输出方式;
③ 方式2:双向输入输出方式。
3)可编程并行接口8255的技术参数分析
表2 8255A端口地址及操作功能
2.3可编程设置型键盘/显示器接口8279在本设计中的作用
在本系统中可编程设置型键盘/显示器接口8279的主要功能是用于显示数码管,通过B口控制数码管8位段选,C口控制8个数码管的位选,实现数码管显示数据(用户反映时间)的作用。
2.4语音模块ISD1420在本设计中的作用
本设计的最初以光作为刺激信号,由于较为简单,提前完成了设计内容,为了增加内容,特别添加了声音作为刺激信号,在本设计中ISD1420的作用仅仅只是放音的功能,将实现录制好的声音通过按键播放出来。以达到通知用户何时测试开始。
2.5键盘在本设计中的作用
在本设计中,键盘主要的作用是启动系统和启动测试及反应回馈,在第二个任务中使用的语音作为启动测试,而反应回馈仍然是以按键的形式。
2.6 LED灯在本设计中的作用
在本设计中,LED灯仅仅在第一个原始任务中使用到,LED灯的作用是作为测试开始的刺激信号,当LED灯闪亮的时候,立即启动测试,等待用户再次击键。
2.7数码管在本设计中的作用
在本设计中,数码管的作用不容小觑,主要用于显示用户的反应时间,在第三个任务中,通过显示9-0这十个数据,当显示到0时,作为刺激信号等待用户反应,在该任务下,我们特别的将没有作用的零为消除,即当反应时间为02.90时,显示2.90即可。
2.8蜂鸣器在本设计中的作用
蜂鸣器主要用于第二个任务,在第二个任务中,语音芯片播放测试开始后,立即使得蜂鸣器响,用户得到声音的输入信号后,立即反应即可。
2.9 硬件总逻辑图说明
本系统共有7块主要的芯片构成,其中也包括其他一些芯片的辅助工作。
CPU 8086通过8282将发出的地址信号经过译码出去,选中当前需要选中的芯片,通过片选信号选中某芯片,并使之为其工作。
其中8255主要用于与用户的交互使用,通过启动按钮和测试按钮可以轻松的与用户实时交互,主机通过LED显示当前的信号。通过设置8255的A口工作于方式0输入方式,B口工作于方式0的输入方式实现该交互功能。
而8253则主要实现计时功能,测量当前用户的反应时间。因为反应时间的显示是以0.01秒为一个基本单位,试验条件下,最小的频率为62.5KHZ,通过8253通道1工作于方式2(分频发生器)将时钟信号分频为100HZ(即周期为0.01秒);此时将OUT0端输出接入通道0,并开始计数,当用户反应则停止计数,并将结果显示出来,最大的反应时间为99.99秒。
本系统中,ISD1420的作用是实现语音的播放,当然实现需要录入语音片段,但是录入语音片段并不是主要内容。通过将CP口接到CS1,REC接到PC0,PLAYE接到PC1,PLAYL接到PC2,再将可编程并行接口8255的PA口接到8位按键上,通过1、2两个按键录音,3、4两个按键分别启动测试和反馈。其余四个按键没有作用。
在任务二中,还有一个期间蜂鸣器,蜂鸣器作为刺激信号使用,当测试开始声音播放完毕后,蜂鸣器响,等待用户测试。8259主要用户控制8段数码管的显示,用户实时的用户交互,显示当前用户的反应时间。
3 控制程序设计
3.1控制流程设计及其思路说明
3.1.1 任务一
1)初始化系统芯片
① 初始化可编程并行接口8255:设置PA端口工作于方式0,作为输入端口,主要用于接收启动按键和测试按键的输入信号。PB端口工作于方式0,作为输出端口,用于控制LED灯闪烁,指示当前测试开始。
② 初始化可编程定时器计数器8253:设置通道1工作于方式2(频率发生器),将62.5KHZ的时钟信号625分频,产生100HZ的时钟信号用于通道0的定时使用。此时通道0工作于方式0(计数结束产生中断方式)。
START: MOV DX,COM_ADD
MOV AL,90H ;A口共作于方式0输入,B口工作于方式0输出
OUT DX,AL
MOV DX,COM_ADDR
MOV AL,74H ;000写通道1方式2 二进制计数 先写低字节在写高字节
OUT DX,AL
MOV DX,T1_ADDR
MOV AL,71H
OUT DX,AL
MOV AL,02H
OUT DX,AL ;271H=625
2)检测是否开始:通过不断读取启动按钮的状态测试,当前用户是否要启动一次反映测试响应;若启动按钮有低电平信号,则测试开始。
3)检测是否反映:当测试开始时,系统将以一LED灯指示,测试计时是否正式开始,当LED亮时测试计时开始,此时系统不断检测是否有测试按钮被按下,若被按下计时时间被采样。
4)显示测试结果:此过程主要用于显示采用结果。采样结果于8段LED数码管上显示,显示时间格式为:XX.XX秒。
3.1.2 任务二
1)初始化系统芯片
① 初始化可编程并行接口8255:设置PA端口工作于方式0,作为输入端口,主要用于接收启动按键、测试按键录音按键的输入信号。PB端口工作于方式0,作为输出端口,用于控制蜂鸣器的响与不响,指示当前测试开始,设置PC口工作于方式0,作为输出端口,主要用于控制ISD1420语音芯片的录音与放音。
② 初始化可编程定时器计数器8253:设置通道1工作于方式2(频率发生器),将62.5KHZ的时钟信号625分频,产生100HZ的时钟信号用于通道0的定时使用。此时通道0工作于方式0(计数结束产生中断方式)。
③ 始化可编程语音接口ISD1420:关闭录音播放功能,允许手动录放音。
2)检测是否开始
通过不断读取启动按钮的状态测试,当前用户是否要启动一次反映测试响应;若启动按钮有低电平信号,则测试开始。
CON2: IN AL,DX
TEST AL,02H
JNZ CON2 ;判断是否按测试按钮
MOV AL,00H ;读取计数器0计数值
MOV DX,COM_ADDR
OUT DX,AL
MOV DX,T0_ADDR
IN AL,DX ;计数值0的低8位
XCHG AL,AH
IN AL,DX ;计数器0的高8位
XCHG AL,AH
CALL LedDisplay
MOV DX,PB_ADD ;LED低电平有效
MOV AL,0FFH
OUT DX,AL ;关灯
MOV CX,8
MOV AL,0
XOR SI,SI
3)检测是否反映
当测试开始时,系统将发出测试开始,此时用于应该处于就绪状态,之后系统以一蜂鸣器的响声指示,测试计时是否正式开始,当蜂鸣器响时测试计时开始,此时系统不断检测是否有测试按钮被按下,若被按下计时时间被采样。
LedDisplay PROC NEAR ;输入参数AX
XCHG AX,BX
MOV AX,2710H ;2710H=10000
SUB AX,BX
MOV DX,AX
CALL HEX2BCD
MOV BUFFER+5,10H ;高3位不需要显示
MOV BUFFER+6,10H
MOV BUFFER+7,10H
LEA SI,BUFFER
CALL Display8
RET
LedDisplay ENDP
4)显示测试结果
此过程主要用于显示采用结果。采样结果于8段LED数码管上显示,显示时间格式为:XX.XX秒。
3.1.3 任务三
鉴于任务三的内容和任务一的内容及其相似,此处不再详细写出,任务三的刺激信号不再是LED灯的闪亮,而是数码管从9变到0后,立即启动测试,等待用户击键。
4 结果分析
本设计能够高精度的测试人的反应时间,并将反应时间显示于数码管上。通过修改程序时序,使得当用户反应时间很快时,也能正确的接受,并显示于数码管上,不会出现偶尔的出错现象。
参考文献:
[1] 韦兴平,胡丹,车畅.基于A3967SLB的步进马达寿命测试仪的设计[J].工业控制计算机,2010(1):87-88.
[2] 熊春如,戴青云,韩国军.“Parkinson”药物药理反应测试仪的设计[J].微计算机信息,2006(04Z):46-48.