我写了一个在win98下读写ps_2129卡(一个流卡)的程序,呵呵,谢谢htw提醒
unit ps_2129;
interface
function ps_2129_portReadB(wBase:word):byte;
function ps_2129_portReadDatum(wBase:word):word;
procedure ps_2129_portInitialize(wBase:word;bChannel:byte);
procedure ps_2129_portWriteB(wBase:word;bValue:byte);
function ps_2129_GetDatum(wBase:word=$100;bChannel:byte=0):word;
implementation
{************************************************************
* 功能:从指定I/O 地址读回一个字节数据,wBase为I/O地址
************************************************************}
function ps_2129_portReadB(wBase:word):byte;
asm
mov DX,AX //将I/O地址送DX寄存器(wBase:参数位于AX寄存器)
in AL,DX //从I/O地址为wBase的I/O口读入一个字节存于AL
end;
{************************************************************
* 功能:读回转换结果,wBase为A/D转换后高8位数据地址
* 返回值为转换后的真实值,即:(wBase)*16+(wBase+1)/16
************************************************************}
function ps_2129_portReadDatum(wBase:word):word;
asm
mov DX,AX //DX<--wBase
in AL,DX
mov AH,AL //DX<--wBase+1
inc DX
in AL,DX
SHR AX,$04 //AX<--(wBase)*16+(wBase+1)/16
end;
{************************************************************
* 功能:初始化A/D卡的。
* 1. 选择/打开模拟通道 2. 启动A/D转换
************************************************************}
procedure ps_2129_portInitialize(wBase:word; bChannel:byte);
asm
xchg AX,DX //DX<--wBase AX<--bChannel
out DX,AL //选择/打开模拟通道
inc DX //DX<--wBase+1
out DX,AL //启动A/D转换
end;
{************************************************************
* 功能:向指定I/O 地址写入一个字节数据,wBase为I/O地址
************************************************************}
procedure ps_2129_portWriteB(wBase:word;bValue:byte);
asm
XCHG AX,DX //DX<--wBase AX<--bValue
out DX,AL //写入数据
end;
{************************************************************
* 功能:数据采样,返回转换结果
************************************************************}
function ps_2129_GetDatum(wBase:word;bChannel:byte):word;
var
a :byte;
begin //4
ps_2129_portInitialize(wBase,bChannel);// 初始化A/D卡。
repeat //
a:= ps_2129_portReadB(wBase+1); //等待A/D转换结束
a := a and $01; //取(wBase+1)的d0位
until a = 0; //为零时,转换完成
result := ps_2129_portReadDatum(wBase+2);//读回转换结果
end;
end.