您的位置:首页 > 编程语言

并口定义及并口编程基础

2014-11-05 23:29 274 查看
最近想利用服务器的并口做一些东西,于是上网查了下并口定义及相关编程方法,如下:

一、接口定义说明

电脑的并口,通常是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 /STROBE -> Strobe

2 D0 -> Data Bit 0

3 D1 -> Data Bit 1

4 D2 -> Data Bit 2

5 D3 -> Data Bit 3

6 D4 -> Data Bit 4

7 D5 -> Data Bit 5

8 D6 -> Data Bit 6

9 D7 -> Data Bit 7

10 /ACK <- Acknowledge

11 BUSY <- Busy

12 PE <- Paper End

13 SEL <- Select

14 /AUTOFD -> Autofeed

15 /ERROR <- Error

16 /INIT -> Initialize

17 /SELIN -> Select In

18 GND -- Signal Ground

19 GND -- Signal Ground

20 GND -- Signal Ground

21 GND -- Signal Ground

22 GND -- Signal Ground

23 GND -- Signal Ground

24 GND -- Signal Ground

25 GND -- Signal Ground


针脚
功能
针脚
功能
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闪烁。至于模拟其他的总线或者别的控制,也就很简单了,无非是时序的问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: