并口定义及并口编程基础

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

一、接口定义说明

电脑的并口,通常是25. 接口定义如下:

方向

23456789

双向

1141617

输出

1011121315

输入

1819202122232425

功能说明:

二、并口编程基础

这些引脚,其实就是I/O口。而且是可以控制的,以软件的方式,非常简单。

在计算机内部,对应的寄存器如下:

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

0x379是状态寄存器,1110121315 - - -

0x37A是控制寄存器,- - - 并口中断允许位,1716141

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

注意:上述的寄存器地址是以0x378为基地址的。如果基地址为0x3F0,那么他们的数据、状态、控制寄存器地址分别为0x3F00x3F10x3F2。(基地址缺省的是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闪烁。至于模拟其他的总线或者别的控制,也就很简单了,无非是时序的问题。



  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值