从零开始学习VC++6.0之并口控制(第二课 P2端口控制)

从零开始学习C++6.0之并口控制

 

第二课 P2端口控制

一、组建工程Portcon1

1、 连接好并口线,或接口板(如果有的话),准备万用表或LED指示灯用来试针脚的输出

2、 打开VC,新建工程MFCexe类型),名称:Portcon1,选择基本对话框,在窗口添加两个按钮,做成如下图示:“确定”和“取消”两个按钮是默认的。并将“P2针高电平”的按钮ID改成IDC_P2_1,“P2针低电平”的按钮ID改成IDC_P2_0,目的就是为了达到输出P2针脚高电平“1”和低平电“0

从零开始学习VC++6.0之并口控制(第二课 P2端口控制)_第1张图片

 

3、 按第一课的方法对这个Portcon1工程进行WinIo配置

4、 配置完WinIo库后,分别双击按钮输入以下两行代码:

从零开始学习VC++6.0之并口控制(第二课 P2端口控制)_第2张图片

5、 F7进行编译后,直接按F5就可以运行了。用万用表量P2针脚的电压值,当按下“P2针高电平”的按钮时,电压值约为1.6V2V之间;当按下“P2针低电平”的按钮时,电压值为零。如果测试的是LED灯(正极端接P2针,负极端接并口的GND),就会在输出高电平时LED亮。

 

二、关于WinIo库函数的知识介绍

上面的高低电平测试程序只用到两行代码,其中

WORD m_nport=(WORD)0x378

SetPortVal(m_nport, 0, 1);

其中WORD用来获得端口地址,0x378是数据端口地址,0x37A是控制端口地址,0x379是状态端口的地址(这些地址可以在电脑的BIOS中查询到,学过单片机的朋友容易理解)。

第二行的SetPortVal就是写端口函数,下面做些函数说明。

1、读写I/O口函数说明:

   A.读端口值函数

  bool _stdcall GetPortVal(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize);

  GetPortVal函数从指定端口读取一个BYTE/WORD/DWORD类型的值;

  wPortAddr是指定一个端口地址值;

  pdwPortVal为指向一双字节型变量的指针,该变量存储从wPortAddr端口读取的值;

  bSize指定读取字节数,值可以为124

 

B.写端口值函数

bool _stdcall SetPortVal(WORD wPortAddr, DWORD dwPortVal, BYTE bSize);

  SetPortVal函数向指定端口写入一个BYTE/WORD/DWORD类型的值;

  除dwPortVal为输入参数,表示待写入外,其余个变量含义与GetPortVal相似。

 

2、具体在使用中,如本节的两行代码:

WORD m_nport=(WORD)0x378

SetPortVal(m_nport, 0, 1);

实际上定义了变量m_nport,这个变量也是随意定的,主要是为了传递给读/写函数用,将地址值传给它;

SetPortVal函数第二个变量,就是我们想要的值,为16进制,0-255的范围。具体操作的时候把二进制0000 00008位列出来对应P2P9针端口,最低位是P2,比如想输出P4端口高电平,先列0000 0100,换算成数值4(也可写成0x04),这样代码为:

SetPortVal(m_nport, 4, 1);SetPortVal(m_nport, 0x04, 1);

当然也可以定义unsigned int类型变量来传递需要的端口值。

    以下是8位数据端口的输出高低电平换算示例表:(其他组合值推算即可)

数据端口0x378

转换值

P9

P8

P7

P6

P5

P4

P3

P2

16进制值

10进制

0

0

0

0

0

0

0

1

0x01

1

0

0

0

0

0

0

1

0

0x02

2

0

0

0

0

0

1

0

0

0x04

4

0

0

0

0

1

0

0

0

0x08

8

0

0

0

1

0

0

0

0

0x10

16

0

0

1

0

0

0

0

0

0x20

32

0

1

0

0

0

0

0

0

0x40

64

1

0

0

0

0

0

0

0

0x80

128

 

SetPortVal函数第三个传递值用来指定读取或写入的字节数,因为我们控制的数据端口、控制端口或状态端口都是8位一字节,所以默认为1就可以了。用24会出现什么情况我也没试过。

 

本节的学习中我们只用到了一个输出函数,知识点不多,不用急,慢慢和我一起深入学习。

你可能感兴趣的:(从零开始学习VC++6.0之并口控制(第二课 P2端口控制))