新闻中心

EEPW首页>嵌入式系统>设计应用> PC并行端口作为数字I/O口的应用

PC并行端口作为数字I/O口的应用

作者: 时间:2011-11-24 来源:网络 收藏

PC并行口数字输入的VC实现

  (1):状态端口数字输入的VC实现

  为了测试并行口状态端口的数字输入,可以将数据端口引脚Pin2~Pin6连接到状态端口引脚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值与连接器处的值一直;

  ValueGet=ValueGet0xF8; //去掉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,即使连接器上为高电平 ,使控制端口为输入端口=====

  DWORD temp_dwPortVal;

  unsigned int temp_aa;

  GetPortVal(m_nport, temp_dwPortVal, 1); //获取端口的当前值

  temp_aa=(unsigned int)temp_dwPortVal;

  temp_aa=temp_aa0x0F0; //取低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位保持端口原来的值不变,

  //低4位是写高电平,即使连接器上是高电平

  //=============================================================

  unsigned int ValueGet=0;

  DWORD dwPortVal;

  //获得端口数据

  GetPortVal(m_nport, dwPortVal, 1);

  ValueGet=(unsigned int)dwPortVal;

  ValueGet=ValueGet^0x0B; //保持C0,C1,C3位的值与连接器处的值一至;

  ValueGet=ValueGet0x0F; //去掉高4位值

  (3):控制端口及状态端口组合成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)0x379;

  WORD m_nportControl=(WORD)0x37A;

  //Read State Port

  DWORD dwPortVal;

  unsigned int ValueState=0;

  GetPortVal(m_nportState, dwPortVal, 1);

  ValueState=dwPortVal;

  ValueState=ValueState^0x80; //保持得到的State值与连接器处的值一直;

  ValueState=ValueState0xF8; //去掉S0 ~S2位;

  ValueState=ValueState1; //左移1位,将S7~S3变为高5位

  //Read control Port

  //========== 将C0~C3位置1,即使连接器上是高电平 ,使控制端口为输入端口=====

  GetPortVal(m_nportControl, dwPortVal, 1); //获取端口的当前值

  ValueGet=(unsigned int)dwPortVal;

  ValueGet=ValueGet0x0F0; //取低8位值,将低4位置为0;高4位不变;

  ValueGet=ValueGet^0x4; //将低4位中C0、C1、C3置为0,C2置为1;高4位不变;

  SetPortVal(m_nportControl, (DWORD)ValueGet, 1); //写出的值中,高4位保持端口原来的值不变,

  //低4位是写高电平,即使连接器上是高电平

  //=============================================================

  unsigned int ValueControl=0;

  GetPortVal(m_nportControl, dwPortVal, 1);

  ValueControl=(unsigned int)dwPortVal;

  ValueControl=ValueControl^0x0B; //保持C0,C1,C3位的值与连接器处的值一至;

  ValueControl=ValueControl0x0F; //去掉高4位值

  //get 9bit value

  ValueGet=ValueState^ValueControl;

  五、结束

  本文只是介绍PC作为数字I/O口的应用方法,在实际运用到控制系统中进行数字信号通信时,必须注意对信号进行其它的处理,以提高端口信号的抗干扰能力、稳定性及可靠性等。


上一页 1 2 3 下一页

评论


技术专区

关闭