摘要:本文結(jié)合光電計(jì)時(shí)儀實(shí)例,介紹了PC104串口通信原理及其在工程中的實(shí)踐應(yīng)用。本文同時(shí)提出了一種簡(jiǎn)單、有效的串口通信方式,并簡(jiǎn)要說(shuō)明了相關(guān)的通信軟件的設(shè)計(jì)。
關(guān)鍵詞:PC104 ; 串口通信;光電計(jì)時(shí)儀 SOC
引言:
目前最為先進(jìn)的嵌入式工業(yè)計(jì)算機(jī)PCl04,以其優(yōu)良的品質(zhì)、高可靠性及模塊化的特點(diǎn),而被廣泛應(yīng)用于工業(yè)控制、航空航天、軍事、醫(yī)療、智能儀器儀表等領(lǐng)域。PC104中的MSM486SV模塊是一個(gè)基于PC/104而成的高可靠性、高集成度的ALL-IN-ONE CPU模塊;它在PC/104的標(biāo)準(zhǔn)尺寸上集成了計(jì)算機(jī)的所有功能(包括SVGA和LCD接口);板上除了包含標(biāo)準(zhǔn)PC的一般接口,還為適應(yīng)嵌入式的應(yīng)用,而對(duì)MSM486SV單板進(jìn)行一系列附加特性設(shè)計(jì),使得板上功能更為完善。
光電計(jì)時(shí)儀是我們研制的一種適用于惡劣環(huán)境下測(cè)量某一時(shí)刻及測(cè)量時(shí)間間隔的專用設(shè)備,由于PC104中的MSM486SV模塊的優(yōu)越性能,我們選用其作為光電計(jì)時(shí)儀的控制計(jì)算機(jī)。在實(shí)際運(yùn)行中為實(shí)現(xiàn)上位PC機(jī)與PC104之間進(jìn)行數(shù)據(jù)交換,我們采用串行通信的通信方式。串行通信具有使用方便、傳輸可靠、信號(hào)線數(shù)量少等優(yōu)點(diǎn),因而它在傳輸數(shù)據(jù)量不大、要求速度不高而傳輸距離較遠(yuǎn)的通信場(chǎng)合得到廣泛的應(yīng)用。本文結(jié)合光電計(jì)時(shí)儀實(shí)例,介紹了PC104串口通信在工程中的應(yīng)用。
1. 串口通信的基本原理
串行端口的基本功能是實(shí)現(xiàn)CPU和串行設(shè)備間的編碼轉(zhuǎn)換,當(dāng)數(shù)據(jù)從CPU經(jīng)過(guò)串行端口發(fā)送出去時(shí),字節(jié)數(shù)據(jù)轉(zhuǎn)換為串行的位;在接收數(shù)據(jù)時(shí),串行的位被轉(zhuǎn)換為字節(jié)數(shù)據(jù)。PC系列及其兼容機(jī)為了實(shí)現(xiàn)串行通訊,都配置了一個(gè)大規(guī)模集成通訊組件————-通用異步接收發(fā)送器(簡(jiǎn)稱UART);UART 有一系列的內(nèi)部寄存器,通過(guò)這些內(nèi)部寄存器操作來(lái)實(shí)現(xiàn)通訊功能。
對(duì)于可編程的異步串行通信芯片UART,我們可根據(jù)協(xié)議的要求對(duì)其進(jìn)行初始化。初始化后,當(dāng)要發(fā)送一個(gè)數(shù)據(jù)字符時(shí),如果UART發(fā)送保持寄存器為空,可用CPU的輸入輸出指令把該數(shù)據(jù)輸出到UART的發(fā)送保持寄存器。UART按初始化時(shí)設(shè)置的要求,把相應(yīng)的起始位,奇偶位和停止位加到來(lái)自CPU的8位數(shù)據(jù)上,然后按設(shè)置的波特率把這個(gè)二進(jìn)制位串發(fā)送到串行通信線上;同樣UART能自動(dòng)從通信線上接收串行數(shù)據(jù),并取出有效的數(shù)據(jù)位,然后轉(zhuǎn)換成數(shù)據(jù)字符存入接收數(shù)據(jù)寄存器。
2. 利用串口實(shí)現(xiàn)遠(yuǎn)程控制
在儀表、工控領(lǐng)域,采用嵌入式PC是自動(dòng)化設(shè)備和測(cè)量裝置開(kāi)發(fā)的一個(gè)方向。嵌入式PC裝置安裝在設(shè)備中,一般安裝很少的外設(shè)甚至不需安裝鍵盤(pán)、顯示器、軟驅(qū)等外設(shè);當(dāng)需要更新、交換其中的應(yīng)用程序和數(shù)據(jù)文件時(shí),常規(guī)方法是將嵌入式PC從設(shè)備上拆下來(lái),再利用外掛鍵盤(pán)、顯示器和軟驅(qū)來(lái)進(jìn)行文件管理,實(shí)際操作起來(lái)十分不便。注意到嵌入式PC上一般帶有串口、并口和USB口等通訊接口,我們可以利用上述通訊接口外接一臺(tái)普通的PC機(jī),采用客戶機(jī)/服務(wù)器模式和仿真終端來(lái)進(jìn)行嵌入式PC裝置的文件更新和管理?;谶@種想法,本文論述了在某型光電計(jì)時(shí)儀的設(shè)計(jì)中利用串口來(lái)實(shí)現(xiàn)遠(yuǎn)程連接/調(diào)試功能的兩種方法,一種是將PC機(jī)的外設(shè)定向?yàn)榍度胧絇C104的外設(shè),另一種是將嵌入式PC104的物理驅(qū)動(dòng)器鏡像為PC機(jī)的驅(qū)動(dòng)器,具體方法如下:
方法1:仿真終端模式
MSM486SV模塊在系統(tǒng)BIOS中特別安裝了512K 的“遠(yuǎn)程連接/調(diào)試”擴(kuò)展。我們可以重新定向"顯示""鍵盤(pán)""硬盤(pán)"或"軟驅(qū)"。這樣,當(dāng)我們將MSM486SV通過(guò)串行口與一臺(tái)計(jì)算機(jī)(HOST)相連后(如圖1),即使MSM486SV上沒(méi)有連接任何外設(shè),我們?nèi)匀豢梢詫?duì)MSM486SV進(jìn)行操作。首先我們?cè)贖OST上運(yùn)行"REMHOST.EXE"實(shí)用程序,然后我們對(duì)指定的"HOST"的外設(shè)重新定向,這樣"HOST"上的"鍵盤(pán)""顯示器"或"軟驅(qū)"就變成了MSM486SV的外設(shè),接下來(lái),我們就可以對(duì)MSM486SV進(jìn)行調(diào)試或程序更新了。這一點(diǎn)對(duì)那些“黑”模式的現(xiàn)場(chǎng)嵌入式應(yīng)用有特殊意義——————我們只要一臺(tái)“筆記本"作為HOST即可。

方法2:驅(qū)動(dòng)器鏡像模式
應(yīng)用DOS6.22的intersever功能來(lái)實(shí)現(xiàn)遠(yuǎn)程連接/調(diào)試。 PC104作為服務(wù)器,PC機(jī)作為客戶端。
步驟如下:
1. 將PC104通過(guò)串行口與PC機(jī)相連(如圖1);
2. 兩臺(tái)計(jì)算機(jī)均在DOS同一版本下啟動(dòng);
3.在服務(wù)器端:在AutoExec中啟動(dòng)intersve.exe;
4. 在客戶端:?jiǎn)?dòng)interlink.exe;
5. 如果聯(lián)機(jī)正確,Dos操作系統(tǒng)自動(dòng)將sever(服務(wù)器)中的物理驅(qū)動(dòng)器鏡像到客戶端,比如服務(wù)器中的C盤(pán),被映射到客戶端的G盤(pán),這時(shí)在客戶端操作G盤(pán)就是對(duì)服務(wù)器的C盤(pán)進(jìn)行操作。
在應(yīng)用中,PC104如果沒(méi)有任何外設(shè),但卻需要現(xiàn)場(chǎng)操作調(diào)試,方法1無(wú)疑是最佳選擇。
在我們研制的光電計(jì)時(shí)儀中,PC104接有矩陣鍵盤(pán)和顯示屏,沒(méi)有安裝軟驅(qū)。平時(shí)PC104單獨(dú)進(jìn)行工作控制,當(dāng)我們需要改寫(xiě)模擬電子硬盤(pán)上用戶程序時(shí),我們可以利用串口來(lái)實(shí)現(xiàn)。在此情況下,上述兩種方法都可以使用。但第二種方法就相對(duì)簡(jiǎn)單一些,它不用設(shè)置BIOS和裝載REMHOST.EXE,只需要一張DOS最小系統(tǒng)的啟動(dòng)盤(pán)即可。
3.利用串口傳送文件
光電計(jì)時(shí)儀在完成測(cè)量工作后,需要及時(shí)地將測(cè)量結(jié)果上傳到上位機(jī),以便進(jìn)行實(shí)時(shí)處理和判斷。在測(cè)量文件比較?。?K左右)、傳輸距離短的情況下,串口通信是最佳的傳輸方式,我們?cè)跍y(cè)量程序中設(shè)計(jì)了一種簡(jiǎn)單的文件發(fā)送程序來(lái)實(shí)現(xiàn)這種功能。我們將主控室的計(jì)算機(jī)作為上位機(jī)接收文件,將系統(tǒng)的PC104計(jì)算機(jī)作為下位機(jī)發(fā)送文件,采用雙向通信方式;串行通訊的波特率為4800BPS、8位數(shù)據(jù)位、1個(gè)停止位,采用奇校驗(yàn)的方法。
3.1 下位機(jī)(PC104)文件發(fā)送的軟件程序設(shè)計(jì)
軟件程序設(shè)計(jì)采用C語(yǔ)言,運(yùn)行環(huán)境為DOS6.22平臺(tái)系統(tǒng),它的可讀性好,并且能夠方便可行的移植到其他平臺(tái)。
在DOS系統(tǒng)下有好多種的串口編程方法,結(jié)合實(shí)際,我們采用直接讀寫(xiě)UART內(nèi)部寄存器的方法,通過(guò)使用C語(yǔ)言提供的基本輸入輸出函數(shù)inportb (),outportb ()實(shí)現(xiàn)了PC104模塊的異步串行通信。對(duì)于串口連接,我們采用了最簡(jiǎn)單的三線制連法。對(duì)于無(wú)硬件握手信號(hào)的處理,我們采用了一種比較簡(jiǎn)單的方法進(jìn)行軟件握手,即在發(fā)送一組數(shù)據(jù)字符前,先發(fā)送一個(gè)聯(lián)絡(luò)信號(hào)(約定字符),然后等待對(duì)方的應(yīng)答信號(hào),在收到對(duì)方的應(yīng)答信號(hào)后,就認(rèn)為對(duì)方在最近一段時(shí)間內(nèi)是準(zhǔn)備好的;在此之后的發(fā)送就總是認(rèn)為對(duì)方是準(zhǔn)備好的。這種方法簡(jiǎn)單可行,缺點(diǎn)是波特率不能設(shè)置過(guò)高:因?yàn)楸仨毚_保對(duì)方能及時(shí)的處理掉發(fā)送出去的字符。但是對(duì)我們只有1K左右文件的傳輸,即使在波特率為4800時(shí),也不會(huì)耗時(shí)很長(zhǎng)。程序流程如圖2所示。

3.2 上位機(jī)(PC機(jī))接收的軟件程序設(shè)計(jì)
上位PC機(jī)工作在Windows下,我們采用Visual C++6.0語(yǔ)言編程。在Windows下用Visual C++ 6.0開(kāi)發(fā)串行通信程序時(shí)主要有兩種方法:① 利用Visual C++ 6.0提供的MSComm控件來(lái)編程;② 利用專門(mén)的Windows的SDK提供的API函數(shù)來(lái)編程。利用MSComm控件實(shí)現(xiàn)串口通信的編程方法原理上比較簡(jiǎn)單,容易實(shí)現(xiàn),但編程的靈活性較差,傳輸速率受到限制;利用API函數(shù)實(shí)現(xiàn)串口通信的編程方法功能強(qiáng)大,靈活性好,但原理比較復(fù)雜,需要編程人員對(duì)硬件的工作原理有深入的了解。實(shí)際應(yīng)用時(shí)為了滿足大容量數(shù)據(jù)傳輸?shù)男枰约霸黾酉到y(tǒng)的靈活性,我們采用第二種方法。程序流程圖如圖3所示。
在32位的Windows系統(tǒng)中,串口和其他通信設(shè)備是作為文件處理的。串口的打開(kāi)、關(guān)閉,讀取和寫(xiě)入所用的函數(shù)與操作文件的函數(shù)完全一致。這方面的文獻(xiàn)和教材很多,在這里我們就不再敘述。
4 串口的硬件設(shè)計(jì)
目前較為常用的串口有9針串口(DB9)和25針串口(DB25),當(dāng)通信距離較近時(shí)(<12m),適合采用電纜線直接連接標(biāo)準(zhǔn)RS232端口。若距離較遠(yuǎn),則需附加調(diào)制解調(diào)器(MODEM)。最為簡(jiǎn)單且常用的是采用3線制RXD、TXD、GND軟握手的零MODEM 方式,即將PC機(jī)和PC104的發(fā)送數(shù)據(jù)線TXD與接收數(shù)據(jù)RXD交叉連接,二者的地線GND直接相連(如圖4所示),采用軟件握手方式 ,其它信號(hào)線(如握手信號(hào)線)均不使用。這樣既可以實(shí)現(xiàn)預(yù)定的任務(wù),又可以簡(jiǎn)化電路設(shè)計(jì)、節(jié)約成本。
結(jié)束語(yǔ):本文較全面介紹了PC104的串口通信原理在光電計(jì)時(shí)儀中的應(yīng)用,主要闡述了利用串口進(jìn)行文件發(fā)送的程序設(shè)計(jì)的方法。光電計(jì)時(shí)儀的運(yùn)行實(shí)踐證明了利用串口改寫(xiě)模擬電子盤(pán)上的用戶程序的方法方便可行;同時(shí)表明用本文中提及的串口程序來(lái)傳送文件方法簡(jiǎn)單、效果穩(wěn)定。這種方法也可以廣泛應(yīng)用在其它傳輸文件小、波特率要求不高的場(chǎng)合。