并口编程教程

并口

IEEE 1284 Standard1994年为并口传输定义了5种模式:

         1) Compatibility Mode            兼容模式

      2) Nibble Mode                       半字模式

      3) Byte Mode                          字节模式

      4) EPP                                          增强型并口模式

      5) ECP                                          扩展并行口

并口的硬件连接器为DB25,被分成了三组,如下图

并口编程教程_第1张图片

 

   1) Data lines (data bus)   数据线
      2) Control lines             
控制线
      3) Status lines              
状态线
数据线用来传输数据,控制线用来控制外围设备,外围设备通过状态线返回状态信号,这些线分别与内部的数据寄存器,控制寄存器和状态寄存器相连。

DB25管脚信号如下:

Pin No (DB25)

Signal name

Direction

Register - bit

Inverted

1

nStrobe

Out

Control-0

Yes

2

Data0

In/Out

Data-0

No

3

Data1

In/Out

Data-1

No

4

Data2

In/Out

Data-2

No

5

Data3

In/Out

Data-3

No

6

Data4

In/Out

Data-4

No

7

Data5

In/Out

Data-5

No

8

Data6

In/Out

Data-6

No

9

Data7

In/Out

Data-7

No

10

nAck

In

Status-6

No

11

Busy

In

Status-7

Yes

12

Paper-Out

In

Status-5

No

13

Select

In

Status-4

No

14

Linefeed

Out

Control-1

Yes

15

nError

In

Status-3

No

16

nInitialize

Out

Control-2

No

  17

nSelect-Printer

Out

Control-3

Yes

18-25

Ground

-

-

-

并口寄存器:

       数据,控制,状态线分别与计算机内部相配的寄存器相连,所以可以通过编程来操作这些寄存器,可以通过’C’或者’BASIC’语言轻松读写并口。

标准并口寄存器有:

       1) data register            数据寄存器
      2) Status register         
状态寄存器    
      3) Control register
       控制寄存器

通过写这些寄存器,将在相应线上传输相应的电压信号,可以通过万用表来测量,给并口的这些信号也可以通过这些寄存器读出来,例如:我们写入”1”到数据寄存器,Data0将被提高为+5V电压,这样,我们就可以通过编程打开或关闭数据线或控制线。

 

这些寄存器在哪里?

       IBM PC中,这些寄存器是IO映射的,并且是唯一的地址,典型的PC上,LPT1的基地址是0x378LPT2的基地址是0x278LPT3的基地址是0x3bc

数据寄存器在基地址上,状态寄存器在基地址+1控制寄存器在基地址+2,因此,当我们一旦知道基地址,我们可以通过计算出其他寄存器的地址

Register

LPT1

LPT2

LPT3

data registar(baseaddress + 0)

0x378

0x278

0x3bc

status register (baseaddress + 1)

0x379

0x279

0x3Bd

control register (baseaddress + 2)

0x37a

0x27a

0x3be

编程规范:

几乎所有的编程语言都提供一些库函数来存取并口,例如:Borland C 提供了"Inportb" "Outportb" 函数去读或写外部设备的IO映射地址。此教程提供了VC的例子,但是很容易移植到其他编译器如:Borland CTCVB不直接提供对并口的存取函数,但是可以通过DLL很容易增加这个功能,VC提供两个函数存取外围设备的IO映射,“_inp”读,”_outp”写。这些函数在“conio.h”中声明。

简单硬件测试程序: 并口编程教程_第2张图片

VC++范例:

第一步:建立工程:

 

并口编程教程_第3张图片

并口编程教程_第4张图片

 

 

点完成后在example.cpp中输入代码:

 

#include "stdafx.h"

#include "conio.h"

#include "stdio.h"

#include "string.h"

#include "stdlib.h"

 

int main(int argc, char* argv[])

{

          short data;

 

          if(argc<2)

          {

                    printf("Usage/n/n");

                    printf("partest1.exe ,,/n/n/n");

                    return 0;

          }

         

          if(!strcmp(argv[1],"read"))

          {

                    data = _inp(atoi(argv[2]));

                    printf("Data read from parallel port is  ");

                    printf("%d/n/n/n/n",data);

          }

         

          if(!strcmp(argv[1],"write"))

          {

                    _outp(atoi(argv[2]),atoi(argv[3]));

                    printf("Data written to parallel port is  ");

                    printf("%s/n/n/n/n/n",argv[3]);

          }

          return 0;

}

 编译这个程序,并将其复制到"c:/"

  如何测试程序?

连接硬件,打开命令提示框,切换到C: 输入:partest1.exe write 888 255按下回车,如果所有都正确,那么LED1-LED8都会发光,这里的8880x378,LPT1的基地址(数据寄存器)255是写入数据寄存器的数据,如果输入“partest1 read 888”程序将从并口读出数据寄存器的值并显示。

你可能感兴趣的:(硬件相关)