第七章 PC并行口数字输入输出.docx

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一.PC并行口数字输入/输出   所谓的数字输出就是在程序要求某一个设备的某一开关点开或关,产生高电位或低电位。从计算机的观点来说,低电位就是0.7V以下(逻辑0),而高电位是2.1V以上(逻辑1),若电位处在0.7~2.1V时,电位的逻辑状态是不确定的。想要通过计算机去控制外部设备,最简单的方法就是控制数字输出。   所谓的数字输入,也就是外界的状况被计算机用0或1的数值予以记录下来而储存,此0与1就代表了外界某一个设备的某一开关点开或关的两种情形。   PC并行口即可以作数字输出口,也可以作数字输入口。其中的数据端口、控制端口都可以作为数字输出端口,数据端口共8位,控制端口共4位,两个端口可以组成1~12位的任意数字输出端口;其中的状态端口、控制端口都可以作为数字输入端口,状态端口共5位,控制端口共4位,两个端口可以组成1~9位的任意数字输入端口。本文给出了并行端口3种寄存器的读写方法,如下图所示: 四、PC并行口数字输入/输出的VC实现   由于Windows对系统底层***作采取了屏蔽的策略,因而对用户而言,系统变得更为安全,但这却给众多的硬件或者系统软件开发人员带来了不小的困难,因为只要应用中涉及到底层的***作,开发人员就不得不深入到Windows的内核去编写属于系统级的设备驱动程序。对并行口的读写***作就是如此,由于Windows对系统的保护,绝对不允许任何的直接I/O动作发生,所以必须带上*.dll、*.sys或*.vxd文件,这些文件用来让***作系统知道有一个特定的I/O可能会被调用。系统开机后,这些文件中的内容就会加载到内存中,一旦有对应的动作发生,就会引发I/O的实际动作。   本文只是介绍并行口作为数字I/O口的使用,不在于介绍并行I/O口驱动的编写。故本文中直接使用由 Yariv Kaplan 编写的 WinIo 库,它有如下特点:WinIo 库通过使用内核模式下设备驱动程序和 其它一些底层编程技巧绕过 Windows 安全保护机制,允许32位 Windows 程序直接对 I/O 口进行***作;   支持Windows 9x、Windows NT、Windows2000、WindowsXP环境;在Windows NT/2000/XP下,允许非 Administrator 用户应用 WinIo 应用程序;不支持中断。 注意事项:使用这个类代码时请确保不要与其它使用常规 Win32 调用***作并行端口的程序发生冲突。 WinIo库在VC应用程序中的使用(WinIo库下载) 为了在VC中能正常使用WinIo库,必须按以下步骤进行配置: (1):将WinIo.dll、WinIo.sys、WINIO.VXD三个文件放在程序可执行文件所在目录下; (2):将WinIo.lib添加到工程中,WinIo.lib及winio.h文件必须放在工程目录下; (3):在StdAfx.h头文件中加入#include winio.h语句; (4):调用InitializeWinIo函数初始化WinIo驱动库; (5):调用读写IO口的GetPortVal或SetPortVal函数; (6):调用ShutdownWinIo函数; 在非管理员权限下运行,必须首先完成以下步骤: (1):将WinIo.dll、WinIo.sys、WINIO.VXD三个文件放在任一WinIo应用程序可执行文件所在目录下; (2):以管理员或其它具有管理员权限的用户身份登陆; (3):调用InstallWinIoDriver函数,第一个参数设置为WinIo.sys文件所在目录路径,第二个参数设    置为false; (4):重新启动系统; (5):以普通用户身份登录,现在可以调用WinIo库函数; (6):当不再需要WinIo库时,可以再次以管理员身份或其它具有管理员权限的用户身份登陆系统,调用RemoveWinIoDriver卸载该库; WinIo库中几个函数说明: (1):初始化与终止 bool _stdcall InitializeWinIo();void _stdcall ShutdownWinIo(); (2):安装与卸载 bool _stdcall InstallWinIoDriver(PSTR pszWinIoDriverPath, bool IsDemandLoaded = false);bool _stdcall RemoveWinIoDriver(); (3):读写I/O口 bool _stdcall GetPortVal(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize);bool _stdcall SetPortVal(WORD wPortAddr, DWORD dwPort

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档