软件开发工具的选择 为开发基于Windows95/NT/98操作平台的32位数据采集与处理系统,软件设计应符合以下需求:
⑴具有在Windows下实时访问80x86 CPU I/O端口、硬件中断调用等功能;
⑵支持32位编程;
⑶代码执行速度快、界面友好、使用方便;
⑷开发周期短、代码可重用性好、效费比高。
综上所述,根据VC5.0、VB5.0、Delphi3.0(或其最新版Delphi4.0)三种流行RAD工具的不同特点,作者在开发Windows版“无线电话务模拟训练系统”软件过程中选择了Delphi3.0,利用Delphi的IDE环境编写VCL构件,结合虚拟设备驱动程序(.vxd)实现⑴的功能。
2、VCL构件主要属性、方法、事件、过程介绍
⑴通用属性、方法、过程
·ActiveHW: Boolean:该属性只读且运行时有效,如果虚拟设备驱动程序正常工作,则ActiveHW为True,否则为False。
·OpenDriver:该方法加载虚拟设备驱动程序,为其分配内存,使程序具有直接访问系统硬件的能力。如果虚拟设备驱动程序加载成功,ActiveHW属性被设置为True,否则为False。
·CloseDriver:该方法关闭虚拟设备驱动程序,释放为其分配的内存。如果虚拟设备驱动程序关闭成功,ActiveHW被设置为False。
⑵I/O端口访问
·HardAccess: Boolean:该属性决定虚拟设备驱动程序采用何种方式访问I/O端口。如果HardAccess为False,I/O访问速度较快,但若指定I/O地址已被其它驱动程序占用,I/O访问可能失败;如果HardAccess为True,I/O访问速度稍慢,但能保证若指定I/O地址已被其它驱动程序占用,I/O访问仍能进行。
·Port[Index: Word]: Byte:该方法数据类型为Byte—字节。(读/写指定地址的I/O端口,参数Index为指定I/O端口地址,数据类型为Word—字,下同)
·PortW [Index: Word]: Word:该方法数据类型为Word—字。
·PortL [Index: Word]: dWord:该方法数据类型为DWord—双字。
I/O读写代码实例:
with myPort do
begin
{...}
Port[$2F0]:=$47; //向地址为2F0H的I/O端口写一个字节的数据47H
{...}
myInpute:=Port[$2F9]; //从地址为2F9H的I/O端口读一个字节的数据,并赋给变量
//myInpute
{...}
end;
⑶硬件中断调用
与
DOS不同,在Windows操作系统中,硬件中断调用功能被隐藏或屏蔽起来,Windows一般不允许直接调用硬件中断。为此,需使用以下属性、事件、方法:·
OnHwInterrupt: TnotifyEvent:该事件通知系统一个硬件中断已经被调用。应将中断服务程序放在该事件中。·
IRQNumber: Byte:该属性指定欲调用的中断号(IRQ1—15),不支持0号中断(IRQ0—系统时钟)。·
SetIRQ:该方法将IRQNumber指定的中断分配给OnHwInterrrupt过程,并将IsIRQSet属性设置为True。·
UnmaskInterrupt:该方法解除Windows对IRQNumber指定中断的屏蔽,当中断产生时,将调用OnHWInterrupt事件,并将Masked属性设置为False。·
MaskInterrupt:该方法恢复Windows对IRQNumber指定中断的屏蔽,并将Masked属性设置为True。·
DestroyIRQ:该方法释放为解除屏蔽由IRQNumber指定中断分配的内存空间,并将IsIRQSet属性设置为False,Masked属性设置为True。·
IsIRQSet: Boolean:该属性只读,如果SetIRQ设置中断成功,IsIRQSet属性被设置为True,否则为False。·
Masked: Boolean:该属性只读,如果中断设置成功,Masked为False,否则为False。3、AX5412数据采集板性能简介
与其它产品(如MS1215)相比,AX5412具有许多优越性能。限于篇幅,本文无法对产品特性、开关描述、用户连接、引脚功能、板上寄存器结构和格式等逐一介绍,仅简要介绍与接口编程有关的重要部分,以便阅读下文所述程序时理解。
⑴采用12位A/D转换器,A/D转换时间为9us。
⑵可编程增益控制。
⑶开关选择单端16通道模拟输入或差动8通道模拟输入(可抑制嗓声,得到高精度A/D转换结果)。
⑷占用16个连续I/O端口地址,通过板上基地址选择开关设置基地址,默认为300H。
⑸`定时器基频率选择开关(J3):AX5412自带一片8254计数/定时器,8254中的计数器1和计数器2在内部串联起来产生一个固定周期信号作为A/D转换的触发源。有两个基频率1MHZ或10MHZ通过J3选择,默认为1MHZ。级联定时器的频率由下式确定:
除数1和除数2分别对应于8254计数器1和计数器2设定的计数值(2~65535,计数器是16位的)。计数器1和计数器2值串联相当于一个32位的计数器,可以用于时间很长的定时。
⑹A/D数据寄存器(基址+0和基址+1)
·基址+0(读):低4位说明进行A/D转换的通道号(0~15);高4位是A/D转换值的低4位。
·基址+0(写):写任意值即实施软件触发开始A/D转换。
·基址+1(读):A/D转换值的高8位。
⑺转换通道控制寄存器(基址+2,读/写):低4位表示多通道A/D转换的开始通道,高4位表示多通道A/D转换的结束通道。如低4位和高4位写入的值相同,表示单一通道连续采样。
⑻0通道D/A输出(基址+4和基址+5,写)
·基址+4:写该寄存器高4位输出D/A0低4位,该寄存器低4位无效。
·基址+5:写该寄存器8位输出D/A0高8位。
⑼1通道D/A输出(基址+6和基址+7,写)
·基址+6:写该寄存器高4位输出D/A1低4位,该寄存器低4位无效。
·基址+7:写该寄存器8位输出D/A1高8位。
⑽状态寄存器(基址+8)
·读:第7位(A/D转换完成位)EOC表示A/D转换是否完成。若EOC=0,A/D转换已完成,可以读取A/D转换数据;若EOC=1,A/D转换未完成。当开始读取数据,EOC被重新置1。
·写:向该寄存器写任何值清除中断请求。在实际中断服务程序中,在开中断前应先清中断,再利用控制寄存器(基址+9)开中断。
⑾控制寄存器(基址+9)
·0~1位:控制启动A/D的触发源。
·
2位:为1,DMA方式有效;为0,DMA方式无效。·
4~6位:选择中断级别。(PC机8259中断控制器管理的中断中,中断2系统未用,一般选2级中断)⑿定时器控制寄存器(基址
+10,写)·
0位:若为1,表示AX5412板上8254计数器中由计数器1和计数器2串联成的定时器触发起作用;否则,不起作用。⒀增益控制寄存器(基址
+11,读/写):低4位组合表示增益。㈡、编程实例
以下程序均以AX5412为例。
1、软件启动,查询管理
·A/D轮换:
设有一模拟输入信号单端输入,输入10通道,现对其进行A/D转换,输入计算机。