从零开始学习C++6.0之并口控制
第三课 8位数据端口输出
上一课中只是简单的输出P2针脚的高低电平,在实际应用中的控制是不能影响其他针脚端口的值的,否则当用数据端口连接几个设备时就会出错。所以本节将以上一节的工程为基础,重新编写控制代码。
一、并口8位数据端口输出实验
1、 在Portcon1工程目录下,复制整个工程目录并修改成Portcon2,然后在VC打开就行了,这个步骤主要是避免重复第一课中的WinIo配置。这样我们就可以直接在原基础上通过添加代码或控件,节约时间。前一次试验程序也当成备份文档有需要时再打开。
2、 打开VC后界面也是一样的,只是改了标题,默认的两个“确定”和“取消”按钮我也删除了一个,保留“取消”键钮并改成“退出”,方便理解。
3、 在这里还是先做P2针的输出,主要是为了先理解其中增加的代码,在上一节中仅两行的代码程序增加的代码如下:(其实就是在原有两行代码中间添加的)
4、 对上述程序代码的解释
A.在这里简单说一下WORD和DWORD,
在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、 然后我们通过修改0x0FE和0x01、0x02的值,就可以控制除P2针脚外其余P3―P9共七个针脚的值,大家可以另外添加按钮,或通过添加Text编辑窗口传递变量给temp_p,完成对8位数据端口的自由控制。在这里我就不另做程序设计了。
6、 大家把程序完成,并通过最简单的万用表,测试一下是否成功。8位数据端口是可以自由用于输出输入的,另外关于4位控制端口(只能用做输出)和5位状态端口(专门用做输入)这里就先不讨论,大家先简单通过变更0x37A和0x379地址测试一下相应端口。因为我的最终目的是为控制直流普通电机和步进电机或其他设备,充分利用廉价淘汰电脑做为上位机的功能,以后用到的时候再讨论。
二、并口定义及其编程基础
因为前面没有描述过,后来考虑像我一样的初学者可能也不知哪根针脚是P2,哪根是公共地线,所以还是来补充一下,内容都是转摘网上,去掉那些控制打印机的影子,稍作整理而已。
在PC机中,标准并行口使用3个8位的端口寄存器,PC就是通过对这些寄存器,也就是所说的数据、状态、控制寄存器的读写访问并口的信号的。有一些通用的叫法,8个数据位分别为D0~D7,5个状态位为S3~S7,4个控制为C0~C3。其中字母表示了端口寄存器,数字则表示该信号在寄存器中的位。
定义说明
25针并口定义(输入输出是相对于PC机的并口,从并口输出,输入到并口):
这些引脚,其实就是I/O口。而且是可以控制的,以软件的方式。在计算机内部,对应的寄存器如下:
0x378是8bit数据寄存器的地址,对应并口针的顺序是(9,8,7,6,5,4,3,2)
0x379是状态寄存器,对应针脚的顺序(11,10,12,13,15, -, -, -)
0x37A是控制寄存器,对应针脚的顺序(-, -, -,并口中断允许位,17,16,14,1)
也就是说PC的0x378可以用来做输入和输出,0x37A的低4位可以用来输出,0x379是输入。这样就可以用并口模拟很多时序,比如IIC、JTAG、SPI等等。
注意:上述的寄存器地址是以0x378为基地址的。如果基地址为0x3F0,那么他们的数据、状态、控制寄存器地址分别为0x3F0、0x3F1、0x3F2。(基地址缺省的是0x378,也可在BIOS里重新设置)
想要更详细的相关知识学习,自己在网络上遨游吧。
下一课开始,我开始玩些有感官的控制电机和步进电机的实验,想一起的朋友继续等待啊^_^