摘 要:在數(shù)據(jù)采集和傳輸系統(tǒng)中,常需進(jìn)行多路數(shù)據(jù)的傳送和處理。以單片機(jī)為核心,研究多路低速數(shù)據(jù)串行傳輸?shù)囊环N實(shí)現(xiàn)方法,給出硬件連接圖,闡述各部分工作原理及軟件設(shè)計(jì)思路。該實(shí)現(xiàn)方法硬件簡單,所需芯片少,成本低,可實(shí)用于以單片機(jī)為核心的多路低速數(shù)據(jù)串行傳輸系統(tǒng)中。
關(guān)鍵詞:數(shù)據(jù)采集;多路低速數(shù)據(jù);中斷;數(shù)據(jù)處理
中圖分類號(hào):TP368.1 文獻(xiàn)標(biāo)識(shí)碼:B 文章編號(hào):1004-373X(2008)02-025-02
Multiplex Low Speed Data Serial Transmission Based on Single Chip
LI Yandong,WANG Yongbin,CHEN Bin
(Navy University of Engineering,Wuhan,430033,China)
[HJ*2]Abstract:The date collection and transmission system usually needs to transmit and process multiplex date.Using single chip as the core,the paper studies a way to realize multiplex low speed data serial transmission,presents hardware connection chart,expounds work principle and software design idea.The method is simple in hardware,needs fewer chips and is low cost,so it could be applied to the multiplex low speed data serial transmission systems which uses single chip as the core.
Keywords:single chip;multiplex low speed data;interrupt;data processing
常用的標(biāo)準(zhǔn)51單片機(jī)內(nèi)部僅含有1或2個(gè)可編程全雙工串行通信接口,其具有UART的全部功能,該接口可同時(shí)進(jìn)行數(shù)據(jù)的發(fā)送和接收。在工程中,往往需要多個(gè)串口進(jìn)行整個(gè)系統(tǒng)的通信。在如圖1所示的多路數(shù)據(jù)采集和傳輸系統(tǒng)中,其要實(shí)現(xiàn)的功能為:將3個(gè)終端的數(shù)據(jù)傳輸給上位機(jī),其傳輸速率不同,終端1和終端2每0.5 s傳1次,數(shù)據(jù)速率為1 200 b/s,終端3每2 s傳1次,數(shù)據(jù)速率為600 b/s。上位機(jī)控制電源使3終端開關(guān)機(jī)。單片機(jī)既要和上位機(jī)通信,又要接收來自終端的數(shù)據(jù)并控制電源,這時(shí)就需要擴(kuò)展串行通道。
1 串口擴(kuò)展方案比較
單片機(jī)串口擴(kuò)展一般有3種方法,一是選用多串口單片機(jī);二是用串口擴(kuò)展器如16C554,SP2328等進(jìn)行擴(kuò)展,三是用單片機(jī)豐富的I/O口模擬多個(gè)串口。前2種方法性能穩(wěn)定,編程簡單,第3種方法硬件簡單,但編程復(fù)雜。此設(shè)計(jì)中數(shù)據(jù)傳輸速率較低,故選用第3種方法。
2 硬件設(shè)計(jì)
2.1 芯片介紹
8031芯片為典型的MCS-51系列單片機(jī),采用40引腳的雙列直插封裝(DIP)或方形封裝,配置256 B的數(shù)據(jù)存儲(chǔ)器,32條I/O線,1個(gè)全雙工UART。
2.2 電路圖
電路圖如圖2所示。
圖2中,單片機(jī)引腳P1.0,P1.1,P1.2分別與3個(gè)終端相連,用其接收從終端往上位機(jī)傳輸?shù)臄?shù)據(jù)。P1.3,P1.4,P1.5為3個(gè)終端的中斷標(biāo)志,為“1”時(shí)表示對(duì)應(yīng)終端有中斷請(qǐng)求。P1.6,P1.7,P3.7為中斷控制位,當(dāng)單片機(jī)響應(yīng)中斷后由單片機(jī)控制將對(duì)應(yīng)終端中斷請(qǐng)求屏蔽,以避免中斷請(qǐng)求的錯(cuò)誤。P3.6為電源控制位。RXD和TXD與上位機(jī)相連,實(shí)現(xiàn)單片機(jī)與上位機(jī)之間的數(shù)據(jù)傳輸。P0和P2口用作單片機(jī)外部數(shù)據(jù)存儲(chǔ)器擴(kuò)展的地址線。
2.3 工作原理
在上位機(jī)控制終端開機(jī)后,終端采集數(shù)據(jù)并向單片機(jī)傳輸。單片機(jī)循環(huán)等待,若接收到中斷請(qǐng)求,單片機(jī)查詢中斷源并響應(yīng)此中斷,對(duì)P1口采樣開始接收數(shù)據(jù)并將數(shù)據(jù)存儲(chǔ)在片外存儲(chǔ)器中,接收過程中若有其他中斷到來,則進(jìn)行多中斷處理。數(shù)據(jù)傳輸完畢后單片機(jī)結(jié)束此次中斷,對(duì)采樣數(shù)據(jù)進(jìn)行判斷和重組,并將處理后的數(shù)據(jù)送串口傳給上位機(jī)。工作完畢,上位機(jī)控制終端關(guān)機(jī)。
2.3.1 數(shù)據(jù)接收
以終端1為例,無數(shù)據(jù)傳輸時(shí),P1.0接收為低電平;當(dāng)P1.0接收到高電平,即數(shù)據(jù)傳輸標(biāo)志時(shí),表示終端1將向上位機(jī)發(fā)送數(shù)據(jù),此時(shí)INT0有效,終端1向單片機(jī)請(qǐng)求中斷,終端1中斷標(biāo)志P1.3=1。單片機(jī)接收到中斷請(qǐng)求,對(duì)P1.3,P1.4,P1.5進(jìn)行查詢,查詢到P1.3=1,確定此中斷請(qǐng)求來自終端1,響應(yīng)此中斷,并將P1.6置0,使INT0無效,防止終端1傳輸數(shù)據(jù)時(shí)反復(fù)中斷,同時(shí)讀P1口,最低位比特P1.0即為終端1傳送的數(shù)據(jù)。接收終端1傳來的數(shù)據(jù)直至數(shù)據(jù)傳輸結(jié)束,所接收數(shù)據(jù)放外部存儲(chǔ)器,期間有其他中斷則進(jìn)行多中斷處理。不同工作階段與終端1相連各引腳狀態(tài)如表1所示。
由于數(shù)據(jù)傳輸速率較小,傳輸1 b數(shù)據(jù)時(shí)間內(nèi)單片機(jī)可多次讀P1口,此時(shí)可根據(jù)需要編寫延時(shí)程序,用以控制單片機(jī)對(duì)P1口的采樣次數(shù)。每傳輸1 b數(shù)據(jù),對(duì)終端3的采樣次數(shù)是對(duì)終端1或終端2采樣次數(shù)的2倍。例如,若終端1或終端2傳輸1 b數(shù)據(jù)被采樣3次,則終端3傳輸1 b數(shù)據(jù)被采樣6次。如圖3所示,故接收終端1或2一比特信息需讀P1口3次,終端3為6次。
2.3.2 多中斷處理
在終端1傳輸數(shù)據(jù)時(shí),單片機(jī)實(shí)時(shí)檢測(cè)終端2或終端3是否有請(qǐng)求中斷,若有,則單片機(jī)響應(yīng)中斷,接收來自終端2或終端3采集的數(shù)據(jù),反之亦然。各終端之間不影響,因?yàn)閱纹瑱C(jī)讀一次P1口,是同時(shí)對(duì)P1.0~P1.7八個(gè)引腳進(jìn)行采樣,而不管此時(shí)某終端是否有向上位機(jī)的數(shù)據(jù)傳輸;故采樣數(shù)據(jù)中會(huì)有許多無用數(shù)據(jù),這些將在數(shù)據(jù)處理程序中處理。單片機(jī)接收完終端1的數(shù)據(jù)后,查詢終端2和終端3是否在進(jìn)行數(shù)據(jù)傳輸,若是,繼續(xù)對(duì)P1口采樣;若三終端皆無數(shù)據(jù)傳輸,則結(jié)束中斷,轉(zhuǎn)入數(shù)據(jù)處理程序。
2.3.3 數(shù)據(jù)處理
從外部存儲(chǔ)器中讀第1字節(jié)數(shù)據(jù),查詢低3位中任意一位是否為1,若不是,讀下一字節(jié);若是,表明對(duì)應(yīng)終端數(shù)據(jù)由此開始,讀3個(gè)字節(jié)取出對(duì)應(yīng)比特并將原位置清零,對(duì)取出比特進(jìn)行判斷;以終端1為例,3個(gè)字節(jié)最低比特有2個(gè)或3個(gè)比特為1則此比特判定為1,否則判為0,判斷所得數(shù)據(jù)存入片內(nèi)指定存儲(chǔ)區(qū),繼續(xù)取三個(gè)字節(jié)數(shù)據(jù)并判斷直至對(duì)應(yīng)終端本次數(shù)據(jù)處理完?;厣弦徊樵凕c(diǎn)繼續(xù)查詢。在終端1數(shù)據(jù)流長度內(nèi)若查詢到某字節(jié)低3位為1,重復(fù)上述處理,若無,數(shù)據(jù)處理結(jié)束,將處理后數(shù)據(jù)送串口。
3 軟件設(shè)計(jì)
3.1 系統(tǒng)流程
系統(tǒng)流程如圖4所示。
三終端向單片機(jī)傳送的數(shù)據(jù)幀由10位數(shù)據(jù)組成:1位起始位,8位數(shù)據(jù)位,1位停止位。終端向單片機(jī)發(fā)送1次數(shù)據(jù),即要發(fā)送8個(gè)字節(jié)的數(shù)據(jù)位,其中第一字節(jié)為終端發(fā)送數(shù)據(jù)標(biāo)志,接收到此字節(jié)數(shù)據(jù)表示終端有數(shù)據(jù)發(fā)送;后7個(gè)字節(jié)為以約定格式傳輸?shù)臄?shù)據(jù),其中包含此次數(shù)據(jù)來自哪一終端的信息。
編程時(shí),根據(jù)終端發(fā)送數(shù)據(jù)的波特率計(jì)算出數(shù)據(jù)位周期,而后根據(jù)單片機(jī)晶振頻率和1 b內(nèi)采樣次數(shù)編寫延遲程序。單片機(jī)接收到中斷后即按固定延遲采樣P1口。數(shù)據(jù)傳送結(jié)束后,對(duì)每比特內(nèi)采樣的數(shù)據(jù)采用3中取2(終端1或2)或6中取4(終端3)的規(guī)則判斷。
3.3 串口通信
單片機(jī)與上位機(jī)通過串行口通信,串行口工作于方式1,數(shù)據(jù)幀也為10位:1位起始位、8位數(shù)據(jù)位、1位停止位。串口波特率由編程給定,單片機(jī)將處理后數(shù)據(jù)按約定波特率傳給上位機(jī),并隨時(shí)接收上位機(jī)的控制指令以控制電源。
3.4 部分程序
;終端1接收數(shù)據(jù)
READ:[ZK(]MOV A,P1[JY];讀P1口
MOVX @DPTR,A[JY];送外部存儲(chǔ)空間
ACALL DELAY[JY];采樣延時(shí),控制1 b內(nèi)采樣次數(shù)
DJNZ R1,READ[JY];終端1數(shù)據(jù)傳完否,未完繼續(xù)
SETB P1.6[JY];傳完開終端1中斷,等待下次接收[ZK)]
…
;終端1數(shù)據(jù)處理
DEAL1:[ZK(]MOV R2,#30H[JY];終端1數(shù)據(jù)存儲(chǔ)首址
MOV R3,#8[JY];循環(huán)次數(shù),8字節(jié)數(shù)據(jù)[ZK)]
S1:[ZK(]DJNZ R3,S2
AJMP EXIT[ZK)]
S2:MOV R1,#0[JY];移位次數(shù)
S3:[ZK(]ACALL DQ[JY];讀3個(gè)字節(jié)最低位置于寄存器B低3位
ACALL SEV1[JY];B低3位判斷,3中取2
ACALL LW[JY];移位設(shè)定,將8比特?cái)?shù)據(jù)組成1字節(jié)
ADD @R2,A[JY];存儲(chǔ)1 b數(shù)據(jù)
INC R1
CJNE R1,#8,S3[JY];存儲(chǔ)1 B數(shù)據(jù)
INC R2
AJMP S1[ZK)]
EXIT:…
4 結(jié) 語
上述實(shí)現(xiàn)方法硬件簡單,所需芯片少、成本低,可實(shí)用于以單片機(jī)為核心的多路低速數(shù)據(jù)串行傳輸系統(tǒng)中,但此實(shí)現(xiàn)占用軟件開銷較大,適合于波特率較低的情況。
參 考 文 獻(xiàn)
[1]曹巧媛.單片機(jī)原理及應(yīng)用[M].北京:電子工業(yè)出版社,2002.
[2]李華.MCS-51系列單片機(jī)實(shí)用接口技術(shù)[M].北京:北京航空航天大學(xué)出版社,1993.
[3]南建輝,熊鳴,王軍茹.MCS-51單片機(jī)原理及應(yīng)用實(shí)例[M].北京:清華大學(xué)出版社,2004.
[4]黃漢兵.Protel DXP電路設(shè)計(jì)制版入門與提高[M].北京:人民郵電出版社,2004.
注:本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文。