从零开始学习VC++6.0之并口控制(第三课 8位数据端口输出)

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

 

第三课 8位数据端口输出

 

上一课中只是简单的输出P2针脚的高低电平,在实际应用中的控制是不能影响其他针脚端口的值的,否则当用数据端口连接几个设备时就会出错。所以本节将以上一节的工程为基础,重新编写控制代码。

一、并口8位数据端口输出实验

1、 Portcon1工程目录下,复制整个工程目录并修改成Portcon2,然后在VC打开就行了,这个步骤主要是避免重复第一课中的WinIo配置。这样我们就可以直接在原基础上通过添加代码或控件,节约时间。前一次试验程序也当成备份文档有需要时再打开。

2、 打开VC后界面也是一样的,只是改了标题,默认的两个“确定”和“取消”按钮我也删除了一个,保留“取消”键钮并改成“退出”,方便理解。

从零开始学习VC++6.0之并口控制(第三课 8位数据端口输出)_第1张图片

3、 在这里还是先做P2针的输出,主要是为了先理解其中增加的代码,在上一节中仅两行的代码程序增加的代码如下:(其实就是在原有两行代码中间添加的)

从零开始学习VC++6.0之并口控制(第三课 8位数据端口输出)_第2张图片

4、 对上述程序代码的解释

A.在这里简单说一下WORDDWORD

VC的安装目录C:\Program Files\Microsoft Visual Studio\VC98\Includ\WINDEF.H这个头文件中可以找到相关定义:

typedef unsigned long      DWORD;

typedef int                BOOL;

typedef unsigned char      BYTE;

typedef unsigned short     WORD;

 可以看到,DWORD定义为无符号长整型,实际上省略了int,为4个字节,32位长度;而WORD定义为无符号短整型,为2个字节,16位长度。相关知识自己再百度一下吧。

 

 B.接着定义了一个无符号整型变量temp_p,用来接收GetPortVal函数读出的端口值。然后根据输出值需要,通过&(按位与运算符号)和 ^(按位或运算符号)实现不影响其他针脚的原值,完成对P2针的控制。

 

5、 然后我们通过修改0x0FE0x010x02的值,就可以控制除P2针脚外其余P3P9共七个针脚的值,大家可以另外添加按钮,或通过添加Text编辑窗口传递变量给temp_p,完成对8位数据端口的自由控制。在这里我就不另做程序设计了。

 

6、 大家把程序完成,并通过最简单的万用表,测试一下是否成功。8位数据端口是可以自由用于输出输入的,另外关于4位控制端口(只能用做输出)和5位状态端口(专门用做输入)这里就先不讨论,大家先简单通过变更0x37A0x379地址测试一下相应端口。因为我的最终目的是为控制直流普通电机和步进电机或其他设备,充分利用廉价淘汰电脑做为上位机的功能,以后用到的时候再讨论。

 

二、并口定义及其编程基础

因为前面没有描述过,后来考虑像我一样的初学者可能也不知哪根针脚是P2,哪根是公共地线,所以还是来补充一下,内容都是转摘网上,去掉那些控制打印机的影子,稍作整理而已。

PC机中,标准并行口使用38位的端口寄存器,PC就是通过对这些寄存器,也就是所说的数据、状态、控制寄存器的读写访问并口的信号的。有一些通用的叫法,8个数据位分别为D0D75个状态位为S3S74个控制为C0C3。其中字母表示了端口寄存器,数字则表示该信号在寄存器中的位。

定义说明

25针并口定义(输入输出是相对于PC机的并口,从并口输出,输入到并口):从零开始学习VC++6.0之并口控制(第三课 8位数据端口输出)_第3张图片

这些引脚,其实就是I/O口。而且是可以控制的,以软件的方式。在计算机内部,对应的寄存器如下:

0x3788bit数据寄存器的地址,对应并口针的顺序是(98765432

0x379是状态寄存器,对应针脚的顺序(1110121315 - - -

0x37A是控制寄存器,对应针脚的顺序(- - -并口中断允许位,1716141

也就是说PC0x378可以用来做输入和输出,0x37A的低4位可以用来输出,0x379是输入。这样就可以用并口模拟很多时序,比如IICJTAGSPI等等。

注意:上述的寄存器地址是以0x378为基地址的。如果基地址为0x3F0,那么他们的数据、状态、控制寄存器地址分别为0x3F00x3F10x3F2。(基地址缺省的是0x378,也可在BIOS里重新设置)

想要更详细的相关知识学习,自己在网络上遨游吧。

下一课开始,我开始玩些有感官的控制电机和步进电机的实验,想一起的朋友继续等待啊^_^

 

你可能感兴趣的:(从零开始学习VC++6.0之并口控制(第三课 8位数据端口输出))