2024年6月12日发(作者:)

多媒体定时器

速度参数实时数据采集的软件实现

1 实时数据采集的要求及软件平台

---- 数据采集一般是通过软件或硬件的定时中断通过A/D来读取外界传感器的数据。

因此实时数据采集的首要的基本要求是定时准确,即采样间隔具有较好的一致性。

---- 实时数据采集系统过去一般是在DOS操作系统下应用汇编语言开发的。Windo

ws操作系统的普及应用,尤其是可视化开发软件Visual C++ 的出现,为软件开发提供

了强大的图形界面功能,使得开发出来的应用程序具有良好的人机交互功能。汇编语言的

特点是难调试,而高级语言具有良好的可读性及方便的调试手段。

---- 本文采用美国微软公司推出的Visual C++为软件开发工具,采样间隔采用多媒

体定时器进行精确定时,并采用Visual C++ 提供的端口操作的操作台函数进行硬件I/O

编程。

2 多媒体定时器和硬件接口函数

---- Visual C ++ 提供了两种定时器。一般常用的是系统计时器,它使用函数SetTi

mer进行初始化,应用程序响应SetTimer函数发送来的消息WM_TIMER。这个定时器是

IBM PC硬件和ROM BIOS构造的定时器逻辑的一个相当简单的扩展。PC的ROM初始

化Intel8259定时器芯片来产生硬件中断08H。这个中断有时称为"定时器滴答"中断。中

断08H每隔54.925毫秒产生一次,或大约每秒18.2次。BIOS使用中断08H更新存于B

IOS数据区的"时间"值。因此,这个定时器在Windows中的最大缺点是计时器的最大分

辨率是55毫秒,也就是说应用程序每秒只能接收到18个消息。此外,这个计时器消息的

1

多媒体定时器

优先权太低,只有在所有的消息(除了消息WM_PAINT)被处理后才能被处理。因此函数

SetTimer只能用于一般的定时,如扉屏显示时间定时等,它远远不能满足实时数据采集的

要求。本文重点介绍的是多媒体定时器(Multimedia Timer)。它使用自己单独的线程(T

hread),来调用一个自己的回调函数(Callback Function)。它的优先级很高,它每隔一

定时间就发送一个消息而不管其它消息是否执行完。此外,对于现在的Intel CPU来说,

它的最小定时精度通常都可以达到1毫秒,足够满足实时数据采集的定时精度。第4节将

详细阐明Visual C++ 5.0 中多媒体定时器使用的详细过程。

---- Visual C++ 5.0 作为C++的可视化编程工具,具有C语言对硬件操作的能力。

它提供了大量的操作台函数(可参阅Visual C++提供的帮助)。例如:从端口地址读取数

据的函数_inp(读字节), _inpw(读字), _inpd(读双字)和向端口写操作字和赋初值

的函数_outp(写字节), _outpw(写字), _outpd(写双字)。_inp, _inpw, _inpd三个

函数的参数均为地址变量,返回的是该地址口读取的数据。_outp, _outpw, _outpd三个

函数的第一个参数是地址,第二个参数是须写入地址的数据。

---- 读端口地址的三个函数原型分别是:

int _inp( unsigned short port );

unsigned short _inpw( unsigned short port );

unsigned long _inpd( unsigned short port );

向端口地址写数据或命令字的三个函数原型分别如下:

2