ImageVerifierCode 换一换
格式:DOCX , 页数:5 ,大小:30.80KB ,
资源ID:9008229      下载积分:10 金币
验证码下载
登录下载
邮箱/手机:
图形码:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/9008229.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请。


权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4009-655-100;投诉/维权电话:18658249818。

注意事项

本文(PC并行口数字输入输出.docx)为本站上传会员【s4****5z】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

PC并行口数字输入输出.docx

1、一.PC并行口数字输入/输出   所谓的数字输出就是在程序要求某一个设备的某一开关点开或关,产生高电位或低电位。从计算机的观点来说,低电位就是0.7V以下(逻辑0),而高电位是2.1V以上(逻辑1),若电位处在0.7~2.1V时,电位的逻辑状态是不确定的。想要通过计算机去控制外部设备,最简单的方法就是控制数字输出。   所谓的数字输入,也就是外界的状况被计算机用0或1的数值予以记录下来而储存,此0与1就代表了外界某一个设备的某一开关点开或关的两种情形。   PC并行口即可以作数字输出口,也可以作数字输入口。其中的数据端口、控制端口都可以作为数字输出端口,数据端口共8位,控制

2、端口共4位,两个端口可以组成1~12位的任意数字输出端口;其中的状态端口、控制端口都可以作为数字输入端口,状态端口共5位,控制端口共4位,两个端口可以组成1~9位的任意数字输入端口。本文给出了并行端口3种寄存器的读写方法,如下图所示: 四、PC并行口数字输入/输出的VC实现   由于Windows对系统底层***作采取了屏蔽的策略,因而对用户而言,系统变得更为安全,但这却给众多的硬件或者系统软件开发人员带来了不小的困难,因为只要应用中涉及到底层的***作,开发人员就不得不深入到Windows的内核去编写属于系统级的设备驱动程序。对并行口的读写***作就是如此,由于Wind

3、ows对系统的保护,绝对不允许任何的直接I/O动作发生,所以必须带上*.dll、*.sys或*.vxd文件,这些文件用来让***作系统知道有一个特定的I/O可能会被调用。系统开机后,这些文件中的内容就会加载到内存中,一旦有对应的动作发生,就会引发I/O的实际动作。   本文只是介绍并行口作为数字I/O口的使用,不在于介绍并行I/O口驱动的编写。故本文中直接使用由 Yariv Kaplan 编写的 WinIo 库,它有如下特点:WinIo 库通过使用内核模式下设备驱动程序和 其它一些底层编程技巧绕过 Windows 安全保护机制,允许32位 Windows 程序直接对 I/O 口进行***

4、作;   支持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)

5、将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):以管理员

6、或其它具有管理员权限的用户身份登陆; (3):调用InstallWinIoDriver函数,第一个参数设置为WinIo.sys文件所在目录路径,第二个参数设    置为false; (4):重新启动系统; (5):以普通用户身份登录,现在可以调用WinIo库函数; (6):当不再需要WinIo库时,可以再次以管理员身份或其它具有管理员权限的用户身份登陆系统,调用RemoveWinIoDriver卸载该库; WinIo库中几个函数说明: (1):初始化与终止 bool _stdcall InitializeWinIo();void _stdcall S

7、hutdownWinIo(); (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 dwPortVal,

8、 BYTE bSize); GetPortVal函数从指定端口读取一个BYTE/WORD/DWORD类型的值; wPortAddr是指定一个端口地址值; pdwPortVal为指向一双字节型变量的指针,该变量存储从wPortAddr端口读取的值; bSize指定读取字节数,值可以为1,2或4。 SetPortVal函数向指定端口写入一个BYTE/WORD/DWORD类型的值; 除dwPortVal为输入参数,表示待写入外,其余个变量含义与GetPortVal相似。 PC并行口数字输出的VC实现(示例工程下载)   为了测试并行口的数字输出,可以

9、准备12支LED发光二极管,将LED的阳极分别与数据端口引脚Pin2~Pin9和控制端口引脚Pin1、Pin14、Pin16、Pin17相连接;将LED的阴极连接在一起与并行口的归地引脚GND相连即可。在实际控制应用中不能这样连接,因为数据端口引脚、控制端口引脚输出的电流非常小,只有10mA左右,必须添加 其它硬件电路。 (1):数据端口数字输出的VC实现 //获得数据端口地址WORD m_nport=(WORD)0x378;//获得要写入数据端口的值WriteValue(数据范围为0~255)DWORD m_nValue=(DWORD)WriteValue;//调用WinIo库函

10、数SetPortVal写端口值SetPortVal(m_nport, m_nValue, 1);//write a BYTE value to an I/O port (2):控制端口数字输出的VC实现 //获得控制端口地址WORD m_nport=(WORD)0x37A; //获得控制端口的值,保持高位值不变,将要输出的值从低4位输出,且使连接器上的电位状态与想输出的值一致DWORD temp_dwPortVal;unsigned int temp_aa;GetPortVal(m_nport, &temp_dwPortVal, 1); //reads a BYTE value f

11、rom an I/O porttemp_aa=(unsigned int)temp_dwPortVal;temp_aa=temp_aa&0x0F0; //取低8位值,将低4位置为0;高4位不变;temp_aa=temp_aa^0x0B; //将低4位中C0、C1、C3置为1,C2置为0;高4位不变; //获得要写入控制端口的值WriteValue(数据范围为0~15)unsigned int WriValue;WriValue=WriteValue&0x0F; //取低4位;temp_aa=temp_aa^WriValue; //将写入值的低4位中的C0、C1、C3取反,C2位不变,高4

12、位保持端口值不变SetPortVal(m_nport, (DWORD)temp_aa, 1); //写出的值中,高4位保持端口原来的值不变,//低4位是写入什么电平,连接器上既是什么电平 (3):数据端口及控制端口组合成12位数字输出的VC实现 //获得端口地址WORD m_nportData=(WORD)0x378;WORD m_nportControl=(WORD)0x37A;//获得要写入端口的值WriteValue(数据范围为0~4095)DWORD m_nValue=(DWORD)(WriteValue&0x0FF);//取低8位值SetPortVal(m_nportDa

13、ta, m_nValue, 1);//write a BYTE value to Data portDWORD temp_dwPortVal;unsigned int temp_aa;GetPortVal(m_nportControl, &temp_dwPortVal, 1); //reads a BYTE value from an I/O porttemp_aa=(unsigned int)temp_dwPortVal;temp_aa=temp_aa&0x0F0; //取低8位值,将低4位置为0;高4位不变;temp_aa=temp_aa^0x0B; //将低4位中C0、C1、C3置为1,

14、C2置为0;高4位不变;unsigned int WriValue;WriValue=WriValue>>8;//取高4位值temp_aa=temp_aa^WriValue; //将写入值的低4位中的C0、C1、C3取反,C2位不变,高4位保持端口值不变SetPortVal(m_nportControl, (DWORD)temp_aa, 1); //写出的值中,高4位保持端口原来的值不变,//低4位是写入什么电平,连接器上既是什么电平 PC并行口数字输入的VC实现 (1):状态端口数字输入的VC实现   为了测试并行口状态端口的数字输入,可以将数据端口引脚Pin2~Pin6连

15、接到状态端口引脚Pin15、Pin13、Pin12、Pin10、Pin11上。引脚接好后,先从数据端口输出数据,在从状态端口和控制端口读出数据,读出的数据应与写入的数据一致,数据范围为0~31。 DWORD dwPortVal;unsigned int ValueGet=0;//获得端口地址WORD m_nport=(WORD)0x379;//获得端口数据GetPortVal(m_nport, &dwPortVal, 1);ValueGet=(unsigned int)dwPortVal;ValueGet=ValueGet^0x80; //保持得到的State值与连接器处的值一直;Val

16、ueGet=ValueGet&0xF8; //去掉S0 ~S2位;ValueGet=ValueGet>>3; //右移3位,将S7~S3变为低5位 (2):控制端口数字输入的VC实现   为了测试并行口控制端口的数字输入,可以将数据端口引脚Pin2~Pin5连接到控制端口引脚Pin1、Pin14、Pin16、Pin17上 。引脚接好后,先从数据端口输出数据,在从状态端口和控制端口读出数据,读出的数据应与写入的数据一致,数据范围为0~15。 //获得端口地址WORD m_nport=(WORD)0x37A;//===== 将C0~C3位置1,即使连接器上为高电平 ,使控制端口为

17、输入端口=====DWORD temp_dwPortVal;unsigned int temp_aa;GetPortVal(m_nport, &temp_dwPortVal, 1); //获取端口的当前值temp_aa=(unsigned int)temp_dwPortVal;temp_aa=temp_aa&0x0F0; //取低8位值,将低4位置为0;高4位不变;temp_aa=temp_aa^0x4; //将低4位中C0、C1、C3置为0,C2置为1;高4位不变;SetPortVal(m_nport, (DWORD)temp_aa, 1); //写出的值中,高4位保持端口原来的值不变,//

18、低4位是写高电平,即使连接器上是高电平//=============================================================unsigned int ValueGet=0;DWORD dwPortVal;//获得端口数据GetPortVal(m_nport, &dwPortVal, 1);ValueGet=(unsigned int)dwPortVal; ValueGet=ValueGet^0x0B; //保持C0,C1,C3位的值与连接器处的值一至;ValueGet=ValueGet&0x0F; //去掉高4位值 (3):控制端口及状态端口组合成

19、9位数字输入的VC实现   为了测试并行口的数字输入,可以将数据端口引脚Pin2~Pin9连接到控制端口引脚Pin1、Pin14、Pin16、Pin17和状态端口引脚Pin15、Pin13、Pin12、Pin10上 ,Pin11引脚连接到归地引脚GND或悬空。引脚接好后,先从数据端口输出数据,在从状态端口和控制端口读出数据,读出的数据应与写入的数据一致,当Pin11引脚连接到归地引脚GND时,数据范围为0~255;当Pin11引脚悬空时,数据范围为256~511。 unsigned int ValueGet=0;//获得端口地址WORD m_nportState=(WORD)0x3

20、79;WORD m_nportControl=(WORD)0x37A;//Read State PortDWORD dwPortVal;unsigned int ValueState=0;GetPortVal(m_nportState, &dwPortVal, 1);ValueState=dwPortVal;ValueState=ValueState^0x80; //保持得到的State值与连接器处的值一直;ValueState=ValueState&0xF8; //去掉S0 ~S2位;ValueState=ValueState<<1; //左移1位,将S7~S3变为高5位//Read con

21、trol Port//========== 将C0~C3位置1,即使连接器上是高电平 ,使控制端口为输入端口=====GetPortVal(m_nportControl, &dwPortVal, 1); //获取端口的当前值ValueGet=(unsigned int)dwPortVal;ValueGet=ValueGet&0x0F0; //取低8位值,将低4位置为0;高4位不变;ValueGet=ValueGet^0x4; //将低4位中C0、C1、C3置为0,C2置为1;高4位不变;SetPortVal(m_nportControl, (DWORD)ValueGet, 1); //写出的值

22、中,高4位保持端口原来的值不变,//低4位是写高电平,即使连接器上是高电平//=============================================================unsigned int ValueControl=0;GetPortVal(m_nportControl, &dwPortVal, 1);ValueControl=(unsigned int)dwPortVal; ValueControl=ValueControl^0x0B; //保持C0,C1,C3位的值与连接器处的值一至;ValueControl=ValueControl&0x0F; //去掉高4位值//get 9bit valueValueGet=ValueState^ValueControl; 本文来自CSDN博客,转载请标明出处:

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服