劉玉江LIU Yu-jiang
(遼寧對外經(jīng)貿(mào)學(xué)院 信息技術(shù)系,大連 116052)
數(shù)據(jù)通信交換技術(shù)是指網(wǎng)絡(luò)中各臺計算機(jī)之間或者是計算機(jī)與計算機(jī)網(wǎng)絡(luò)設(shè)備之間進(jìn)行數(shù)據(jù)通信時的信息交換技術(shù)。簡單的數(shù)據(jù)通信就是兩臺計算機(jī)之間或者計算機(jī)與計算機(jī)網(wǎng)絡(luò)設(shè)備(如打印機(jī)等)之間鏈路上的通信,數(shù)據(jù)通信交換技術(shù)的基本原理是通過某種交換方法,從源站點發(fā)出的信息經(jīng)過多個節(jié)點或者網(wǎng)絡(luò)設(shè)備后到達(dá)目標(biāo)站點。目前存在兩種數(shù)據(jù)傳輸方式,一種是并行傳輸,一種是串行傳輸。并行方式雖然使用了較多的線路和連接,但是傳輸速度更快。串行方式通信最少只需三根連接線,但是傳輸速度要比并行方式慢的多。因此在短距離數(shù)據(jù)通信方面以往主要采用并行方式。而在長距離通信時,基于連接線路復(fù)雜和成本高的考慮,主要采用串行方式。但是目前這種區(qū)別已經(jīng)越來越不適用。由于系統(tǒng)小型化的要求越來越高,其內(nèi)部部件也越來越小,串行通信由于其簡潔的通信方式越來越受到人們的重視。隨著技術(shù)的提高,串行傳輸?shù)乃俾室驳玫搅嗣黠@的提高。
PIC16F877A內(nèi)部是由MSSP模塊構(gòu)成的SPI接口,可同步發(fā)送和接收8位數(shù)據(jù), 通信只需3個或4個引腳。它支持SPI的所有四種方式。由于用SPI方式通信的兩臺設(shè)備在同一個時鐘下工作,因此,SPI至少需要發(fā)送(SDO)、接收(SDI)和時鐘(SCK)3根引腳線。為了加強(qiáng)主從機(jī)之間通信的靈活性,增加了從動方式選擇(SS)作為控制信號線。
SPI(Serial Peripheral Interface,串行外圍接口)是由MOTOROLA公司在20世紀(jì)70年代末至80年代初最先推出的一種同步串行傳輸規(guī)范,也是一種單片機(jī)外設(shè)芯片串行擴(kuò)展接口。本文所采用的微芯公司的 PIC單片機(jī)的SPI接口就是在充分吸收了這兩種規(guī)范優(yōu)點的基礎(chǔ)上開發(fā)出來。在PIC16F877A中配置了主控同步串行接口MSSP (Master Synchronous Serial Port ) 模塊[1,2],它兼容SPI和I2C兩種串行通信模式。在PIC16F877A中配置了主控同步串行接口MSSP(Master Synchronous Serial Port)模塊,兼容SPI和I2C 兩種串行通信模式[3]。
通信的雙方總有一方處于主動位置,負(fù)責(zé)通信過程的建立、結(jié)束,發(fā)送同步時鐘; 另一方則接受主控方的相應(yīng)命令或時鐘,被動地發(fā)送或接收信號。主控方通過送出時鐘信號來啟動數(shù)據(jù)傳輸,在雙方約定好的時鐘邊沿(主從方時鐘邊沿一致) 下,數(shù)據(jù)從主、從方的移位寄存器中同步傳輸,并在下一個邊沿上被鎖定。每個時鐘周期完成一位數(shù)據(jù)交換,8個時鐘周期以后主從移位寄存器中的內(nèi)容交換一次,并分別裝載到相應(yīng)的緩沖器中與此同時緩沖器滿標(biāo)志位和中斷標(biāo)志位置位[4]。在SPI通信中這個過程可精簡為圖1的過程。
圖1 SPI數(shù)據(jù)收發(fā)示意圖
SSPEN是同步串端口使能位,置1則啟動串行端口并配置SCK,SDO,SDI,SS為串行端口引腳。CKP為時鐘極性選擇位,置1則時鐘空閑狀態(tài)為高電平。SSPM3到SSPM0四位為同步串行端口模式選擇位,在主控模式下用來設(shè)置時鐘,從動模式下用控制是否啟用SS\引腳控制。WCOL、SS-POV分別為寫沖突檢測位和接收溢出標(biāo)志位。
SMP為采樣位,主控模式下置1表示在數(shù)據(jù)輸出結(jié)束時采樣輸入信號,0表示在數(shù)據(jù)輸出中段采樣輸入信號;從動模式下該位必須清零。CKE是SPI時鐘極性選擇位,1表示數(shù)據(jù)傳輸發(fā)生在時鐘信號由活動狀態(tài)轉(zhuǎn)向空閑狀態(tài)時,為0正好相反。BF是緩沖器滿狀態(tài)位(僅在接收模式下),1表示接收完成,SSPBUF滿。
在使用PIC16F877A的SPI口之前必須先對 MS S P進(jìn)行初始化設(shè)置。與此相關(guān)的寄存器主要是同步串口控制寄存器(SSPCON1)和同步串口狀態(tài)寄存器(SSPSTAT )要設(shè)置的項目包括以下七點:
1)主控方式( Master Mode,SCK為時鐘輸出引腳 )
2)從動方式( Slave Mode,SCK為時鐘輸入引腳 )
3)時鐘極性( Polarity ,空閑時SCK的電平高低設(shè)置)
4)數(shù)據(jù)輸入采樣點(中間點或結(jié)束點)
5)時鐘沿選擇(數(shù)據(jù)是在時鐘SCK的上升沿還是下降沿輸出)
6)主控方式下的時鐘頻率(僅用于主控方式下)
7)從動方式下的從動選擇設(shè)置
首先將PIC單片機(jī)的SPI控制寄存器SSPCON的使能位SSPEN置1,這樣就可以使用SPI串行端口了,此時引腳SDI、SDO、SCK、SS為SPI接口的專用引腳。除了按照上述要求設(shè)置SSPCON和SSPSTAT寄存器以外,還需要對以上四個引腳進(jìn)行方向控制位的設(shè)置。
在雙機(jī)通信中,分主控方( Master )和從控方(Slave)兩個模塊。主控方控制SCK信號。雙方嚴(yán)格按照“SPI串口通信協(xié)議” 發(fā)送和接收數(shù)據(jù)。其工作過程為:主控方發(fā)起傳送過程, 數(shù)據(jù)一旦寫入主控方緩沖器SSPBUF就開始讀取或發(fā)送數(shù)據(jù),數(shù)據(jù)高位在前,低位在后。并自動在SCK端產(chǎn)生8個SCK時鐘周期給從控方。但是從控方,只有在SS\端被拉低時,才接收主控方SCK時鐘信號,并與 SCK同步發(fā)送或接收數(shù)據(jù)。主從控雙方,都在同一個SCK信號的一個跳變沿進(jìn)行數(shù)據(jù)移位,在數(shù)據(jù)穩(wěn)定后的另一跳變沿進(jìn)行采樣。
正常接收或發(fā)送的相關(guān)標(biāo)志位: 當(dāng)接受完一個字節(jié)后,中斷標(biāo)志位SSPIF和緩存器滿標(biāo)志位BF相應(yīng)置1。當(dāng)接受數(shù)據(jù)的最后一位被鎖定,或發(fā)送數(shù)據(jù)的最后一位被移出后,中斷標(biāo)志位SSPIF置1。
圖2為系統(tǒng)硬件連接示意圖。
圖2 雙機(jī)通信電路連接示意圖
圖3和圖4是簡化后的數(shù)據(jù)收發(fā)流程圖。
在以上通信過程中用到了握手信號,這主要是考慮到主從控雙方除了相互通信以外還可能執(zhí)行其他功能,這樣做提高了程序的通用性。另外程序用匯編語言編寫, 這樣提高了代碼的執(zhí)行效率。
圖3 主控方程序流程 圖4 從控方程序流程
/*主控端SPI初始化程序*/
…
bcf status, rpl
bsf status, rp0
movlw B`10000000`;設(shè)置C端口,SDO和SCK為輸出
movwf trisc
…
movlw B`01000000`;設(shè)置SMP=0, CKE=1
movwf sspstat
movlw B`00000110`
movwf adcon1
bcf status, rp0
movlw B`00110001`
movwf sspcon; 時鐘空閑為高,主控頻率為fosc/16,
…
/*主控端發(fā)送數(shù)據(jù)程序*/
…
movlw B`01010101`; 發(fā)送命令字B`01010101`
movwf sspbuf
call ready; 等待握手信號
nop
nop
movlw B`00101010;發(fā)送數(shù)據(jù)給從控端
movwf sspbuf
call ready
…
/*從控端主程序*/
…
bcf portb,1
bsf portb,1
call chaxun
movf sspbuf ,0 ;接受數(shù)據(jù)1
movwf data1
bcf portb,1
…
bsf portb,1
…
/*握手信號子程序*/
Ready
a btfss porta , 1; 等待數(shù)據(jù)可發(fā)送,可以添加握手信號來檢測
goto a
return
/*查詢是否接收到數(shù)據(jù)的子程序*/
Chaxun
bcf status, rp1
bsf status, rp0 STATUS,RP0
b btfss sspstat, bf
goto b
bcf status, rp0 BCF STATUS,RP0
return
通過試驗證明這種雙機(jī)通信方式是切實可行的,在高達(dá)5MHz的通信速率下沒有發(fā)生傳輸錯誤。盡管本文是雙機(jī)通信的模式,但主機(jī)可以通過增加從動器選擇線來控制從機(jī)的SS引腳的方式,擴(kuò)展為一主多從的通信模式。另外本文中SS引腳的控制也可以放開。因此本文的設(shè)計方法具有較強(qiáng)的通用性和擴(kuò)展性。
當(dāng)然這種模式依然不可避免的存在諸如不能很好的適應(yīng)多主控器情況、不能尋址、不夠靈活等局限性。但是正是由于它的簡單實用,在很多對通信要求不太高的場合,仍有它的實用價值。
[1] Korb,J,A Standard for the Transmission of IP Datagram over Public Data Network. RFC877,Purdue University,September,1993.
[2] 羅翼,張宏偉.PIC單片機(jī)應(yīng)用系統(tǒng)開發(fā)典型實例[M].北京:中國電力出版社,2005.
[3] Tim wilmshurst,等.PIC嵌入式系統(tǒng)開發(fā)[M].北京:人民郵電出版社,2008.
[4] 金惠文,陳建亞,等.現(xiàn)代交換原理[M].北京:電子工業(yè)出版社,2005.