Y
yyl
Unregistered / Unconfirmed
GUEST, unregistred user!
;
原来在DOS下做了一个数据采集程序,运行很正常。其中的
采集部分为附后程序中的Sjcj:后将程序做到Win98下,用的是
C++ Builder 3.0,因为没有现成的端口读写函数可用,便照
Delphi 4.0中文手册上写的两个汇编程序,写了
InPort(short PortNo)和
OutPort(short PortNo, unsigned char Data)代替inportb和
outportb.问题就出在Sjcj子程序中,出错处已标明。
//用TC2.0做,把inportb换成InPort,outportb换成OutPort
就是Win98下的程序
void Sjcj(void)
{
char i = 0,k = 0,m = 0;
for(i=0;i<=4;i++)
{
outportb(0x278,STARTH+i);
dela(20); //用于微量延时
outportb(0x278,STARTL+i);
//检测AD卡是否准备好,出问题处
//dos下不会死循环,而Win98下出现死循环
//用仪器检测发现采集的数据不稳定,即有随机现象
//请问有何法解
do{
k = inportb(0x279);
k = k&0x80;
}while(k ==0 );
dela(180);
k=inportb(0x27a);
wave1[DataLength-1] = k;
dela(10);
}
}
void dela(int Value)
{
int n = 0,ii = 0;
for(n = 0;n <= Value;n++)
{
ii = ii++;
ii = ii*10;
ii = ii/10;
}
}
void __fastcall TSjcjForm:ortOut(short PortNo,
unsigned char Data)
{
asm {
xor edx,edx
xor eax,eax
mov dx,PortNo
mov al,Data
out dx,al
}
}
//-----------------------------------------------------------
unsigned char __fastcall TSjcjForm:ortIn(short int PortNo)
{
unsigned char result;
asm {
xor edx,edx
xor eax,eax
mov dx,PortNo
in al,dx
mov result,al
}
return result;
}
原来在DOS下做了一个数据采集程序,运行很正常。其中的
采集部分为附后程序中的Sjcj:后将程序做到Win98下,用的是
C++ Builder 3.0,因为没有现成的端口读写函数可用,便照
Delphi 4.0中文手册上写的两个汇编程序,写了
InPort(short PortNo)和
OutPort(short PortNo, unsigned char Data)代替inportb和
outportb.问题就出在Sjcj子程序中,出错处已标明。
//用TC2.0做,把inportb换成InPort,outportb换成OutPort
就是Win98下的程序
void Sjcj(void)
{
char i = 0,k = 0,m = 0;
for(i=0;i<=4;i++)
{
outportb(0x278,STARTH+i);
dela(20); //用于微量延时
outportb(0x278,STARTL+i);
//检测AD卡是否准备好,出问题处
//dos下不会死循环,而Win98下出现死循环
//用仪器检测发现采集的数据不稳定,即有随机现象
//请问有何法解
do{
k = inportb(0x279);
k = k&0x80;
}while(k ==0 );
dela(180);
k=inportb(0x27a);
wave1[DataLength-1] = k;
dela(10);
}
}
void dela(int Value)
{
int n = 0,ii = 0;
for(n = 0;n <= Value;n++)
{
ii = ii++;
ii = ii*10;
ii = ii/10;
}
}
void __fastcall TSjcjForm:ortOut(short PortNo,
unsigned char Data)
{
asm {
xor edx,edx
xor eax,eax
mov dx,PortNo
mov al,Data
out dx,al
}
}
//-----------------------------------------------------------
unsigned char __fastcall TSjcjForm:ortIn(short int PortNo)
{
unsigned char result;
asm {
xor edx,edx
xor eax,eax
mov dx,PortNo
in al,dx
mov result,al
}
return result;
}