请问delphi如何操作AD卡标准io口(300分)

  • 主题发起人 主题发起人 jxq
  • 开始时间 开始时间
J

jxq

Unregistered / Unconfirmed
GUEST, unregistred user!
我需要从一块AD卡(ISA)中读取数据,可是那块卡没带驱程
可我找不到读写AD卡标准端口的函数
请各位大老帮忙
多谢了
 
补充一下:可不可以用BASM读那些端口
 
delphi中没有这种函数,
1.可以自己在delphi中嵌入汇编代码
2.也可以VC的端口函数封装成Dll,现由delphi来调用
3.可以用DLPortIO.Zip提供的驱动程序和读取函数。
 
请问在delphi 中嵌入汇编代码怎么写呀
能不能给一个例程或举个例子
还有,不好意思,DLPortIO.Zip哪里有下呀
 
我写了一个在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.
 
后退
顶部