1. 程式人生 > 實用技巧 >PC機並口和並口印表機

PC機並口和並口印表機

FORM:https://blog.csdn.net/broadview2006/article/details/3975094

C並口的暫存器

本文摘自王洪輝老師的《嵌入式系統Linux核心開發實戰指南(ARM平臺)》一書

PC上的程式通過訪問並口的I/O埠暫存器來訪問、控制並口的管腳訊號,這些埠包括資料埠、狀態埠和控制埠,其中每個埠都有自己的埠號,相當於它們的地址。程式通過埠號來訪問埠暫存器。
PC並口1的資料埠號為3BCH,狀態埠號為3BDH,控制埠號為3BEH;
PC並口2的資料埠號為378H,狀態埠號為379H,控制埠號為37AH;
PC並口3的資料埠號為278H,狀態埠號為279H,控制埠號為37AH;

1)資料暫存器
資料暫存器(D0~D7)也叫資料埠,它儲存了寫到資料埠管腳的一位元組資料。資料埠可以寫入資料(輸出),也可以讀出資料(輸入)。寫入的資料是從資料埠管腳輸出的資料,讀出來的資料是我們上次寫入資料埠的資料或者原來保留在裡面的資料,並不是從埠管腳輸入PC的資料。資料埠對應的管腳是PIN2~PIN9,資料暫存器定義如表10-2所示。

2)狀態暫存器
狀態暫存器(S0~S7)又叫狀態埠,它儲存的是5個輸入(S3~S7)管腳的邏輯狀態,S0~S2位不與管腳對應。除了S0以外,狀態暫存器是隻讀的,讀出資料資訊是狀態埠管腳上的邏輯狀態。S0是支援EPP傳輸並口的超時標誌資訊,可以用軟體方法清零。在許多並口中,狀態輸入接有上拉電阻。狀態埠對應的管腳是Pin10~Pin13、Pin15。狀態暫存器定義如表10-3所示。

3)控制暫存器
控制暫存器(C0~C8)又叫控制埠,它儲存了C0~C3的4位的控制資訊,C4~C7不與管腳對應,這些位一般被用來輸出;但在大多數SPP並口中,控制位為集電極開路/漏極開路模式,也就是說,它們同樣可以用作輸入。要從控制位上讀取外部邏輯訊號,首先將相應的輸出寫入“1”,然後讀取控制暫存器的值即可。但是,為了提高交換速度,大多數支援EPP和ECP模式的並口,控制位工作在不能用作輸入的推拉模式下。在一些多模式介面中,控制位採用的是改進型的推拉模式,可以用作輸入。控制埠對應的管腳是Pin1、Pin14、Pin16和Pin17。控制暫存器定義如表10-4所示。

FROM:https://blog.csdn.net/impossible1224/article/details/80818241

一,管腳定義

管腳序號管腳定義方向
1,C0/STROBE ,資料選通,低電平有效Output
2~9,D0~7DATA0~7,資料通道0~7雙向
10,S6/ACK,確認,低電平有效Input
11,S7BUSY,表示印表機不能接收新的資料Input
12,S5Paper End,表示沒有列印紙Input
13,S4Select,高電平表示聯機,低電平表示離線Input
14,C1/AutoReed ,自動換行Output
15,S3/ERROR,表示印表機出錯、缺紙或者離線狀態Input
16,C2/Initialize,初始化,低電平有效Output
17,C3Select In,低電平有效,表示資料可輸入印表機Output
18~25,G0~7GND,地Ground

二、基本的SPP 模式的時序

三、暫存器

暫存器地址暫存器
0x378SPP資料暫存器,DATA0~7的輸入輸出,依次對應管腳(9、8、7、6、5、4、3、2)
0x379SPP狀態暫存器,輸入,依次對應管腳(11、10、12、13、15、x、x、x)
0x37ASPP控制暫存器,輸出,依次對應管腳(x、x、x、並口中斷允許位、17、16、14、1)
0x37BEPP地址暫存器(一般不用),可讀可寫
0x37CEPP擴充套件資料暫存器(一般不用),可讀可寫

也就是說PC的0x378可以用來做輸入和輸出,0x37A的低4位可以用來輸出,0x379是輸入。這樣就可以用並口模擬很多介面時序,比如I2C、SMI、JTAG、SPI等,也可以用來當做開關控制其他裝置。這個時候不用管第一節中的Centronics印表機標準介面的那些訊號定義,只用處理輸入輸出D0~7,輸出C0~3,輸入S3~7即可。

注:現在市面上很多PC已經沒有並口了,需要購買PCIe轉並口的轉接卡,這時並口的基地址不再是0x378,而可能是0xD050或者0xE050等,此時只需暫存器地址修改即可。

四、硬體介面

並行介面輸出的是TTL標準的邏輯電平,輸入訊號也要符合TTL標準。這種特性可以使介面容易應用在電子設計中。大部分的PC並行介面能吸收和輸出12mA左右的電流,如應用時小於或大於這個值,應使用緩衝電路。
為了保持與早期的Centronics 介面相容,使用OC(open collector)驅動器,使用上拉電阻(pull-up resistor)標準電阻值為2.2k歐或4.7k歐。控制線與狀態線僅要求上拉電阻Rp,資料線和Strobe線還要求串聯電阻Rs來匹配線路阻抗,調整串聯電阻值使其與驅動器的輸出阻抗之和等於45歐到55歐的線路阻抗。比如驅動IC輸出阻抗為15歐,則需要33歐的串聯電阻。

五、並口程式設計

一般利用現成的inpout32.dll或者WinIo.dll動態連結庫來做。

FROM:重慶郵電學報 程方