`
isiqi
  • 浏览: 16348443 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

并口编程参考资料

阅读更多
并行接口的分类: 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;
}
分享到:
评论

相关推荐

    标准并口编程参考资料

    这个“标准并口编程参考资料”是面向那些希望深入理解并行端口工作原理以及如何通过编程对其进行控制的IT专业人士。在本文中,我们将详细讨论并行端口的结构,以及如何进行基本的读写操作和状态检测。 并行端口的...

    打印口lpt并口编程

    标题中提到的"打印口lpt并口编程"指的是如何通过编程来操作计算机的并行打印端口(LPT端口),它通常用于连接打印机或其他外设。...对于希望掌握基础硬件接口编程的初学者来说,这是一份宝贵的参考资料。

    java8 编程参考官方教程(第9版) 源代码

    本书《Java 8编程参考官方教程(第9版)》的随书源代码,提供了丰富的示例和练习,帮助读者深入理解Java 8的新特性。以下是基于这个主题的详细知识点讲解: 1. **lambda表达式**:Java 8引入了lambda表达式,它是一...

    并口数据彩集,并口读取编程参考

    并口数据采集是一种技术,常用于监控打印机和其他设备的数据传输,同时也被用于设计和编程以实现数据的读取。在本文中,我们将深入探讨并口编程以及如何利用Multisim7这一电子电路设计与仿真的EDA软件来设计并口数据...

    RF1800编程器软件(老并口)

    这款编程器采用并行接口(老并口)连接到个人计算机上,以便进行芯片编程任务。RF1800在当时是较为流行的选择,因为它支持多种类型的微处理器和内存芯片,为电子工程师和开发者提供了便利。 该软件是2004版,相较于...

    java 8编程参考官方

    《Java 8编程官方参考教程(第9版)》是一本深入浅出的Java 8学习资料,适合初学者及有经验的Java开发者。这本书详细介绍了Java 8的新特性和改进,帮助读者全面掌握这个重要的Java版本。Java 8作为Java语言的一个...

    C#编程指南参考手册

    总而言之,《C#编程指南参考手册》是一本全面、实用的学习资料,无论你是初学者还是经验丰富的开发者,都能从中受益匪浅。通过阅读和实践书中的例子,你可以深化对C#的理解,提升编程技能,从而在软件开发领域...

    本书将介绍一些并行编程的架构和编程模型。对于初次接触并行编程技术的程序员来说,这些都是非常有用的概念;对于经验丰富的程序员来说,本书可以作为基础参考。

    Python作为一种高级编程语言,具有丰富的并行计算库,如joblib、dask等,这些库提供了高层次的接口,使得并行编程变得更加简洁。对于初学者,可以先从简单的并行任务开始,例如使用map函数进行数据并行处理;对于有...

    D 语言 2.0 编程参考手册(上,中,下)

    通过阅读《D语言2.0编程参考手册》的上下册和中册,你可以深入了解这些概念,并掌握如何在实践中应用它们。手册将详细讲解D语言的语法、标准库的使用,以及最佳实践,帮助你成为一个熟练的D语言开发者。无论你是初学...

    JAVA串并口编程实例

    - 示例代码:参考开源项目中的示例代码,学习如何在实际项目中应用串并口编程。 - 论坛讨论:参与Java和RXTX相关的社区讨论,获取解决具体问题的帮助。 通过以上介绍,你应该对Java中的串并口编程有了基本的理解...

    Windows图形编程参考书

    《Windows图形编程参考书》是一本专为对Windows平台图形编程感兴趣的开发者准备的指南。它深入探讨了在Windows操作系统上创建图形用户界面(GUI)和进行2D、3D图形渲染的技术。书中不仅介绍了基本概念,还涵盖了高级...

    spiflash 1.81并口SPI Flash BIOS编程器,全套官方资料

    3. SPI Flash并口编程器使用说明书.pdf:这份PDF文档详细介绍了编程器的使用方法,包括硬件连接、软件操作步骤等,是用户正确使用工具的重要参考资料。 4. spiflash.pdf:可能是关于spiflash工具的更详细的技术文档...

    并行编程原理及程序设计.pdf

    ### 并行编程原理及程序设计 ...《并行编程原理及程序设计》这本书不仅提供了全面的理论知识,还介绍了实际应用中的各种技术和工具,对于希望深入学习并行计算的朋友来说,是一本非常有价值的参考书籍。

    Java 8编程官方参考教程(第9版)

    在《Java 8编程官方参考教程(第9版)》中,你可以深入学习这些核心改变,包括函数式编程、Lambda表达式、Stream API、日期与时间API、并发改进以及新的接口和类库等。 首先,Lambda表达式是Java 8的一大亮点,它...

    D语言编程参考手册

    ### D语言编程参考手册知识点概览 #### 一、D语言简介 **D语言**是一种通用的编程语言,主要用于系统和应用级别的开发。它被设计为比C++更高级,同时保留了C++的一些关键特性,例如能够生成高效的机器码,并且可以...

    参考资料-下载线+接口电路——制作实用的单片机编程器.zip

    这个名为"参考资料-下载线+接口电路——制作实用的单片机编程器.zip"的压缩包文件提供了关于如何构建自己的单片机编程器的详细指南。下面,我们将深入探讨其中的关键知识点。 首先,单片机编程器是用于向单片机...

    可编程并行接口实验报告.doc

    这部分可能包含教师提供的额外资料,如8255A的详细数据手册、编程示例和其他参考资料,以辅助学生深入学习。 总结,通过这次实验,学生不仅掌握了8255A的编程与应用,还提升了在微机接口设计上的实践能力,为今后在...

    多进程编程和进程通信参考资料

    在Linux中,进程是系统资源分配的基本单位,每个进程都有独立的内存空间,这使得它们可以并行执行任务。创建新进程通常通过`fork()`系统调用实现,而`exec()`系列函数则用于替换当前进程的执行上下文。在"linux多...

Global site tag (gtag.js) - Google Analytics