并行口與串行口實(shí)時(shí)通訊
摘要 該文介紹了一種利用并行打印口與串行通訊口實(shí)施單向數(shù)據(jù)通訊的方法,該方法曾成功地實(shí)際應(yīng)用于由386微機(jī)所組成的某個(gè)工程系統(tǒng)中,取得了滿意的效果。
一、引言
一般的科學(xué)實(shí)驗(yàn)或工程應(yīng)用中,常常需將實(shí)驗(yàn)數(shù)據(jù)或產(chǎn)品數(shù)據(jù)由打印機(jī)輸出,然后再由人工(或輸入電腦)進(jìn)行分析處理。
如果將那些送往打印口的數(shù)據(jù),直接傳送給電腦,由軟件進(jìn)行分析處理,形成一個(gè)完整的數(shù)據(jù)處理系統(tǒng),將給用戶的數(shù)據(jù)處理帶來(lái)方便,更好地為生產(chǎn)科研服務(wù)。
本文敘述的是,結(jié)合油田使用的檢波器測(cè)試儀(SMT-100),解決了將那些送往打印口(熱敏打印機(jī)-富士通FTPO40UCS)的數(shù)據(jù)通過(guò)PC機(jī)串行口直接送往電腦的問(wèn)題,以及所開發(fā)的接口應(yīng)用軟件。
二、工作原理
由于SMT-100檢波器測(cè)試儀的8位數(shù)據(jù)是經(jīng)并行口送到打印機(jī)的,若欲將輸出到該并行口的數(shù)據(jù)再經(jīng)并行口送往電腦主機(jī),則需設(shè)計(jì)專用接口板(如掃描儀專用接口板)。因?yàn)殡娔X所配置的并行口均被系統(tǒng)定義成標(biāo)準(zhǔn)輸出設(shè)備,無(wú)法接收外來(lái)的并行數(shù)據(jù),但其所配置的串行口卻是標(biāo)準(zhǔn)的輸入設(shè)備[1]。將并行數(shù)據(jù)經(jīng)"并-串"轉(zhuǎn)換之后,由標(biāo)準(zhǔn)RS-232串行口送往電腦主機(jī)是可行的。特別是在工業(yè)實(shí)際應(yīng)用中,既可節(jié)省遠(yuǎn)距離并行電纜的開支,又提高了抗干擾能力,因此在傳送數(shù)據(jù)量不是很大時(shí),可以采用并行發(fā)送,串行接收的通訊方式。如圖1所示。
圖1接口連接圖(并口到串口)雙向轉(zhuǎn)換器采用工業(yè)產(chǎn)品SXP-320[2]。(略)
其主要功能參數(shù)如表1。
表1(略)
其參數(shù)設(shè)置由側(cè)面的8位DIP開頭完成:
圖2(略)
工作時(shí),只需將其波特率、數(shù)據(jù)長(zhǎng)度、停止位和奇偶校驗(yàn)等的設(shè)置與主機(jī)相匹配即可。
三、接口程序設(shè)計(jì)
利用BIOS提供的串行口例行程序傳輸,當(dāng)傳輸速度大于2400bps時(shí),有可能丟失字符[3]。為此,本系統(tǒng)采用了中斷控制方式,對(duì)串行口的接收和存儲(chǔ)實(shí)施控制,以防數(shù)據(jù)丟失。
PC機(jī)中執(zhí)行串行通訊的主芯片8250是可編程的,有10個(gè)可訪問(wèn)寄存器,其中5個(gè)根據(jù)需要,在程序開始時(shí),對(duì)它們初始化就可使用。
其端口地址與狀態(tài)字的含義如表2。
表2
PC機(jī)內(nèi)的8259A芯片,有一個(gè)中斷屏敝寄存器(IMR),可以提供8個(gè)中斷源,其中RS-232接口對(duì)應(yīng)于IRQ4,可按要求設(shè)置中斷屏蔽控制字。
當(dāng)8250發(fā)出的中斷申請(qǐng)信號(hào)(表示已準(zhǔn)備好接收數(shù)據(jù)),經(jīng)系統(tǒng)總線到達(dá)8259A中斷控制器的輸入端(IRQ4),CPU若響應(yīng)該中斷,則執(zhí)行該中斷的服務(wù)程序,進(jìn)行數(shù)據(jù)的傳送和存儲(chǔ)操作。
實(shí)用中的初始化設(shè)置如下:
mov al 2ch; 8259a初始化 mov dx,3fbh
out 21h,almov al,03h
mov dx,3fbh;8350初始化out dx,al
mov al,80hmov dx,3fch
out dx,almov al,0bh
mov dx,3f8hout dx,al
mov al,20mov dx,3f9h
out dx,almov al,01h
mov dx,3f9hout dx,al
mov al,0sti;開中斷
out dx,al
利用線狀態(tài)寄存器(端口地址3FDH),可檢測(cè)接收的數(shù)據(jù)是否有錯(cuò)。若有錯(cuò),就發(fā)出報(bào)警聲,退出中斷服務(wù)程序,以便根據(jù)情況中止數(shù)據(jù)傳送。
四、應(yīng)用程序設(shè)計(jì)
采用上述通訊方式,可以采集到外部設(shè)備發(fā)送的全部信息,欲對(duì)其做進(jìn)一步處理和存儲(chǔ),尚需根據(jù)用戶需要,開發(fā)相應(yīng)的應(yīng)用軟件。
我們將油田檢波器測(cè)試儀與主機(jī)(386)按上述方式連通,并將那些經(jīng)串行口接收到的全部信息,經(jīng)過(guò)應(yīng)用軟件分析、處理,生成磁盤數(shù)據(jù)文件[4],為用戶項(xiàng)目的深入研究提供原始資料[5]。
檢測(cè)一個(gè)元件的處理過(guò)程如下:
(1)在主程序中為串行口存儲(chǔ)數(shù)據(jù),建立一個(gè)先進(jìn)先出的字符緩沖區(qū)circle-buffer,動(dòng)態(tài)申請(qǐng)64K內(nèi)存,可接收相當(dāng)于2000個(gè)元件的全部信息。
(2)在主程序中開辟一個(gè)能存放單個(gè)元件處理結(jié)果的小緩沖區(qū)(如30字節(jié))readbuffer。
(3)BX基指針指向circle buffer緩沖區(qū),順序掃描,每次處理一個(gè)元件所接收的信息量,利用堆棧技術(shù),將一個(gè)元件各參數(shù)間分隔符(如"=")地址壓入堆棧。然后逐一彈出,按輸出文本格式進(jìn)行處理,并將處理結(jié)果存入readbuffer。
(4)將readbuffer的內(nèi)容經(jīng)磁盤文件管理功能調(diào)用,寫入數(shù)據(jù)文件。一次一個(gè)記錄,如此重復(fù)(3)和(4),直到circle-buffer的內(nèi)容為空。
(5)工作過(guò)程中,通過(guò)ESC功能鍵可隨時(shí)中止串行口通訊工作。
五、結(jié)束語(yǔ)
在調(diào)試過(guò)程中,經(jīng)對(duì)500個(gè)元件進(jìn)行測(cè)試、傳送、接收和處理,都取得了令人滿意的結(jié)果。本項(xiàng)目已交西安石油勘探儀器廠檢波器分廠使用,系統(tǒng)實(shí)時(shí)方便,可靠性高,實(shí)用性強(qiáng)。
參考文獻(xiàn)
1 王士元,吳芝芳.IBM PC/XT接口技術(shù)及其應(yīng)用.天津:南開大學(xué)出版社,1990年
2 TWO WAY CONVERTER/BUFFER SXP-320 User's Manual .copyright 1990 ATEN International Co., LTD
3 沈美明,溫冬嬋.IBM-PC匯編語(yǔ)言程序設(shè)計(jì).北京:清華大學(xué)出版社,1991年
4 趙文忠等.微型機(jī)外圍接口與通道.西安交通大學(xué)出版社,1991年
5 地震檢波器原理.西安石油儀器廠,1986年