在設計由多個單片機組成的數據采集電路時,一般要用多個串口在各個單片機之間進行數據通信。為了解決單片機擴展多個串口的問題,以前大多采用多片AT89C2051來實現多串口通信。每個AT89C2051用并口與上位機連接,再通過AT89C2051的串口與下位機串口連接。這種電路設計,單片機編程比較復雜,整個電路的調試也比較麻煩,可靠性不是很高。一種新開發的SP2328串口擴展芯片很好的解決了上述問題。 SP2328是成都視普科技公司的串行口擴展專用芯片,能將普通單片機(如:AT89C2051、AT89C51等)的一個串口(UART)擴展為三個串口。它主要解決了大多數8位、16位以及32位單片機UART串口太少的問題,擴大了單片機的使用范圍。同時,SP2328串行口擴展專用芯片也很好地解決了許多在使用雙串口的單片機時,串口復雜的配置問題,能大大縮短開發周期,降低開發成本以及生產成本。 圖1 DIP和SOIC封裝(左) 圖2SSOP封裝(右) SP2328的功能特性 SP2328有四個UART串口,其中包括一個母串口和三個子串口。母串口和所有子串口都為全雙工工作模式,所有串口允許同時接收、發送串行數據。串口0"串口2為子串口,每個子串口的工作速率為75bps"4800bps。串口3為母串口,它的數據傳輸速率是子串口的4倍。串口3接收到串行數據后,SP2328芯片根據收到的地址信號,把數據通過相應的子串口發送出去。子串口收到串行數據后,把數據通過串口3發送出去,同時給出相應的子串口地址。串口0"串口2的波特率的設置很簡單,不需要用軟件設置,只要改變輸入時鐘的頻率即可。波特率按以下公式計算: K=2400*f(osc)/8.0(bps) 其中f(osc)<=16.0MHZ SP2328的直流工作電壓為2.4V"5.5V,典型電流為3.7mA,帶有節電模式。 圖1和圖2是SP2328芯片的管腳排列圖。 ADRI0、ADRI1 為串口3接收下行數據時的串口地址線,“00”、“01”、“10”分別對應:串口0、串口1、串口2的地址;“11”為串口3的地址。當上位機要向某一個子串口連接的下位機發送數據時,首先要將ADRI0、ADRI1置成響應的地址狀態,再將數據發送到串口3即可。 ADRO0、ADRO1 為串口3發送上行數據時的串口地址線,“00”、“01”、“10”分別對應:串口0、串口1、串口2的地址。當上位機的串口接收到串口3送來的數據時,立刻讀取地址線ADRO0、ADRO1的狀態,根據地址線ADRO0、ADRO1的狀態即可判斷出接收到的數據是由哪個串口上傳的。 圖3 SP2328與單片機的接口電路 SP2328與單片機的接口舉例 圖3是單片機數據采集電路中SP2328與單片機的接口電路。AT89C51的串口與SP2328的串口3連接,P1.0、P1.1、P1.2、P1.3分別連接ADRI0、ADRI1、ADRO0、ADRO1,作為設置和讀取子串口的地址用。三個子串口分別連到三個下位機的串口。串口0、串口1、串口2的波特率為: K=(2400*16)/8=4800(bps) 串口3的波特率: K3=4*K=4*4800=19200(bps) AT89C51串口的波特率也必須設置成19200bps。 由于SP2328通電后自動進入工作狀態,不需要用程序設置,所以編寫串口程序比較簡單方便。 需要注意的問題 在選擇晶振頻率時,要嚴格使單片機串口的波特率與SP2328的波特率相一致,晶振頻率要穩定,否則容易使SP2328芯片接收到的數據和發送出去的數據都是錯誤的。 由于母串口3的速度是其它子串口的4倍,即子串口發送一個字節的時間母串口可以發送4個字節,所以如果串口3向子串口發送一個字節后,串口3沒有向其他子串口發送另外的4個字節,而立即再向原子串口發送數據,子串口的數據將溢出。因此,必須在它們之間加上4個以上的字節用于延時(母串口向其他另外的子串口發送數據,相當于延時一個字節)。 上位機收到母串口上行的數據后要及時讀取上行數據的地址信息(上行數據的地址信息可以在上行數據的停止位結束后保持6bit的時間長度)。使上位機能準確收到子串口的串行數據。 上位機向母串口發送數據前,先要向SP2328發送子串口的地址信號。 結語 采用SP2328芯片擴展單片機串口,為單片機的多串口通信提供了一個很好的解決方案。它與使用雙串口單片機和使用多片AT89C2051擴展串口等方案相比,編程簡單、可靠性高、成本低。 |