whitespray
驱动牛犊
驱动牛犊
  • 注册日期2004-04-23
  • 最后登录2006-10-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1024回复:2

请教数据采集问题?

楼主#
更多 发布于:2004-10-10 16:39
AD卡是ISA总线的,在98下的程序如下:
#include <dos.h>
main()
{
  unsigned char dataL,dataH;
  unsigned int  result;
  outportb(0x22C,0x10);
  for(int i=0;i<1000;i++);//延时50微秒
  outportb(0x22B,0x30);
  outportb(0x228,0x10);
  for(i=0;i<50;i++);
  outportb(0x228,0x00);
  for(i=0;i<1000;i++);
  dataL=inportb(0x221);
   for(i=0;i<50;i++);
  dataH=inportb(0x220);
  result=(unsigned int)((dataH&0x0f)*256+dataL);
  printf("result=%d\n",result);
}
现在在2000下用,是不是只要开发一个驱动程序实现I/O口的读写函数就行了。还是别的什么方法处理?请指教,谢谢
Tom.Cat
禁止发言
禁止发言
  • 注册日期2001-10-10
  • 最后登录2019-07-29
  • 粉丝1
  • 关注0
  • 积分-53792分
  • 威望197411点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2004-10-11 10:40
用户被禁言,该主题自动屏蔽!
whitespray
驱动牛犊
驱动牛犊
  • 注册日期2004-04-23
  • 最后登录2006-10-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-10-11 11:51
我把上面的数据采集程序写在驱动程序里,代码如下:
NTSTATUS ADRWDevice::ADRW_IOCTL_800_Handler(KIrp I)
{
    NTSTATUS status = STATUS_SUCCESS;
    m_IoPortRange1.outb(0x5,0x10);//m_IoPortRange1对应I/O  (228-22C)
    for(int i=0;i<2000;i++);
    m_IoPortRange1.outb(0x4,0x30);
    m_IoPortRange1.outb(0x0,0x10);
    for(i=0;i<50;i++);
    m_IoPortRange1.outb(0x0,0x00);
    for( i=0;i<2000;i++);
   UCHAR dataL= m_IoPortRange0.inb(0x1);//m_IoPortRange0对应I/O  (220-221)

    for( i=0;i<50;i++);
    UCHAR dataH=m_IoPortRange0.inb(0x0);
    ULONG result=(ULONG)((dataH&0x0f)*256+dataL);
   *(ULONG*)(I.IoctlBuffer())=result;
   I.Information() = sizeof(ULONG);
   return status;
}
应用程序:ULONG Test_ADRW_IOCTL_800(void)
{
ULONG bufOutput;                   ULONG nOutput;
if (!DeviceIoControl(hDevice,
ADRW_IOCTL_800,
NULL,
0,
&bufOutput,
sizeof(ULONG),
&nOutput,
NULL)
  )
{
printf("ERROR: DeviceIoControl     returns %0x.", GetLastError());
Exit(1);
}
return bufOutput;
}
这程序读得的结果是零(正确的是2048),另外只在驱动程序里实现读写函数,采集程序写在应用程序里:读的结果也是这样。这问题在那,怎么解决,谢谢。
游客

返回顶部