本文主要介绍并行端口的结构以及简单的对并口的读、写并以及如何获得端口的状态。

并行接口的分类: 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

八位数据线,只有在SPP指令下才有能输出数据.

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

   

---

信号接地

打印机常用端口: 对于LPT1: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为打印机状态地址,可读,通过个端口打印机适配器可以很方便的读取打印机的状态。

标记为S7的信号表示最高位,SO表示为最低位,只有S3-S7五个信号才是真正有用的信号。他们的具体信号功能解释如下:

S7*(busy):打印机使用该信号表示打印机正处于忙状态,不能再接收数据。需要强调的是,该信号通过适配器板时,进行了反相处理,因此连接器上的低电平到微处理器时就变成了高电平。

S6(nAck):当适配器发出选通信号时,打印机就会产生该信号作为响应。通常情况下,该信号是高电平,选通打印机之后,打印机首先把该信号设为低电平,然后再返回高电平。

S5(PE):当打印机缺纸时,它就会产生一个这样的信号,通常情况下,该信号由打印机保持为低电平,打印机纸使用完之后,该信号就会变成高电平。

S4(SELECT):当打印机恢复正常操作时,它就会插入一个高电平的该信号。当打印机处于无效状态时,访信号就会变成低电平。

S3(NERROR):当打印机出现错误时就会产生这种邮错信号。产生出错的原因很多,如打印纸堵了或产生了内部错误。产生错误时该信号就会设置成低电平。

以下为在Windows CE 下打印机各种状态时,所对应的状态寄存器的(AL)的值:

1:>在没接入打印机时寄存器AL值为127,对应二进制是:1111111
2:>打印机在缺纸灯不亮时寄存器AL值为144,对应二进制是:10010000
3:>打印机在缺纸灯亮时寄存器AL值为 119;对应二进制值是:11101111
4:>打印机在不缺纸的情况下寄存器AL值 223,对应二进制值是:11011111
5:>打印机在没开机的情况下得到AH值为207,对应二进制值是:11001111 

下面介绍对并口的编程控制:

(编程控制示例)(为汇编代码)
// 此段代码为并口向打印机进行写数据,并发送控制信息。

#define LPT_CLEAR_MASK 0x40
#define LPT_STROBE_HI 0x0D
#define LPT_STROBE_LO 0x0C

#define LPT_STATUS_BITS 0xF8
#define LPT_BITS_INVERT 0x48
#define LPT_NOTBUSY 0x80
#define LPT_PAPEROUT 0x20
#define LPT_SELECT 0x10
#define LPT_NFAULT 0x08

#define LPT_TimeOut 0x01

void OutByte(ULONG dataport, BYTE databyte) {
#if x86
_asm {
mov dx, word ptr [dataport]
mov al, byte ptr [databyte]
out dx, al
out dx, al
add dx, 2
in al, dx
and al, LPT_CLEAR_MASK
mov cl, al
or al, LPT_STROBE_HI
out dx, al
out dx, al
out dx, al
out dx, al
or cl, LPT_STROBE_LO
mov al, cl
out dx, al
}
#else

WRITE_PORT_UCHAR((PUCHAR)dataport,databyte);

dataport+=2;
databyte = (READ_PORT_UCHAR((PUCHAR)dataport) & LPT_CLEAR_MASK)
| LPT_STROBE_HI;
WRITE_PORT_UCHAR((PUCHAR)dataport,databyte);

databyte = (READ_PORT_UCHAR((PUCHAR)dataport) & LPT_CLEAR_MASK)
| LPT_STROBE_LO;
WRITE_PORT_UCHAR((PUCHAR)dataport,databyte);

#endif
}

// 此段代码为读取打印机当前状态。
BYTE CheckStatus(unsigned port) {
BYTE bRet;

#if x86
_asm {
mov dx, word ptr[port]
Checkme:
in al, dx
mov ah, al
nop
nop
in al, dx
cmp al, ah
jnz Checkme
and ah, LPT_STATUS_BITS
xor ah, LPT_BITS_INVERT
test ah, LPT_PAPEROUT or LPT_NFAULT
jnz CS_HasError
test ah, LPT_SELECT
jz CS_HasError
and ah, LPT_NOTBUSY
jz CS_HasError
xor eax, eax
CS_HasError:
mov [bRet],al
}
#else

BYTE bStatus;
do {
bRet= bStatus= READ_PORT_UCHAR((PUCHAR)port);
} while (bStatus != READ_PORT_UCHAR((PUCHAR)port));
bStatus&= LPT_STATUS_BITS;
bStatus^= LPT_BITS_INVERT;

if (!(bStatus & (LPT_PAPEROUT | LPT_NFAULT)) &&
(bStatus & LPT_SELECT) && (bStatus & LPT_NOTBUSY))
bRet=0;
#endif
return bRet;
}

// The End

转:并口编程参考资料相关推荐

  1. Andr oid 多窗 口编程

    Android 多窗 口编程 多窗口支持 Android N 添加了对同时显示多个应用窗口的支持. 在手持设备上,两个应用可以在"分屏"模式中左右并排或上下并排显示. 在电视设备上 ...

  2. 并口定义及并口编程基础

    最近想利用服务器的并口做一些东西,于是上网查了下并口定义及相关编程方法,如下: 一.接口定义说明 电脑的并口,通常是25针. 接口定义如下: 针 方向 2,3,4,5,6,7,8,9 双向 1,14, ...

  3. (转载)RS485---串口编程

    最近被安排实现 linux rs485 串口通信.期间遇到各种问题,现在加以分析总结. 一.硬件相关 1.1 单工.半双工.全双工 首先,我使用的是芯片为 SP3485E 为半双工通信.那么先要明确什 ...

  4. CC2530 GPIO口编程2 (上拉、下拉,三态)

    先介绍一下上拉.下拉: 上拉.下拉 I/O端口中,有的上下拉电阻可以设置,有的不可以设置,有的是内置,有的是需要外接,I/O端口类似于一个三极管的集电极C, •当C接通过一个电阻和电源连接在一起的时候 ...

  5. 嵌入式linux/鸿蒙开发板(IMX6ULL)开发(十八)串口编程

    文章目录 一. 串口应用程序编程介绍 1.串口的作用 2. 本套视频特别说明 二. 硬件知识_UART硬件介绍 1. 串口的硬件介绍 2. 串口的参数 3. 串口电平 4. 串口内部结构 三. TTY ...

  6. 快速复习51单片机的外部中断、计数/定时器中断和串行口中断,加代码实现

    目录 1.中断系统的概念 1.1中断的概念 1.2中断系统的概念 1.3中断系统的优点 1.4我们要说的三种中断源 2.外部中断 2.1 外部中断0 代码示范 2.2 外部中断 分析 3.计数/定时器 ...

  7. 电脑硬件知识学习_编程入门书籍:大学学习计算机基础必读 5 本经典入门书籍,收藏...

    新手学习计算机并非易事,作为一个自学编程的过来人,深知打好计算机基础的重要性,缺少了坚实的计算机的基础,往往你也难以往上走,即使学了再多高大上的技术,也都是在沙台上筑高楼,缺少根基,摇摇欲坠. 学好计 ...

  8. python编程基础知识体系_【汇总】Python 编程核心知识体系

    [汇总]Python 编程核心知识体系 大神著作,源自:https://woaielf.github.io/2017/06/13/python3-all/ 本文主要涵盖了 Python 编程的核心知识 ...

  9. Quartus-ii的LPT1编程硬件配置问题

    领取了新电脑后,由于没有并口,导致ByteBlasterMV编程器无法连接电脑,没有办法,买来PARAEL+SERIAL ExpressCard,(USB转并口),安装驱动程序后发现电脑已经有并口,并 ...

最新文章

  1. 程序媛眼中的程序猿原来是这样子的!
  2. PNAS前沿:迈向作为多层学习的进化理论
  3. LBS推荐系统的设计方法
  4. BZOJ1296:[SCOI2009]粉刷匠
  5. 如何在 Flutter 中使 Expanded 中的文本可滚动
  6. Hibernate中Inverse和Cascade
  7. java buffalo_随你怎么玩!Buffalo 网络硬盘新潮流
  8. HDFS常用Shell命令
  9. API – MultiByteToWideChar的用法
  10. 【M1兼容】阿里云盘小白羊版 Mac版(支持满速)
  11. LeetCode 889. Construct Binary Tree from Preorder and Postorder Traversal
  12. Android 实例解说Application类
  13. 下载频道12月热门资源TOP100强力推荐!
  14. 视频编解码(十七):视频流错误检查步骤-进程查看内存方法
  15. 遇到问题的时候,要学会问问题
  16. TLC5615输出256点正弦波(振幅和频率可调)
  17. 设计模式(四) 策略模式
  18. dsolve函数的功能_MATLAB求解常微分方程:ode45函数与dsolve函数
  19. 解读中国版新资本协议
  20. CSS实例——梦幻西游

热门文章

  1. 操作系统概念学习笔记 11 进程同步(一)
  2. 两次服务器灾难事故的反思
  3. Linux--Ubuntu12.04安装NDK
  4. 使用Jdom2将一个xml文件添加到另一个xml中
  5. android常用代码
  6. java.io.IOException: No space left on device
  7. Windows 8实例教程系列 - 理解应用框架
  8. SqlServer 中Binary类型的数据如何转化为字符串
  9. C语言 显示数组元素的值和地址
  10. mysql 值到99999后不增值了_MySQL数据库之更新语句精解(一)