
并口在标准打印机口操作模式的工作原理.doc
5页
并口在标准打印机口操作模式的工作原理(转载整理)原作者:程方原出处:重庆邮电学报打印机并行接口逻辑具有3个设备端口:数据端口、控制端口和状态端口,均可用 IN或(和)OUT 指令对其进行读出或(和)写入共有 5种操作:读数据、写数据、读控制、写控制和读状态它们都是对相应的端口寄存器进行的操作1. 数据寄存器对数据寄存器的写入操作是 CPU 将打印数据传送到打印机的数据线上对数据寄存器的读出操作是 CPU 取出送到打印机的打印数据,主要用于验证数据口数据的发送是否正确2. 控制寄存器控制寄存器的各位定义如图1所示对控制寄存器写入操作是 CPU 将控制命令送到打印机对控制寄存器的读出操作是 CPU 取出送到打印机的控制命令,主要用于验证控制口数据的发送是否正确在 Windows 系统启动过程中,要对打印机进行初始化,为系统随后进行的打印操作予以准备对打印机初始化要输出的控制字节为“8=00001000B”,并持续一定时间(4 ms 左右) ,随后规定操作系统支持的打印机操作方式:禁止中断、打印机联机及不自动换行也就是说,在 Windows 操作系统下,对打印机的操作不能采用中断方式、操作打印机时打印机必须处于联机状态、打印机不能执行自动换行功能。
3. 状态寄存器在标准模式下,状态寄存器是唯一的只读寄存器通过对状态寄存器的读出操作,CPU 可获得打印机送来的5位状态信息状态寄存器各位定义如图2所示 注意:状态忙碌位(D7 =0)意味着打印机正在处理上一接收的打印数据一旦处理完毕,立即发出应答信号,置应答位为0(D6 =0) ;同时置忙碌位为1,即准备就绪在中断允许条件下(控制寄存器 D4=1) ,此应答信号即可作为打印机的中断请求 IRQ状态口主要是为了使主机判断打印机的工作状态,保证打印数据的可靠发送对一台并行口打印机发送打印数据,主要是计算机软件通过对以上端口执行指令操作,发送和接收各个端口的数据,并使相关的端口信号满足打印机要求的数据传输时序不论计算机使用的是哪种型号的打印机,它们的数据传输时序都是一致的打印机以每次接收一个8位数据作为数据传输时序的基本周期但每个周期的间隔是不定时的,完全取决于外界的同步信号,即打印机接口控制寄存器的最低位――数据选通位“STROBE”打印机数据传输时序如图3图3中的各信号含义如下:(1)BUSY 打印机忙碌信号若为“高” ,表示打印机不能接收数据该信号在数据输入期间、打印操作期间、打印机脱机状态、打印机出错状态的4种情况下变为“高”。
注意:该信号送到打印机接口状态寄存器最高位后,CPU 读取时刚好反相,即BUSY= 1,D7 =02)打印机应答信号当打印机准备好接收下一数据时,输出宽约5μs 的负脉冲利用其后沿使忙碌信号 BUSY 由“高” 变为“低”,即打印机不忙与此同时,打印机接口卡利用该信号的后沿,在中断允许置1条件下,向系统输出中断请求信号 IRQ3)DATA 打印机接收数据信号总共有8位,其数据为逻辑1时,处于高电位,逻辑0时处于低电位系统向打印机输出8位打印数据的起始时间,只要在数据选通信号之前不少于0.5μs 即可而数据的消失时间要确保在信号撤消后不少于0.5μs4)打印机数据选通信号当系统检测到打印机准备就绪(BUSY 无效,或有效)时,通过对控制寄存器最低位瞬时置1,经反相输出负脉冲该脉冲至少保持0.5μs(在打印机一侧) 在此期间,打印机将数据线 DATA 的8位信息取入到内部缓冲器中与此同时,打印机的 BUSY 线置为高电平,表示处于数据输入状态通过以上的分析,我们可以得到以下结论:微机在操作打印机时,控制口寄存器只有3种状态:xxx01100B(联机,不自动换行) 、xxx01000B(联机,不自动换行,正在进行初始化)及 xxx01101B(联机,不自动换行,数据选通) 。
xxx01100B(联机,不自动换行)是当主机对打印机无有效操作时采用的一种缺省状态,主要是使打印机的联机控制线处于低电平的有效状态,维持主机与打印机之间的连接状态附录:并口彩图及标准打印机口操作模式下引脚功能表中名称前有斜杠的表示低电平有效,寄存器位代表该引脚在8位寄存器中对应的位置打印口有3个端口:数据端口、状态端口和控制端口,对应的3个寄存器地址分别为(LPT1):378H、379H 和37AH其中378H 可以写,部分电脑通过配置控制寄存器的第 5位为1时可以读,部分电脑则不能读,只能写37AH 可读可写,而 379H 为只读端口对于打印口2(LPT2):数据寄存器地址0x278,状态寄存器地址0x279,控制寄存器地址0x27A在 DOS、 Windows9X 下,你可以使用_outp 和_inp 对并行口进行直接读写当然,要包含头文件 conio.h以 LPT1为例:BYTE nRead,nWrite;nRead=_inp(0x379);//读状态寄存器nWrite=0x80;_outp(0x37A,nWrite);//向控制寄存器写0x80_outp(0x378,nWrite);//向数据寄存器写0x80创建人:beauty文档创建时间: 2010-09-26 12:31:39上次修改时间:2010-10-11 12:20:06。












