最近想利用服务器的并口做一些东西,于是上网查了下并口定义及相关编程方法,如下:
一、接口定义说明
电脑的并口,通常是25针. 接口定义如下:
针 | 方向 |
2,3,4,5,6,7,8,9 | 双向 |
1,14,16,17 | 输出 |
10,11,12,13,15 | 输入 |
18,19,20,21,22,23,24,25 | 地 |
功能说明:
二、并口编程基础
这些引脚,其实就是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里重新设置)
输入函数:int inport(int address); address就是上面的寄存器地址
输出函数:int outport(int address,int value);
无论是DOS下编程、还是Windows下,都可用。
三、25针并口具体定义
Pin Name Dir Description
针脚 | 功能 | 针脚 | 功能 |
1 | 选通端,低电平有效 | 10 | 确认,低电平有效 |
2 | 数据通道0 | 11 | 忙 |
3 | 数据通道1 | 12 | 缺纸 |
4 | 数据通道2 | 13 | 选择 |
5 | 数据通道3 | 14 | 自动换行,低电平有效 |
6 | 数据通道4 | 15 | 错误,低电平有效 |
7 | 数据通道5 | 16 | 初始化,低电平有效 |
8 | 数据通道6 | 17 | 选择输入,低电平有效 |
9 | 数据通道7 | 18-25 | 地 |
另外 ,Linux例程如下:
<pre name="code" class="cpp">#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main()
{
//open file
int fd;
fd=open("/dev/port",O_RDWR);
if(fd<0)
{
perror("open file error:");
return -1;
}
//operate
unsigned char buf[2];
while(1)
{
lseek(fd,0x378,SEEK_SET);
buf[0]=0xff;
write(fd,buf,1);
sleep(1);
printf("LED ON \r\n");
lseek(fd,0x378,SEEK_SET);
buf[0]=0x00;
write(fd,buf,1);
sleep(1);
}
//close
close(fd);
return 0;
}
经亲自测试,可以控制连接在管脚上的LED闪烁。至于模拟其他的总线或者别的控制,也就很简单了,无非是时序的问题。