【www.arisingsemi.com--软件制图】

端怎么读
本文主要介绍并行端口的结构以及简单的对并口的读、写并以及如何获得端口的状态。   
并行接口的分类: SPP(标准并行接口) ,EPP(增强型并行接口),ECP(扩展型并行端口)
标准并行端口(SPP)也是最早的端口定义,主要功能如下,
1:并行端口提供了8个数据线以进行并行的字节传输,
2:计算机能够通过数据线向打印机发送选能信号,以通知打印机已经准备好接收数据,
3:打印机招收到数据后,向计算机发送一个回应信号(NACK)。其各位信号线所代表的意义详见下表。

增强型并行端口(EPP)的出现提供了一种更高性能的连接方式,并东路向下兼容所有在此之前存在的并行接口及外设。
与SPP不同之处在于原来17个信号中的重新定义,在这17个信号中,EPP使用了其中的14个信号进行传输,握手和选通,剩下的3个信号可以由外设设计者有来自定义。
并行接口的大致结构:并行口一般有25个引脚,其中包括8位数据线,5位打印机状态线,4位控制线.下面将对这些引脚予以详细说明:(注:
1:>出,表示由计算机发向打印机;入,表示由打印机发向计算机,
2:>低电平有效信号用上划线或星号表示(如S7*),高电平有效信号则没有上划线或星号)
引脚号
名称
数据位
寄存器
数据方向
定义
1
/STROBE
C0*


选通信号,低电平有效信号,表明线上有数据到达.
2
D0
DATA_1-DATA_8






D1-D8

3
D1

4
D2

5
D3

6
D4

7
D5

8
D6

9
D7

10
/ACK
S6
Status

应答,以插入低电平的形式出现,表明最后一个字符已招收完毕。

11
BUSY

S7*
Status

繁忙通知,以插入高电平的方式出现,表明打印机处于忙状态不能再接收数据。
12
PE
S5
Status

没有打印机纸。

13
SELECT
S4
Status

选择输入,以插入高电平的方式出现,表明打印机处于在线待命状态。
14
AUTO FEED
C1*
Control

自动馈送,低电平有效信号民,通知打印机对于每遇到一个回车进行自动换行。
15
/ERROR
S3
Status

错误,该信号由打印机发向计算机,表明打印机处于错误状态。
16
/INIT
C2
Control

初始化,低电平有效信号,该信号用来对打印机进行复位。

17
/SELIN
C3*
Control

选择输入,低电平有效信号,表明已经选中的打印机。
18
GND


---
信号接地
19
GND


---
信号接地
20
GND


---
信号接地
21
GND


---
信号接地
22
GND


---
信号接地
23
GND


---
信号接地
24
GND


---
信号接地
25
GND


---
信号接地
打印机常用端口: 对于LPT
1:0X378 为数据发送地址,0X379为打印机状态地址,0X37A为计算机向打印机控制地址, 通常为了使程序具有通用性我们可以从注册表中取得这个地址,对于WINDOWS CE 而言,这个值被存储在{HKEY_LOCAL_MACHINE//DRIVERS//BUILTIN//PARALLEL//IOBASE}.然后我们就可以通过对此三个端口进行控制达到简单的并口编程的目的.
下面是对打印机状态端口及打印机控制端口作一详细解释:
控制端口:
0x37A
1
1
输入控制
中断
17线
16 线
14 线
1  线
这个0x37A计算机控制打印机的地址,可以产生对打印机进行控制的必要信号,可写,两高位(7和8)没什么用,第6位写1表示可以向并口输出数据。第五位中断信号(IRQ EN),利用此信号线,驱动程序可以在STATUS端口信号(nAck)的帮助下,使用该信号对中断信号的产生与否进行控制。第3,2,1,0位分别控制第17线,第16线,第14线和第1线。
(可以控制它们的状态)具体作用可参见前表
0x379
(S7)11 忙
(S6)10应答
(S5)12缺纸
(S4)13联机
(S3)15 错误
S2
S1 
S0 
0x379为打印机状态地址,可读,通过个端口打印机适配器可以很方便的读取打印机的状态。
// The End
posted on 2005-05-12
14:24 自由空间 阅读(13754) 评论(17)  编辑 收藏
# re: 转:并口编程参考资料 2005-05-12
16:22 紫水晶
汇编。
。。

# re: 转:并口编程参考资料 2005-05-13
11:24 freedk
用C也一样嘛,汇编再说查资料也能看得懂。
知道原理就行了,什么语言实现到不重要
# re: 转:并口编程参考资料 2005-08-01
09:15 guaidan1
有没有vc++编写的并口编程。各位高手谁有的话给我e-mail一份。 小弟感激涕零。。
lxjmike@
# re: 转:并口编程参考资料 2006-01-23
16:31 张修军
您好,我现在碰到一个比较棘手的问题。 就是用电脑监听打印数据。开始我用VC++6采用windriver的EPP中断方式来做,对某一种机器是可以的。但是拿到其他地方做,被监听的机器不是死机就是打印乱码(连接线我们确定没有问题)。您看这可能是什么原因造成的呢。是不是要加什么光电隔离。我的连线是直接一分二硬连的。
如果采用单片机方式将并口转换成串口,电脑直接读串口也是可行的办法,但我没有硬件的能力。不知道您哪有没有现有的程序。能给我一份的话,我万分感激。 我的EMAIL:woodszhang@ 电话:0851-******* 张修军
# re: 转:并口编程参考资料 2006-08-03
13:08 海浪
我用VC能实现并口的单字节的通信 ,可当我想实现多字节传输是就出现问题,反馈信号无法获取,我用的是EPP1.7,请高手指点。
Email:taozifei@
# re: 转:并口编程参考资料 2006-09-23
06:01 darkfox
你这个方法恐怕现在已经不适用了,xp下肯定不行 没有ring0权限 无法使用 in out 指令(虚拟86好象可以) 我这里有个方法,就是使用API CreateFile 函数,找遍了资料,只提 到可以用来操作串口,但实际上还可以操作 LPT 口,下面的例子原来 是属于串口通讯的,被我改了下,很简单,只需要在函数的 第一个参数 里填入 "LPT1" (如果你还有第2个口的话,也可以是"LPT2") 测试后,发现的确能打开并口,测试方法很简单,把下面的代码放 到任何一个过程中,轮番给这个函数的第一个参数传入 : "LPT2" 会提示出错(没有这个口的情况下) "LPT1" 正常打开,没有提示 下面这段例子来源于VC,但我用的是BCB,改过后稍有不同,VC里的话再改下就行了。 /*    并口操作 HANDLE hCom; DWORD dwError; AnsiString portname = Edit1->Text; //Edit1->Text = "LPT1" hCom=CreateFile(portname.c_str(), // 文件名 GENERIC_READ | GENERIC_WRITE, // 允许读和写 0, // 独占方式 NULL, OPEN_EXISTING, //打开而不是创建 FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, // 重叠方式 NULL ); if(hCom == INVALID_HANDLE_VALUE) {   dwError=GetLastError(); ShowMessage("有错误"); } if(hCom) CloseHandle(hCom); */ 。

本文来源:http://www.arisingsemi.com/it/81724/