摘 要:本文介紹了用一片DS80C520單片機(jī)和兩片RS-485接口芯片SN74LBC184設(shè)計(jì)RS-485通訊中繼器的原理和方法,給出了硬件電原理圖和軟件流程圖,設(shè)計(jì)簡(jiǎn)單,可靠性高,性價(jià)比高,傳輸速率比較高。
關(guān)鍵詞:RS-485;中繼器;DS80C520
1 引言
RS-485是一種平衡傳送的串行接口標(biāo)準(zhǔn),比最早的采用非平衡方式傳送的RS-232串行接口標(biāo)準(zhǔn)在電氣指標(biāo)上有了大幅度的提高。由于RS-485總線通訊距離遠(yuǎn),抗干擾能力強(qiáng),結(jié)構(gòu)簡(jiǎn)單,可靠性高,廣泛應(yīng)用于多機(jī)遠(yuǎn)距離通信系統(tǒng)中。其最大傳輸距離在數(shù)據(jù)傳輸速率為100kbps時(shí)為120m,傳輸速率為10kbps時(shí)為1.2km,傳輸速率降為300bps時(shí)可超過4km。最大傳輸距離的增加是犧牲數(shù)據(jù)傳輸速率為代價(jià)的。如果即要保證傳輸速度,而傳輸距離又超過RS-485的可靠通訊距離時(shí),必須加中繼器延長(zhǎng)其通訊距離。
中繼器的設(shè)計(jì)方案很多,本文采用DALLAS公司具有雙串行通讀口的單片機(jī)DS80C520來(lái)實(shí)現(xiàn)。該方法硬件電路特別簡(jiǎn)單,軟件設(shè)計(jì)方便,大大提高了中繼器的可靠性。
2 工作原理
DS80C520完全兼容8051的指令,外接晶振頻率最高可達(dá)33MHz,在相同的晶振頻率下其指令平均執(zhí)行速度是8051的2.5倍,而且具有電源失效自動(dòng)復(fù)位和內(nèi)置看門狗電路,低功耗設(shè)計(jì),可靠性高。管腳的排列和8051完全相同,通過管腳復(fù)用,DS80C520具有13個(gè)中斷源(其中有6個(gè)外部中斷)、3個(gè)定時(shí)器和兩個(gè)全雙工的串行端口,大大擴(kuò)展了系統(tǒng)的資源[1]。利用它的兩個(gè)串行端口和兩片SN75LBC184相連,可以很方便地設(shè)計(jì)一個(gè)高傳輸速率、高可靠性的RS-485中繼器,其硬件電路如圖1所示。
SN75LBC184是具有瞬變高壓抑制功能的RS-485接口芯片,能抗雷擊,防靜電放電,避免因交流電故障引起的非正常高壓脈沖沖擊。最高傳輸速率可達(dá)250kbps。在傳輸速率為9600b/s,傳輸距離在1km以內(nèi),用SN75LBC184作為接口芯片的RS-485總線上理論上可以掛64個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)[2]。實(shí)際使用時(shí),因線纜長(zhǎng)度、線徑、網(wǎng)絡(luò)分布、傳輸速率不同,實(shí)際節(jié)點(diǎn)數(shù)均達(dá)不到理論值,可達(dá)到70%左右。位于總線兩端的差分端口A與B之間跨接120Ω匹配電阻,以減少由于不匹配而引起的反射、吸收噪聲,有效地抑制了噪聲干擾。
單片機(jī)DS80C520通過控制收發(fā)器SN75LBC184的收發(fā)使能端(RE#、DE)作收發(fā)控制:當(dāng)收使能端RE#為“0”時(shí),收發(fā)器準(zhǔn)備從A、B端(和總線相連)接收來(lái)自總線的數(shù)據(jù),并通過R端傳給MCU;當(dāng)發(fā)使能端DE為“1”時(shí),收發(fā)器準(zhǔn)備把從D端讀入的數(shù)據(jù)通過A、B端發(fā)送到總線上。圖中兩片SN75LBC184的收發(fā)使能端(RE#、DE)各自相連,分別由單片機(jī)的P3.3口和P1.5口控制,工作在半雙工方式下。LED1和LED2用來(lái)指示TXD0和TXD1上是否有數(shù)據(jù)發(fā)送。LED3用來(lái)指示單片機(jī)的工作狀態(tài)是否正常。
中繼器的工作原理為:兩片SN75LBC184的收發(fā)使能端一開始給低電平,準(zhǔn)備接收數(shù)據(jù)。當(dāng)其中一個(gè)收發(fā)器收到數(shù)據(jù)時(shí),比如U2,U2通過R端將數(shù)據(jù)經(jīng)單片機(jī)的RXD0腳送入串行接口0的接收緩沖區(qū)SBUF0。單片機(jī)將SBUF0中的數(shù)據(jù)轉(zhuǎn)到串行接口1的發(fā)送緩沖區(qū)SBUF1,然后讓U3的發(fā)送使能端(DE)有效,從而把U2一側(cè)的總線上的數(shù)據(jù)完整地轉(zhuǎn)送到U3一側(cè)的總線上,實(shí)現(xiàn)了中繼器的功能。反之亦然。
3 軟件設(shè)計(jì)
由于采用了具有兩個(gè)串行口的單片機(jī),中繼器的軟件設(shè)計(jì)也得到了簡(jiǎn)化。主要由三部分組成:一個(gè)主程序和兩個(gè)中斷子程序,結(jié)構(gòu)非常清晰。
在主程序中,主要是設(shè)置串口的波特率(這里設(shè)置為9600bps)和看門狗復(fù)位時(shí)間,打開兩個(gè)串口的中斷,然后進(jìn)入等待循環(huán)狀態(tài),等待串口接收中斷的產(chǎn)生(RI0或RI1為“1”),其流程圖如圖2所示。在打開兩個(gè)串口的中斷之前,先對(duì)P3.3和P1.5清“0”,讓兩片SN75LBC184處于接收狀態(tài),并讓串口工作在方式3。在“等待”的過程中如果不斷給P3.6腳輸出高、低變化的電平,則LED3就會(huì)不停地閃爍,從而可以斷定單片機(jī)在正常工作。
因?yàn)榇诠ぷ髟诜绞?,11位異步通信方式(1個(gè)起始位,8個(gè)數(shù)據(jù)位,1個(gè)附加的第9位和1個(gè)停止位),8位數(shù)據(jù)裝入接收緩沖區(qū),第9位放在對(duì)應(yīng)的RB8(0/1)中,其他兩位忽略,發(fā)送時(shí)收發(fā)器會(huì)自動(dòng)加上。第9位數(shù)據(jù)通常用作數(shù)據(jù)的奇偶校驗(yàn)位,或在多機(jī)通信中作為地址/數(shù)據(jù)的特征位。當(dāng)單片機(jī)收到第11位數(shù)據(jù)時(shí),接收中斷標(biāo)志位RI(0/1)會(huì)自動(dòng)置“1”。
以串口0接收串口1發(fā)送為例:當(dāng)RI0為“1”時(shí),程序就進(jìn)入串口0接收中斷子程序,其流程圖如圖3所示。進(jìn)入中斷子程序后,首先保護(hù)現(xiàn)場(chǎng),并關(guān)掉所有的中斷,將RI0清“0”(RI(0/1)不能自動(dòng)清“0”,只能軟件清“0”)。然后將串口0接收緩沖區(qū)SBUF0中的8位數(shù)據(jù)裝入串口1的發(fā)送緩沖區(qū)SBUF1,并將第9位數(shù)據(jù)從RB8_0轉(zhuǎn)移到RB8_1中,如有必要也可以先做奇偶校驗(yàn)。此時(shí),使P1.5輸出高電平,啟動(dòng)U3發(fā)送數(shù)據(jù)到總線。當(dāng)數(shù)據(jù)發(fā)送完畢時(shí),串口1會(huì)自動(dòng)將發(fā)送完畢狀態(tài)位TI1置“1”,整個(gè)數(shù)據(jù)轉(zhuǎn)發(fā)過程結(jié)束。在退出中斷之前,還應(yīng)當(dāng)讓串口1處于接收狀態(tài)(TI1=0,P1.5=0),并將串口1的接收中斷優(yōu)先級(jí)高于串口0。
串口1接收串口0發(fā)送的中斷子程序和上述過程完全類似,只要將相應(yīng)的端口換過來(lái)就可以了。在退出中斷之前,一定要讓兩個(gè)串口都處于接收狀態(tài),并且讓串口0的接收中斷優(yōu)先級(jí)高于串口1。兩個(gè)中斷優(yōu)先級(jí)輪換的目的是為了避免優(yōu)先級(jí)低的中斷總得不到響應(yīng)。在進(jìn)中斷時(shí)也可將P3.6置“1”,退出中斷時(shí)清“0”,讓LED3在單片機(jī)工作時(shí)一直處于閃爍發(fā)光狀態(tài)。
4 結(jié)束語(yǔ)
為了進(jìn)一步提高抗干擾能力,中繼器采用單獨(dú)+5V電源供電,并在每片芯片的電源引腳上加0.1uF的電容到地,總線采用雙絞線。本中繼器在某倉(cāng)庫(kù)管理系統(tǒng)(1個(gè)主站,16個(gè)從站,波特率為9600bps,最遠(yuǎn)通訊距離為4km)中使用,性能穩(wěn)定,性價(jià)比高,可廣泛應(yīng)用于遠(yuǎn)距離多機(jī)通訊系統(tǒng)。





