PC机标准并行接口的原理和应用(下篇)
作者:温正伟 原载:无线电杂志
|
状态寄存器: 状态寄存器占用的地址是基地址加一,与接口的10,11,12,13,15针相连,这个寄存器是只读寄存器,在用于打印机驱动时用来取得打印机的当前状态,如出错、选中、缺纸等等。该寄存器中包含一个IRQ中断寄存器(由Ack相反后形成),当有中断发生这个数据位为"0"。在读入数据时要注意的是Bit7(引脚11)在输入+5VTTL电平时,数据值为"0",有反转的特性。
地址
|
I/O
|
数据位
|
引脚
|
SPP信号
|
数据位为1时引脚电平状态
|
基地址+1 |
输入 |
Bit0 |
/ |
保留 |
/ |
Bit1 |
/ |
保留 |
/ |
Bit2 |
/ |
IRQ (Not) |
/ |
Bit3 |
15 |
Error |
H |
Bit4 |
13 |
Select In |
H |
Bit5 |
12 |
Paper Out |
H |
Bit6 |
10 |
Ack |
H |
Bit7 |
11 |
Busy |
L |
表4 状态寄存器的相关参数
控制寄存器 控制寄存器占用的地址是基地址加二,与接口的1,14,16,17针相连,寄存器可读写。其中Bit0,Bit1,Bit3有反转的特性。通常用于打印机控制时,这个端口只用发送控制数据,如初始化机印机、自动换行等。这个端口还有高阻特性,在应用时可以根据要求加电阻,以使电平足够高或足够低。Bit4为IRQ应用,当向Bit4写入"1"时,将使ACK(引脚10)信号反相后成为中断请求IRQ信号,通常为IRQ5或IRQ7。在本文中的实例里,用到LPT16,17引脚去控制IC1和IC2的控制端,无论是使用那一个寄存器在程序的编写过程中一定要注意引脚电平和数据位的相互关系,否则就得不到想要的电平或数据。
地址
|
I/O
|
数据位
|
引脚
|
SPP信号
|
数据位为1时引脚电平状态
|
基地址+2 |
输入/输出 |
Bit0 |
1 |
Strobe |
L |
Bit1 |
14 |
Auto Linefeed |
L |
Bit2 |
16 |
Initialize Printer (Reset) |
H |
Bit3 |
17 |
Select Printer |
L |
Bit4 |
/ |
Enable IRQ Via Ack Line |
/ |
Bit5 |
/ |
Enable bi-directional Port |
/ |
Bit6 |
/ |
/ |
/ |
Bit7 |
/ |
/ |
/ |
表5 控制寄存器的相关参数
握手信号: 使用标准PC并行接口的打印机会用到Centronics标准的握手信号。时序图见图十。首先数据加到数据寄存器,然后检查Busy(引脚11)是否为高,为高打印机处在以下状态之一:正在输入数据、正在打印操作、打印机出错、处在脱机状态,这时打印机不接收数据,Busy为低时,nStrobe(引脚1)输出一最小宽度大于1us的负脉冲,打印机随后接收数据并使Busy变为高,打印机接收完一个字节后回送给并行接口nAck(引脚10)一个宽度大于5us的响应负脉冲,这个信号可以被并行接口硬件反相之后作为IRQ中断信号或做为查询的状态信号,由于该信号的负脉冲较短,一般不会查询它,而是查询Busy。打印机状态回复,准备接收下一个字节。在应用标准并行接口的外部设备中并不一定就会用到这种握手信号,通常它们都有自己相应的握手信号,在我们自己的制作中也可以制定相应的握手信号,在本文的实例中就没有必要用到握手信号。所谓的握手就是PC向设备查询设备的工作状态,PC再根据返回的信号做相应的操作。
 |
图10:握手信号时序 |
现在的板载的并行接口都会支持EPP和ECP模式,由于硬件上数据端口是支持双向传输的,所以在SPP模式下也可在数据端口中输入数据。如果你用的是旧式的并行接口功能卡或你不想用数据端口输入数据,而又要用并行接口采集8Bit的数据时,还可以用以下的两种方法。一种是用控制端口和状态端口的输入功能组成8Bit的数据输入,但要注意输入电平和所对应的数据位的相互关系,可以用软件进行调整控制。另一种方式只用到状态端口做输入,因一次只能读取4Bit也就是半个字节,故又称Nibble Mode。具体电路图请参看图十一。电路中用nStrobe控制74HC157(或74LS157)当前是读取前半个字节还是后半个字节,读取后只要把前后半个字节合并就可。
 |
图11:握手信号时序 |
|