转:并口编程参考资料
并行接口的分類: SPP(標(biāo)準(zhǔn)并行接口) ,EPP(增強(qiáng)型并行接口),ECP(擴(kuò)展型并行端口)
標(biāo)準(zhǔn)并行端口(SPP)也是最早的端口定義,主要功能如下,1:并行端口提供了8個(gè)數(shù)據(jù)線以進(jìn)行并行的字節(jié)傳輸,2:計(jì)算機(jī)能夠通過(guò)數(shù)據(jù)線向打印機(jī)發(fā)送選能信號(hào),以通知打印機(jī)已經(jīng)準(zhǔn)備好接收數(shù)據(jù),3:打印機(jī)招收到數(shù)據(jù)后,向計(jì)算機(jī)發(fā)送一個(gè)回應(yīng)信號(hào)(NACK)。其各位信號(hào)線所代表的意義詳見(jiàn)下表。
增強(qiáng)型并行端口(EPP)的出現(xiàn)提供了一種更高性能的連接方式,并東路向下兼容所有在此之前存在的并行接口及外設(shè)。與SPP不同之處在于原來(lái)17個(gè)信號(hào)中的重新定義,在這17個(gè)信號(hào)中,EPP使用了其中的14個(gè)信號(hào)進(jìn)行傳輸,握手和選通,剩下的3個(gè)信號(hào)可以由外設(shè)設(shè)計(jì)者有來(lái)自定義。
? 并行接口的大致結(jié)構(gòu):
????? 并行口一般有25個(gè)引腳,其中包括8位數(shù)據(jù)線,5位打印機(jī)狀態(tài)線,4位控制線.下面將對(duì)這些引腳予以詳細(xì)說(shuō)明:
? (注:1:>出,表示由計(jì)算機(jī)發(fā)向打印機(jī);入,表示由打印機(jī)發(fā)向計(jì)算機(jī),
????? 2:>低電平有效信號(hào)用上劃線或星號(hào)表示(如S7*),高電平有效信號(hào)則沒(méi)有上劃線或星號(hào))
??????
| 引腳號(hào)
| 名稱
| 數(shù)據(jù)位 | 寄存器 | 數(shù)據(jù)方向
| 定義
|
| 1 | /STROBE | C0* | 出 | 選通信號(hào),低電平有效信號(hào),表明線上有數(shù)據(jù)到達(dá). | |
| 2 | D0 | DATA_1-DATA_8
? | D1-D8 | 出 | ?
?
? 八位數(shù)據(jù)線,只有在SPP指令下才有能輸出數(shù)據(jù). ?
?
?
?
|
| 3 | D1 | 出
| |||
| 4 | D2 | 出 | |||
| 5 | D3 | 出 | |||
| 6 | D4 | 出 | |||
| 7 | D5 | 出 | |||
| 8 | D6 | 出 | |||
| 9 | D7 | 出 | ?
| ||
| 10 | /ACK | S6 | Status | 入 | 應(yīng)答,以插入低電平的形式出現(xiàn),表明最后一個(gè)字符已招收完畢。 |
| 11 | BUSY | S7* | Status | 入 | 繁忙通知,以插入高電平的方式出現(xiàn),表明打印機(jī)處于忙狀態(tài)不能再接收數(shù)據(jù)。 |
| 12 | PE | S5 | Status | 入 | 沒(méi)有打印機(jī)紙。 |
| 13 | SELECT | S4 | Status | 入 | 選擇輸入,以插入高電平的方式出現(xiàn),表明打印機(jī)處于在線待命狀態(tài)。 |
| 14 | AUTO FEED | C1* | Control | 出 | 自動(dòng)饋送,低電平有效信號(hào)民,通知打印機(jī)對(duì)于每遇到一個(gè)回車進(jìn)行自動(dòng)換行。 |
| 15 | /ERROR | S3 | Status | 入 | 錯(cuò)誤,該信號(hào)由打印機(jī)發(fā)向計(jì)算機(jī),表明打印機(jī)處于錯(cuò)誤狀態(tài)。 |
| 16 | /INIT | C2 | Control | 出 | 初始化,低電平有效信號(hào),該信號(hào)用來(lái)對(duì)打印機(jī)進(jìn)行復(fù)位。 |
| 17 | /SELIN | C3* | Control | 出 | 選擇輸入,低電平有效信號(hào),表明已經(jīng)選中的打印機(jī)。 |
| 18 | GND | --- | 信號(hào)接地 | ||
| 19 | GND | --- | 信號(hào)接地 | ||
| 20 | GND | --- | 信號(hào)接地 | ||
| 21 | GND | --- | 信號(hào)接地 | ||
| 22 | GND | --- | 信號(hào)接地 | ||
| 23 | GND | --- | 信號(hào)接地 | ||
| 24 | GND | --- | 信號(hào)接地 | ||
| 25 | GND | --- | 信號(hào)接地 |
??? 打印機(jī)常用端口: 對(duì)于LPT1:0X378 為數(shù)據(jù)發(fā)送地址,0X379為打印機(jī)狀態(tài)地址,0X37A為計(jì)算機(jī)向打印機(jī)控制地址, 通常為了使程序具有通用性我們可以從注冊(cè)表中取得這個(gè)地址,對(duì)于WINDOWS CE 而言,這個(gè)值被存儲(chǔ)在{HKEY_LOCAL_MACHINE//DRIVERS//BUILTIN//PARALLEL//IOBASE}.然后我們就可以通過(guò)對(duì)此三個(gè)端口進(jìn)行控制達(dá)到簡(jiǎn)單的并口編程的目的.
下面是對(duì)打印機(jī)狀態(tài)端口及打印機(jī)控制端口作一詳細(xì)解釋:
控制端口:
| 0x37A | 1 | 1 | 輸入控制 | 中斷 | 17線 | 16 線 | 14 線 | 1? 線 |
這個(gè)0x37A計(jì)算機(jī)控制打印機(jī)的地址,可以產(chǎn)生對(duì)打印機(jī)進(jìn)行控制的必要信號(hào),可寫(xiě),兩高位(7和8)沒(méi)什么用,第6位寫(xiě)1表示可以向并口輸出數(shù)據(jù)。第五位中斷信號(hào)(IRQ EN),利用此信號(hào)線,驅(qū)動(dòng)程序可以在STATUS端口信號(hào)(nAck)的幫助下,使用該信號(hào)對(duì)中斷信號(hào)的產(chǎn)生與否進(jìn)行控制。第3,2,1,0位分別控制第17線,第16線,第14線和第1線。(可以控制它們的狀態(tài))具體作用可參見(jiàn)前表
狀態(tài)端口:
| 0x379 | (S7)11 忙 | (S6)10應(yīng)答 | (S5)12缺紙 | (S4)13聯(lián)機(jī) | (S3)15 錯(cuò)誤 | ? S2 | S1?
| S0?
|
?
0x379為打印機(jī)狀態(tài)地址,可讀,通過(guò)個(gè)端口打印機(jī)適配器可以很方便的讀取打印機(jī)的狀態(tài)。
標(biāo)記為S7的信號(hào)表示最高位,SO表示為最低位,只有S3-S7五個(gè)信號(hào)才是真正有用的信號(hào)。他們的具體信號(hào)功能解釋如下:
S7*(busy):打印機(jī)使用該信號(hào)表示打印機(jī)正處于忙狀態(tài),不能再接收數(shù)據(jù)。需要強(qiáng)調(diào)的是,該信號(hào)通過(guò)適配器板時(shí),進(jìn)行了反相處理,因此連接器上的低電平到微處理器時(shí)就變成了高電平。
S6(nAck):當(dāng)適配器發(fā)出選通信號(hào)時(shí),打印機(jī)就會(huì)產(chǎn)生該信號(hào)作為響應(yīng)。通常情況下,該信號(hào)是高電平,選通打印機(jī)之后,打印機(jī)首先把該信號(hào)設(shè)為低電平,然后再返回高電平。
S5(PE):當(dāng)打印機(jī)缺紙時(shí),它就會(huì)產(chǎn)生一個(gè)這樣的信號(hào),通常情況下,該信號(hào)由打印機(jī)保持為低電平,打印機(jī)紙使用完之后,該信號(hào)就會(huì)變成高電平。
S4(SELECT):當(dāng)打印機(jī)恢復(fù)正常操作時(shí),它就會(huì)插入一個(gè)高電平的該信號(hào)。當(dāng)打印機(jī)處于無(wú)效狀態(tài)時(shí),訪信號(hào)就會(huì)變成低電平。
S3(NERROR):當(dāng)打印機(jī)出現(xiàn)錯(cuò)誤時(shí)就會(huì)產(chǎn)生這種郵錯(cuò)信號(hào)。產(chǎn)生出錯(cuò)的原因很多,如打印紙堵了或產(chǎn)生了內(nèi)部錯(cuò)誤。產(chǎn)生錯(cuò)誤時(shí)該信號(hào)就會(huì)設(shè)置成低電平。
以下為在Windows CE 下打印機(jī)各種狀態(tài)時(shí),所對(duì)應(yīng)的狀態(tài)寄存器的(AL)的值:
1:>在沒(méi)接入打印機(jī)時(shí)寄存器AL值為127,對(duì)應(yīng)二進(jìn)制是:1111111
2:>打印機(jī)在缺紙燈不亮?xí)r寄存器AL值為144,對(duì)應(yīng)二進(jìn)制是:10010000
3:>打印機(jī)在缺紙燈亮?xí)r寄存器AL值為 119;對(duì)應(yīng)二進(jìn)制值是:11101111
4:>打印機(jī)在不缺紙的情況下寄存器AL值 223,對(duì)應(yīng)二進(jìn)制值是:11011111
5:>打印機(jī)在沒(méi)開(kāi)機(jī)的情況下得到AH值為207,對(duì)應(yīng)二進(jìn)制值是:11001111
下面介紹對(duì)并口的編程控制:
(編程控制示例)(為匯編代碼)
// 此段代碼為并口向打印機(jī)進(jìn)行寫(xiě)數(shù)據(jù),并發(fā)送控制信息。
#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
}
// 此段代碼為讀取打印機(jī)當(dāng)前狀態(tài)。
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
總結(jié)
以上是生活随笔為你收集整理的转:并口编程参考资料的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 运营商认证是什么东西
- 下一篇: 3月第3周新闻回顾:3Com案三日动荡