摘要:為實(shí)現(xiàn)C8051F320與多串口通信,利用GM8123進(jìn)行串口擴(kuò)展,使其與PC機(jī)、單片機(jī)及GPS實(shí)時(shí)通訊,達(dá)到C8051F320的核心作用,控制傳感探頭數(shù)據(jù)的收集時(shí)間、上傳時(shí)間,文中詳細(xì)給出串口擴(kuò)展部分的硬件設(shè)計(jì)、軟件設(shè)計(jì)及實(shí)驗(yàn)結(jié)果。
關(guān)鍵詞:標(biāo)準(zhǔn)串口;GM8123;GPS
RS232C串行通信在控制領(lǐng)域里應(yīng)用很廣,但在實(shí)際系統(tǒng)中又因所控制的對(duì)象,解決的問題不同而各具特點(diǎn)。文中涉及:傳輸距離約100米,所傳數(shù)據(jù)量較大的PC機(jī)和單片機(jī)的通信、單片機(jī)之間的通信,以及單片機(jī)與GPS間的通信。
1硬件設(shè)計(jì)
系統(tǒng)中選擇串口通信,是由于雖然SMBUS、SPI、USB口為現(xiàn)在設(shè)計(jì)的主流,但它們能維持的傳輸距離很短,從探頭到終端都不過幾米,這對(duì)于下深井不能達(dá)到要求,所以我們還是用了較為傳統(tǒng)的標(biāo)準(zhǔn)232串口,它經(jīng)過系統(tǒng)隔離大概能達(dá)到100米左右的傳輸距離,比較符合工程上的實(shí)際需要。而C8051F320[1]只有一個(gè)串口,需要與PC機(jī)、子系統(tǒng)及GPS同時(shí)通信,就必須利用GM8123的一轉(zhuǎn)三擴(kuò)展串口功能來完成。電路如圖1所示。
GM8123可以將一個(gè)全雙工的標(biāo)準(zhǔn)串口擴(kuò)展成3個(gè)串口,并能通過外部引腳控制串口擴(kuò)展模式:單通道工作模式和多通道工作模式,即可以指定一個(gè)子串口和母串口以相同的波特率單一工作,也可以讓所有子串口在母串口波特率基礎(chǔ)上分頻同時(shí)工作。該芯片工作在多通道模式下時(shí),子串口能主動(dòng)響應(yīng)從機(jī)發(fā)送的數(shù)據(jù),并由母串口發(fā)送給主機(jī),同時(shí)返回子串口地址。該模式使每個(gè)從機(jī)的發(fā)送要求能被及時(shí)地響應(yīng),即使所有從機(jī)同時(shí)有發(fā)送要求,數(shù)據(jù)也不會(huì)丟失,基本實(shí)現(xiàn)了主控單元和外設(shè)通信的實(shí)時(shí)性。
系統(tǒng)中用了多通道工作模式,在圖1中當(dāng)GM8123的模式控制引腳MS=0時(shí),芯片工作在多通道工作模式下,多通道模式允許3個(gè)子串口同時(shí)全雙工地工作。在該工作模式下,芯片的地址線STADD1~0是輸入口,由MCU控制選擇希望發(fā)送數(shù)據(jù)的子串口,地址線STADD1~0是輸出口,用于向MCU返回接收到數(shù)據(jù)的子串口地址。
在多通道模式下,母串口波特率等于子串口波特率的4倍。例如設(shè)置了子串口和外圍設(shè)備的通訊波特率為1200bps,則母串口波特率為1200*4=4800bps。MCU需先向地址線STADD1~0置入希望發(fā)送數(shù)據(jù)的子串口地址,再通過MCU的TXD口向母串口發(fā)送希望傳輸?shù)臄?shù)據(jù)。若需要對(duì)另一子串口發(fā)送數(shù)據(jù),則需要MCU修改地址線STADD1~0的狀態(tài)。需要注意的一點(diǎn)是由于母口波特率是子口波特率的4倍,母口發(fā)送4幀的時(shí)間,子口才能發(fā)送一幀,所以若只需對(duì)一個(gè)子口進(jìn)行連續(xù)發(fā)送,則必須對(duì)母口發(fā)送進(jìn)行延時(shí)操作,延時(shí)可采用延時(shí)程序?qū)崿F(xiàn),也可通過對(duì)母串口發(fā)送無效數(shù)據(jù)來實(shí)現(xiàn),具體方法為將地址線STADD置為0,然后對(duì)母串口寫0x00。
2軟件設(shè)計(jì)
在進(jìn)行數(shù)據(jù)通信的軟件設(shè)計(jì)時(shí),必須解決好兩方面的問題:一是可靠性,二是速度。而這兩方面的問題,可靠性是第一位的,速度只能是在可靠基礎(chǔ)上的速度。可靠快速傳輸?shù)膶?shí)現(xiàn),需要上、下位機(jī)軟件以及通信協(xié)議等各個(gè)環(huán)節(jié)的相互配合。
下文從PC機(jī)通信部分軟件設(shè)計(jì)、核心單元通信部分軟件設(shè)計(jì)、傳感探頭通信部分軟件設(shè)計(jì)以及它們之間的通信協(xié)議來介紹整個(gè)系統(tǒng)的通信。
2.1 PC機(jī)通信部分軟件設(shè)計(jì)
PC機(jī)軟件,我們主要用VB語言來實(shí)現(xiàn)。在通信部分,用了串口控件--MSCOMM,利用其接收事件來實(shí)現(xiàn)對(duì)核心單元部分所收集的數(shù)據(jù)的接收,并按通道、時(shí)間進(jìn)行處理。[2]首先檢測標(biāo)志位,看是否是我們預(yù)接收數(shù)據(jù)的起始部分,如果是,則對(duì)數(shù)據(jù)進(jìn)行計(jì)算,把溫度和時(shí)間分開處理。接收是實(shí)時(shí)的,大概3秒鐘數(shù)據(jù)上傳一次,若5秒鐘內(nèi)仍無數(shù)據(jù)上傳,則PC機(jī)自動(dòng)向核心單元獲取數(shù)據(jù)。
用示意圖表示大致的接收過程如圖2所示
2.2核心單元通信部分軟件設(shè)計(jì)
核心單元的軟件部分是用C語言實(shí)現(xiàn)的。[3]通信方面的核心也在此部分。
核心單元肩負(fù)著同時(shí)與GPS、傳感探頭及PC機(jī)通信的艱巨任務(wù),所以其軟件的編寫與實(shí)現(xiàn)顯得格外重要。
在此部分,我們克服了很多難點(diǎn):
⑴核心單元與GPS的通信[4]
在與GPS的通信上,我們分了兩個(gè)部分:
①首次校時(shí):在此部分,也有兩種情況,一種是系統(tǒng)接了GPS,這樣對(duì)其有一個(gè)相應(yīng)的喚起時(shí)間,等待GPS啟動(dòng),然后校時(shí)。另一種是系統(tǒng)未接GPS,這種情況下就要跳過校時(shí)程序直接用系統(tǒng)時(shí)間。在此部分中,我們克服了復(fù)雜情況的不同處理難點(diǎn)。
②常規(guī)校時(shí):常規(guī)校時(shí)是一段時(shí)間一次,為了克服系統(tǒng)差設(shè)置的。在此部分中,關(guān)鍵要做好GPS是否被喚醒以及是否與天上衛(wèi)星時(shí)間校準(zhǔn)的判斷,通過這兩點(diǎn)來考察是否要對(duì)系統(tǒng)時(shí)間進(jìn)行更新。
⑵數(shù)據(jù)存儲(chǔ)空間與傳輸速度之間的矛盾。
C8051F320可以存儲(chǔ)大概50組數(shù)據(jù),如果是子單元就很容易操控,但對(duì)于核心單元,50組所容納的是所有子單元的最新數(shù)據(jù),這就說明倘若沒有快速良好的通信,很可能造成數(shù)據(jù)覆蓋,大量丟失。于是我們就很細(xì)致地算到每秒應(yīng)該如何控制,使數(shù)據(jù)快速良好的傳輸?shù)玫奖U稀?/p>
2.3傳感探頭通信部分軟件設(shè)計(jì)
傳感探頭的任務(wù)主要是把本單元的數(shù)據(jù)向核心單元傳送。
但由于是串聯(lián),外加核心單元只有一個(gè)串口,這就造成了數(shù)據(jù)傳輸?shù)膹?fù)雜性,要一個(gè)單元傳完下一個(gè)單元再傳,其中不能有沖突有混合。我們在這部分涉及到子單元間的通信問題,它們通過選擇開關(guān)來控制與下一個(gè)通道的開啟關(guān)閉問題,這樣只要再在通信之前,發(fā)送本單元的通道號(hào),就能滿足一切要求,即一個(gè)單元傳輸數(shù)據(jù)前先發(fā)本單元通道號(hào),然后把此單元的所有數(shù)據(jù)發(fā)出,接著打開與下一單元的控制口。
2.4主要通信協(xié)議
主要通信協(xié)議有標(biāo)志位和校驗(yàn)法。標(biāo)志位用于核心單元和PC機(jī)之間,校驗(yàn)和用于核心單元與傳感探頭之間。
2.4.1標(biāo)志位:所謂標(biāo)志位,是在上傳數(shù)據(jù)時(shí),告知PC機(jī)這是一組數(shù)據(jù)的開頭,系統(tǒng)用了連發(fā)三個(gè)\"0XAA\"的方法,即PC機(jī)只有檢測到連續(xù)的三個(gè)\"0XAA\"才認(rèn)為它后面是一組數(shù)據(jù),否則將對(duì)數(shù)據(jù)不做處理。
2.4.2校驗(yàn)法:所謂校驗(yàn)法,是做了一個(gè)奇偶檢驗(yàn)和,然后把這個(gè)和從傳感探頭傳給核心單元,核心單元收到數(shù)據(jù)后,再自己求一次校驗(yàn)和,倘若這兩者相等,則認(rèn)為正確,否則命令傳感探頭重傳數(shù)據(jù)。
3實(shí)驗(yàn)結(jié)果
我們進(jìn)行了多次室內(nèi)實(shí)驗(yàn)和井下實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果如表1所示。它是我截取的半小時(shí)的分鐘值。
從數(shù)據(jù)中可以看出分鐘值的精度很高,為了更加直觀的分析問題,把一天的分鐘值數(shù)據(jù)用EXCEL畫出如圖3所示。
可以看出數(shù)據(jù)的精度很高,一天抖動(dòng)不大,且符合水下溫度變化不大的特點(diǎn)。
結(jié)論
實(shí)現(xiàn)了利用C8051F320的一個(gè)串口進(jìn)行實(shí)時(shí)與多通道通信的結(jié)果,并制定通信協(xié)議解決了傳輸穩(wěn)定性的問題,使通信更可靠。在此基礎(chǔ)上,為了進(jìn)一步提高系統(tǒng)的可擴(kuò)展性,對(duì)系統(tǒng)的傳輸速率及存儲(chǔ)容量又進(jìn)行了改進(jìn),使溫度數(shù)據(jù)量能良好地實(shí)現(xiàn)3通道的存儲(chǔ)轉(zhuǎn)發(fā)功能。但系統(tǒng)還有待進(jìn)一步改善,使C8051F320的串口更快更好地完成傳輸、校時(shí)等任務(wù)。
參考文獻(xiàn)
[1] Silabs. Perliminary C8051F32XC/1/2/3. http://silabs.com./2005
[2] 范逸之,陳立元. Visual Basic與RS-232串行通信控制. 清華大學(xué)出版社,2004.
[3] 童長飛. C8051F系列單片機(jī)開發(fā)與C語言編程. 北京航空航天大學(xué)出版社,2005.
[4] CIROCOMM TECHNOLOGY CORP. 全球衛(wèi)星定位、授時(shí)系統(tǒng)模塊--GUS-38A0 Global Positioning System Receiver Module (BUILT-IN TYPE-GSU-38A0. http://www.ureika.net./ 2005.