科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件Visual Basic实现对I/O端口操作

Visual Basic实现对I/O端口操作

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

同时需要说明的是,_inp和_outp函数和inp和outp函数用法基本上相同,只是在使用时需要头文件

作者:easypower 来源:论坛 2007年10月14日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
、使用计算机LPT打印口做I/O端口

  打印口有3个端口:数据端口、状态端口和控制端口,常用的打印口为LPT1,它的3个端口的地址分别为:378H、379H和37AH。其中378H和37AH可读可写,而379H为只读端口。

  与使用其他I/O卡一样,在运行DEBUG环境下,对打印口的各位进行检测如下。

  378H作数据输出口。键入指令 –O 378 00(01,02,04,08,10,20,40,80,FF),同时用万用表分别检测2~9脚的电压(25脚接万用表“地”),可分别测到对应位与所输入的数据相符合(”1” 对应5V,”0”对应0V)。说明此地址的8位可作为8个输出线。

  379H作输入端口。为了给各脚提供输入电平,我们先引入一个外部5V电源。电源地线接打印口的25脚,而后分别在10,11,12,13,15脚接入5V、0V,同时在DEBUG环境下执行 -I 379指令,读入此端口的数据。读到的各数据应与输入信号相符合。

  37AH口只能作输出口。检测方法与378H 相同。

  检测结果为:

   378各位输出电平和指令信号一致,D0~D8位都可以做端口输出位;

   37A各位输出电平和指令信号相反,D0~D3位都可以做端口输出位;

   379各位悬空状态下:11脚为“0”,10,12,13,15为“1”,故使用D3~D6做端口输入位。

  综上,通常使用打印口做I/O端口的共有12个输出位和4个输入位。

  四、Windows 2000/XP/NT下I/O端口操作

  Windows 2000/XP/NT对硬件实现了屏蔽,对I/O端口进行了严格的控制,许多在Windows 9x下正常运行的用户应用程序,在Windows 2000/XP/NT中直接访问硬件会引起系统异常,因此不能在Windows 2000/XP/NT下直接访问I/O端口。

  通常有两种方法解决Windows 2000/XP/NT下I/O端口操作问题,一是编写一个运行在RING0级(设备驱动驱动程序级)的虚拟设备驱动程序(Virtual X Device,VSD),它可以不受限制地访问硬件设备、捕获I/O端口操作和内存访问等,甚至可以截获硬件中断,这样就可以在USER方式下实现Windows 2000/XP/NT下I/O端口的访问操作。另一种方法就是修改I/O允许位图设置,允许一个特定的任务存取特定的I/O端口。 这允许USER方式的程序在RING3级(应用程序级)按照I/O允许位图设置, 不受限制地访问I/O端口。

  接下来本文介绍两种在Windows 2000/XP/NT下实现I/O端口操作的方法,WinIO和PortTalk。

  WinIO程序库通过使用一种内核模式的设备驱动器和其它几种底层编程技巧,绕过了Windows系统的保护机制,从而允许在Windows 2000/XP/NT下应用程序直接对I/O端口和物理内存进行操作。需要注意的是,在Windows 2000/XP/NT下,WinIO函数库只允许被具有管理员权限的应用程序调用。WinIO程序库含有相应驱动程序的源代码和Visual BASIC例程,下载地址为:http://www.internals.com/utilities/winio.zip。
PortTalk使用的是上述的第二种方法,它够让你现有的程序运行在windows 2000/XP/NT下, 但是需要注意的是,因为必须在RING0和RING3下来回切换,所以使用PortTalk会降低程序的运行效率。PortTalk设备驱动程序也提供了全部源代码,下载地址为:http://www.beyondlogic.org/porttalk/porttalk.zip。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章