51單片機和IBM - PC機是目前我國應用最廣的兩種微型計算機。作為單片機,51單片機不但功能強,體積小,價格低,而且使用方便,特別市場上提供的多種51單片機開發(fā)系統,為開發(fā)應用51單片機提供了非常方便的手段。因此,51單片機在許多領域,特別是工業(yè)控制和智能儀器領域已得到廣泛的應用。事實已證明,51單片機已成為8位微機之首。作為系統機,IBM - PC的優(yōu)點已眾所周知,可以說,IBM - PC微機的出現為微機領域帶來了一場革命。在我國,由于漢字操作系統(?CCDOS)的引入,使得IBM - PC在各個領域得到迅速的推廣使用。
串行通信是計算機進行數據通信的主要方式之一。由于其連線少,成本低,再加上有調制/解調功能,因而特別適合于距離較遠,且通信點較多的場合,如各種計算機網絡和分布式系統等。RS - 232C是最常用的一種串行通信標準。在IBM - PC微機中,一般都有1~2個標準RS - 232C串行口,簡稱COM1和COM2。利用這兩個串行口,IBM - PC可以與其他數字設備(計算機)進行一般的數據傳送,或構成局部網絡、多用戶系統和分布式控制系統等。
51單片機片內即含有一個全雙工的串行口,并具有多機通信功能,可以方便地構成多機控制系統。但是,由于51單片機的串行口并非標準的RS -232C,加上其波特率是采用系統時鐘由內部通用定時器產生的,誤差大;而其數據處理速度也比系統機低得多。因此當其與IBM - PC微機進行串行數據通信,特別是構成分布式多機控制系統時,將會遇到許多意想不到的技術問題,諸如硬件連接、波特率選擇、數據同步以及多機通信控制等。我們根據多年的實踐經驗,對這些問題提出了一些具體解決辦法,供廣大同行參考。
一、硬件連接
RS - 232C采用負邏輯。其電平范圍通常為:邏輯1=-3~-15 V;邏輯0=+3~+15 V。由于51單片機的串行口是TTL電平,故必須進行電平轉換,一般都采用MC1488(輸出)和MC1489(輸入)來完成。其連接方法如圖1- 32所示。圖中,MC1488采用土12 V電源,MC1489采用+5 V電源。IBM - PC串行口中的第4腳RTS(請求發(fā)送,輸出)與第5腳CTS(清除發(fā)送,輸入),以及第6腳DSR(數據裝置準備好,輸入)與第20腳DTR(數據終端準備好,輸出)分別連接在一起,主要是因為PC機BIOS中的INT14H(串行通信程序)在接收和發(fā)送數據時,均要判別CTS和DSR是否有效。如果用戶自己編制通信程序,采用判斷收/發(fā)緩沖區(qū)是否滿/空的辦法來完成數據輸入/輸出,則可不必短接。
順便指出,IBM - PC及其兼容機串行口中的電平轉換器通常有兩種:老式原裝機和長城0520機,采用7515075154。而一般的兼容機均用75188( MC1488)/75189 (MC1489)。1489中的每個接收門均有一個閾值電平控制端。當該腳開路或接一電容C至地時,其閾值電平VT =1. 1~1. 25 V,即當Vi≤1.1 V時,V。=1;V1≥1. 25 V時,V0=0。不難看出,這種電平與TTL電平具有兼容性。因此,圖1- 32中1488和1489均可用普通TTL反相器代換,從而省去了土12 V電源。但要注意的是,替換1488的反相器最好用OC門,以便擴大電平范圍和增加驅動電流;而替換1489的反相器輸入端應加雙向二極管電平箝位。此外,這種接法傳送距離不宜太長,一般應在3m以內(標準RS - 232C電平傳送距離可達15 m以上),距離過長,因兩端地電位不一致以及噪聲干擾會導致電平范圍出錯。
上述做法雖然省去了士12 V電源,但只適合于使用MC1488/1489的PC機,且傳送距離近。為了與標準RS - 232C電平兼容,又不用±12 V電源,可采用圖1- 33所示的準RS -232C電平轉換電路。圖中虛線框內電路產生-7.0~-9.0 V的負電壓。其工作原理是,由CMOS反相器F1和F2構成的多諧振蕩器產生f=0.7 MHz的方波,經F3和F4雙門驅動后,高電平時對Cl充電,低電平時,Cl反過來又對C2充電,從而在C2上產生一定的負電壓。這里采用CMOS反相器,主要是為了降低其自身的功耗以及提高高電平電壓。值得一提的是,如果8031的ALE腳負載不重,亦可直接利用它作為時鐘源(1 MHz),這時由Fi和F2構成的多諧振蕩器就可省去了;不過C1和C2要適當加大些。
產生負電源還有一種既簡單,又實用的方法,如圖1- 34所示。如果將RTS引出,亦可產生正電壓而代替圖1- 33中的+5 V,這樣可進一步擴大電平范
圍。但要注意的是,圖1- 34中正負電壓是從信號中提取的,其驅動能力差,因此不宜帶過重的負載。
從圖1- 33中可以看出,這種電平轉換電路省去了±12 V電源,而且僅用2只廉價的三極管取代了較貴的1488/1489,因而大大降低了接口電路的成本,是一種非常實用的方法,特別是對于像前端控制機、單片機開發(fā)系統等提供土12 V電源有困難的系統。
二、波特率的選擇
波特率是串行通信中的一個關鍵參數。通信雙方波特率的一致性直接影響數據傳輸的正確性。當誤差太大時,甚至無法進行正常的傳輸。通常對于11位的串行幀(1位起始位+8位數據位+1位標志位+1位停止位),所允許的最大波特率誤差應不超過4.5%。
RS - 232C通信標準中,標稱波特率有:50,110,150,300,600,1 200,2 400,4 800,9 600及19 200等。其中以1? 200~9 600最為常用。IBM - PC的串行通信控制器采用的是In-te18250.其波特率是采用1.843 2 MHz專用時鐘,由16位的除法器產生的,可以精確地定出各種標稱波特率。而51單片機的波特率是采用系統時鐘由定時器T,產生的。由于系統時鐘一般為6.0 MHz或12.O MHz,有效位數少,而T.又是用的8位自動裝入定時方式,因此,很難精確地定出各種標稱波特率。當兩臺51單片機進行串行通信時,只要兩機的系統時鐘和定 時常數一致,就能保證數據正確傳輸。這時的波特率只是反映傳送的快慢,而不是非要達到多少精度。因為兩機的波特率即使有誤差,也只是系統時鐘(晶體)上的誤差。這種誤差通常是很小的,可忽略不計;但當51單片機與IBM - PC進行串行通信時,這種誤差就大了。以4800波特為例:
對于PC機,除法器控制常數為:
無誤差。式中,B為波特率。
對于51單片機,當系統時鐘fosc=6 MHz時,定時常數為:
因n必須為整數,四舍五入后n=253(FDH);反過來,因取整得出的實際波特率為:
波特率誤差:
比所允許的誤差大,當然數據也就無法正確傳輸了。同理,不難證明,在1200-9600的標稱波特率范圍內,只有1 200是唯一可用的,其n=243(F3H),x-96(0060H)。顯然,對于那些想用高波特率傳送數據的用戶來說,這無形之中提出了一個難題。那么是否有辦法解決這一難題呢?辦法是有的,只是不能局限于幾個標稱波特率上。其算法如下:
①假定51單片機上的一個定時常數n,一般n取值為F4H~FEH(波特率為1200~9600);
大n值重復上述①~④步求出下一個可用波特率。
根據上述算法,不難求出1 200~9 600的所有可用波特率(假定fosc=6.0 MHz),如表1- 16所列。注意,如果使用表1- 16中的非標稱波特率來進行通信,那么PC機程序就不能調用INT14H的功能0來初始化串行口波特率了,而只能采用下述子程序(以COMi為例),即直接往除法器送控制常數。
三、數據同步
串行通信分同步和異步兩種方式。盡管51單片機的串行口既可進行同步通信(方式0),又可進行異步通信(方式1~3),但IBM - PC機的串行口只有異步方式。在異步串行通信中,波特率的一致性是數據位同步的保證,而幀同步只能靠DSR/DTR和RTS/CTS等異步通信控制信號了。遺憾的是,51單片機串行口沒有這些控制信號。因此,當51單片機與IBM - PC進行串行通信時,雖然波特率選擇一致,能保證單個字節(jié)傳輸正確,但無法保證大塊數據傳輸正確。例如,當PC機往單片機每次單獨傳送一字節(jié)時,51單片機都能正確接收,但連續(xù)傳送一批數據時,由于單片機比PC機的指令處理速度低,PC機發(fā)送一字節(jié)后,單片機可能還沒取走,PC機就發(fā)出下一字節(jié)了。這樣就會導致大量數據被丟失。由此可見,在PC機與51單片機的串行通信中,數據幀(1幀-10或11位)同步也是一關鍵問題,下面介紹兩種同步方法。
1.硬件方法
在圖1- 32的基礎上,借助于8031 P。口的其他位來模擬各異步通信控制信號。其連接方法如圖1- 35所示。這樣利用RTS/CTS和DSR/DTR就可方便地完成異步雙向串行數據傳輸了。如果PC機程序不是通過調用INT14H,而是通過自己設計的一個子程序來完成收/發(fā)數據的,那么只要使用兩組信號中任意一組,即可完成異步傳輸,這樣又可省去兩根連線。
通過8031外部擴展一個異步通信控制器8251,也是一種行之有效的方法,只是那樣做以后,硬件成本提高,軟件控制也變得復雜了。
2.軟件方法
一種很容易想到的軟件方法就是“延時法”。例如,當PC機要往單片機發(fā)送一批數據時,每發(fā)一個字節(jié),就延時一段時間,以便單片機能及時將剛收到的字節(jié)取走并處理完。這種做法的困難在于延時常數不好確定。一種改進方法就是,一方面發(fā)送方采取一定的延時,另一方面在發(fā)送一組(可以是一字節(jié),也以可是若干字節(jié))數據后,接收方應回答一個數據信號(不是控制信號!)。該信號既可表示接收到的數據正確與否,又可起同步作用。
四、多機通信
51單片機的串行口在方式2(波特率固定)和方式3(波特率可變)時具有多機通信功能。這為組成多機控制系統提供了方便。IBM - PC微機的軟、硬件資源相當豐富,特別是它的漢字圖形功能,為用戶提供了一個非常友好的界面。因此,目前大多數分布式控制系統均采用51單片機作前端控制器,IBM - PC作后臺主機。這種控制系統對通信接口提出了新的要求:首先,1臺PC機要帶n臺51單片機控制器.故其發(fā)送數據總線(TxD)必須具有較強大的負載能力;其次,n臺單片機要往PC機傳輸數據,必須解決數據總線(RxD)競爭問題;最后,這種控制系統的通信距離一般比較遠,環(huán)境也比較差,因此通信接口必須具有較強的抗干擾能力。顯然,標準的RS - 232C接口難以滿足這些要求。為此,必須采用一種新的串行通信標準——RS - 422A。在這種標準中,所有信號均采用平衡式差分傳輸。MC3486/3487是最常用的一種RS - 422A電平轉換器,利用它構成的典型多機控制系統如圖1- 36所示。圖中,線接收器MC3486的所有控制端均接+5 V,即一直使能。單片機端線驅動器MC3487的控制端接P1.0平時應為低,只有在與PC機聯系上須傳送數據時才置高。如果PC機巡查各單片機,就可保證數據總線不發(fā)生競爭。PC機的3487控制端接RTS,平時為低,一旦發(fā)送數據就為高。注意,MC3486/3487的輸入/輸出是TTL電平,因此圖中加了4只二極管箝位。此外,如果PC機RS - 232C上用的不是1489而是75154,那么3487的輸出信號必須經過一個RS一232C電平轉換器,才能接到PC機的RxD端。這種接口電路在波特率不太高時,傳輸距離可達幾公里,而且由于兩機地線不連在一起,因此有一定的隔離作用。
在51單片機的串行口控制寄存器( SCON)中,有一個“地址監(jiān)聽”控制位SM2。當置SC2=1時,只有當接收到的串行數據的第9位RB8 =1時,才激發(fā)“接收數據有效”標志RI;而PC機發(fā)送數據時,可通過程序設置第9位奇校驗(1)或偶校驗(0)。利用這兩點,對于圖1- 36所示的多機系統.PC機就可方便地與N臺單片機進行數據通信。假設PC機要從所有控制單片機巡回取一批數據,這時51單片機和PC機的程序框圖如圖1- 37所示。圖中,PC機必須將串行數據格式設置成8個數據位+1位停止位,當附加奇校驗位時,其控制常數(送3BFH寄存器)為2BH,偶校驗則為3BH。發(fā)送數據時,如不調用INT14H,則要注意將RTS置成1,以便打開3487。由于是單片機往PC機傳送大塊數據,后者的處理速度高得多,因此不必采取幀同步措施;但為避免數據傳輸出錯,可增加檢錯、糾錯功能。
評論
查看更多