時間:2008-07-28 16:14:00來源:ronggang
圖3 RS-232到RS-485的電平轉換圖[/align]
RS-232-485轉換器主要包括了電源、RS-232電平轉換、RS-485電平轉換三部分。該電路的RS-232電平轉換電路使用了市場上常見的MAX232集成電路,RS-485電平轉換電路采用了MAX485集成電路。為了使用方便,電源部分設計成無源方式,整個電路的供電直接從PC機的RS232接口中的DTR(4腳)和RTS(7腳)取出。PC串口每根線可以提供大約9mA的電流,因此兩根線提供的電流就足夠供給本電路使用。經實驗,本電路只使用其中一條線也能夠正常工作。使用本電路需注意PC程序必須使串口的DTR和RTS輸出高電平,經過D3穩壓后得到VCC,經過實際測試,VCC電壓大約在4.7V左右。因此,電路中要說D3起的作用是穩壓和限壓功能。
MAX485是通過兩個引腳RE(2腳)和DE(3腳)來控制數據的輸入和輸出。當RE為低電平時,MAX485數據輸入有效;當DE為高電平時,MAX485數據輸出有效。在半雙工使用中,通常可以將這兩個腳直接相連,然后由PC或者單片機輸出的高低電平就可以讓MAX485在接收和發送狀態之間轉換了。由于本電路DTR和RTS都用于了電路供電,因此使用TX線和MAX232的另外一個通道及Ql來控制MAX485的狀態切換。平時MAX232的9腳輸出高電平,經Ql倒相后,使MAX485的RE和DE為低電平而處于數據接收狀態。當PC機發送數據時,MAX232的9腳輸出低電平,經Ql倒相后,使MAX485的RE和DE為高電平而處于數據發送狀態。
2.2 下位機從動端
PIC16F877單片機具有一個通用同步異步接收發送器USART,又名串行通訊接口(SCI),可工作于全雙工異步工作模式和半雙工同步工作模式,它是一種利用PORTC口的RC6和RC7兩個引腳作為通訊的兩線制串行通訊接口。為了把PORTC口的RC6和RC7兩個引腳分別設置成串行通訊接口的發送(TX)腳和接收(RX)腳,必須要把USART的接收狀態和控制寄存器TCSTA的bit7(SPEN)位和TRISC寄存器的bit7置1,把TRISC寄存器的bit6置0。為了使USART分別工作于接收或發送狀態,就必須設置相應的狀態寄存器和控制寄存器。
USART發送器和接收器在功能上是完全獨立的,要使USART工作在異步通訊方式,它們所用的數據格式和波特率就必須是相同的。這里使用常用的格式:波特率9600,無校驗,8個數據位,1個停止位。
在編寫程序時首先要設置好USART異步通訊模塊工作模式及相關寄存器,主要有以下模塊寄存器:TXSTA(數據發送控制及狀態寄存器),RCSTA(數據接收控制及狀態寄存器),SPBRG(波特率控制寄存器),INTCON、PIEI、PIRI(相關的中斷控制寄存器),TXREG(串行數據發送寄存器),TCTEG(串行數據接收寄存器)。
在PIC單片機中,決定USART通信波特率高低的,只有SPBRG寄存器和TXSTA寄存器中的BGRH位,不占用任何其它定時器資源。波特率發生器的工作時鐘取自于單片機主振蕩器的振蕩頻率輸出,通過設置SPBRG寄存器和BGRH控制位對振蕩頻率分頻,最后產生所需的波特率值。
當BRGH=0時,為低速波特率發生方式;BRGH=1則產生高速波特率。這里使用高速波特率,因為這樣可以減少與標準波特率值的誤差。異步通信告訴波特率的計算方法如下:若單片機的工作振蕩頻率為fosc,,SPBRG寄存器值為X,則高速波特率的計算公式為:
(1)
在設計過程中,我們一般是先選定需要得到的波特率,然后計算SPBRG的設定值X,變換式(1),即得:
(2)
異步通信波特率設定時得注意事項:當選用標準波特率時,如果一味追求一步通信時波特率的準確度,那就應該選擇11.0592MHz作為單片機的工作振蕩頻率。但其實大可不必如此計較。異步通信允許波特率存在一定的偏差,只要偏差值在士3%之內就可以保證正常通信,所以對于常用的1200bps~9600bps波特率的設定,可選的振蕩頻率可以有很多種,用戶完全可以根據自己所設計系統的其他功能要求而兼顧選擇振蕩頻率。使得單片機的振蕩頻率越低,功耗就越小,系統抗干擾能力也越強。另外,對于所選的波特率如果既可以用低速方式又可以用高速方式時,在程序中應盡量選擇高速方式,這樣得到的實際波特率誤差相對較小。
2.3通信時序
由于RS-485通信是一種半雙工通信,發送和接受共用同一物理通道,在任意時刻只允許一臺單片機處于發送狀態,因此要求應答的單片機必須在偵聽到總線上呼叫信號己經發送完畢,并且在沒有其他單片機應答信號的情況下才能應答。如果在時序上配合不好,就會發生總線沖突,使整個系統的通信癱瘓,無法正常工作。上位機與下位機之間如何進行數據傳輸,怎么提高通信的效率和可靠性,以及對通信過程中的故障處理,幀格式的約定,都需要一套詳盡的通信協議。
由于RS-485標準只制定了物理層電氣標準,對上層通信協議沒有規定,這給設計者提供了很大的靈活性。一套完整的通信協議既要求結構簡單,功能完備,又要求具有可擴充性與兼容性,并且盡量標準化。
3 報文通信時的簡單協議
SLIP(Serial Line Intemet Protocol)協議是串行線路網際協議,它是最早的、也是僅有的兩個串行IP協議之一。它實現了在串行通信線路上運行TCP/IP協議及其應用服務的功能,為用戶上網提供了撥號IP模式。這里由它派生出改進協議:
(1)發送數據時的報文組裝
● 取一個關鍵字0x55,一個報文的傳輸以0x55為引導,中間可以有任意多的字節數,最后以0xAA結束一個報文。關鍵字0x55和0xAA不參與檢驗和運算。
● 如果傳輸的原始數據中含有0x55,則將其替換成0xFF+0x05,求校驗和時仍按一個0x55計算。
● 如果傳輸的原始數據中含有0xAA,則將其替換成0xFF+0x0A,求校驗和時仍按一個0xAA計算。
● 如果傳輸的原始數據中含有0xFF,則將其替換成0xFF+0x00,求校驗和時仍按一個0xFF計算。
● 其余數據原樣發送。
例如:當有0x55、,0x5A,0xAA,0xAS,0xFF這5個字節數據需要發送時,加上它們的算術校驗和0xFD,原始數據總共6個字節。按上述方法整合成的一個報文為:0x55,0xFF,0x05,0x5A,0xFF,0x0A,0xAS,0xFF,0x00,0xFD,0xFF,總共11個字節。
(2)接收數據時的報文解讀
接受方將接收所有的數據并存入數組,主程序從數組中逐個取出數據并進行解讀,其過程如下:
● 等待出現第一個0x55,以判斷一個數據包的開始。一旦讀到0x55,立即進行一個報文接收的初始化工作,包括數組單元清0,字節計數器清0等工作。
● 從隊列中讀取一個數據,如果不是0x55、0xAA或0xFF,則直接將數據存入數組。
● 如果讀到0xFF,則繼續讀其下一個數據,若是0x05,則替換回原始數據0x55;若是0x0A,則替換回原始數據xAA,若是0x00,則替換回原始數據0xFF。若都不是,則數據傳輸出錯。
● 當讀到xAA時,一個報文結束,關串口接收中斷,串口中斷流程圖如圖4所示。
[align=center]標簽:
上一篇:基于新型單片機的無刷直流電...
傳動網版權與免責聲明:凡本網注明[來源:傳動網]的所有文字、圖片、音視和視頻文件,版權均為傳動網(www.cdcst56.com)獨家所有。如需轉載請與0755-82949061聯系。任何媒體、網站或個人轉載使用時須注明來源“傳動網”,違反者本網將追究其法律責任。
本網轉載并注明其他來源的稿件,均來自互聯網或業內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。
產品新聞
更多>2025-09-08
華為昇騰Atlas800iA2 910B服務器Deepsee...
2025-09-04
2025-08-06
2025-07-08
2025-06-30
2025-06-16