51單片機和IBM - PC機是目前我國應用最廣的兩種微型計算機。作為單片機,51單片機不但功能強,體積小,價格低,而且使用方便,特別市場上提供的多種51單片機開發系統,為開發應用51單片機提供了非常方便的手段。因此,51單片機在許多領域,特別是工業控制和智能儀器領域已得到廣泛的應用。事實已證明,51單片機已成為8位微機之首。作為系統機,IBM - PC的優點已眾所周知,可以說,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(請求發送,輸出)與第5腳CTS(清除發送,輸入),以及第6腳DSR(數據裝置準備好,輸入)與第20腳DTR(數據終端準備好,輸出)分別連接在一起,主要是因為PC機BIOS中的INT14H(串行通信程序)在接收和發送數據時,均要判別CTS和DSR是否有效。如果用戶自己編制通信程序,采用判斷收/發緩沖區是否滿/空的辦法來完成數據輸入/輸出,則可不必短接。
順便指出,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,因而大大降低了接口電路的成本,是一種非常實用的方法,特別是對于像前端控制機、單片機開發系統等提供土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進行串行通信時,雖然波特率選擇一致,能保證單個字節傳輸正確,但無法保證大塊數據傳輸正確。例如,當PC機往單片機每次單獨傳送一字節時,51單片機都能正確接收,但連續傳送一批數據時,由于單片機比PC機的指令處理速度低,PC機發送一字節后,單片機可能還沒取走,PC機就發出下一字節了。這樣就會導致大量數據被丟失。由此可見,在PC機與51單片機的串行通信中,數據幀(1幀-10或11位)同步也是一關鍵問題,下面介紹兩種同步方法。
1.硬件方法
在圖1- 32的基礎上,借助于8031 P。口的其他位來模擬各異步通信控制信號。其連接方法如圖1- 35所示。這樣利用RTS/CTS和DSR/DTR就可方便地完成異步雙向串行數據傳輸了。如果PC機程序不是通過調用INT14H,而是通過自己設計的一個子程序來完成收/發數據的,那么只要使用兩組信號中任意一組,即可完成異步傳輸,這樣又可省去兩根連線。
通過8031外部擴展一個異步通信控制器8251,也是一種行之有效的方法,只是那樣做以后,硬件成本提高,軟件控制也變得復雜了。
2.軟件方法
一種很容易想到的軟件方法就是“延時法”。例如,當PC機要往單片機發送一批數據時,每發一個字節,就延時一段時間,以便單片機能及時將剛收到的字節取走并處理完。這種做法的困難在于延時常數不好確定。一種改進方法就是,一方面發送方采取一定的延時,另一方面在發送一組(可以是一字節,也以可是若干字節)數據后,接收方應回答一個數據信號(不是控制信號!)。該信號既可表示接收到的數據正確與否,又可起同步作用。
四、多機通信
51單片機的串行口在方式2(波特率固定)和方式3(波特率可變)時具有多機通信功能。這為組成多機控制系統提供了方便。IBM - PC微機的軟、硬件資源相當豐富,特別是它的漢字圖形功能,為用戶提供了一個非常友好的界面。因此,目前大多數分布式控制系統均采用51單片機作前端控制器,IBM - PC作后臺主機。這種控制系統對通信接口提出了新的要求:首先,1臺PC機要帶n臺51單片機控制器.故其發送數據總線(TxD)必須具有較強大的負載能力;其次,n臺單片機要往PC機傳輸數據,必須解決數據總線(RxD)競爭問題;最后,這種控制系統的通信距離一般比較遠,環境也比較差,因此通信接口必須具有較強的抗干擾能力。顯然,標準的RS - 232C接口難以滿足這些要求。為此,必須采用一種新的串行通信標準——RS - 422A。在這種標準中,所有信號均采用平衡式差分傳輸。MC3486/3487是最常用的一種RS - 422A電平轉換器,利用它構成的典型多機控制系統如圖1- 36所示。圖中,線接收器MC3486的所有控制端均接+5 V,即一直使能。單片機端線驅動器MC3487的控制端接P1.0平時應為低,只有在與PC機聯系上須傳送數據時才置高。如果PC機巡查各單片機,就可保證數據總線不發生競爭。PC機的3487控制端接RTS,平時為低,一旦發送數據就為高。注意,MC3486/3487的輸入/輸出是TTL電平,因此圖中加了4只二極管箝位。此外,如果PC機RS - 232C上用的不是1489而是75154,那么3487的輸出信號必須經過一個RS一232C電平轉換器,才能接到PC機的RxD端。這種接口電路在波特率不太高時,傳輸距離可達幾公里,而且由于兩機地線不連在一起,因此有一定的隔離作用。
在51單片機的串行口控制寄存器( SCON)中,有一個“地址監聽”控制位SM2。當置SC2=1時,只有當接收到的串行數據的第9位RB8 =1時,才激發“接收數據有效”標志RI;而PC機發送數據時,可通過程序設置第9位奇校驗(1)或偶校驗(0)。利用這兩點,對于圖1- 36所示的多機系統.PC機就可方便地與N臺單片機進行數據通信。假設PC機要從所有控制單片機巡回取一批數據,這時51單片機和PC機的程序框圖如圖1- 37所示。圖中,PC機必須將串行數據格式設置成8個數據位+1位停止位,當附加奇校驗位時,其控制常數(送3BFH寄存器)為2BH,偶校驗則為3BH。發送數據時,如不調用INT14H,則要注意將RTS置成1,以便打開3487。由于是單片機往PC機傳送大塊數據,后者的處理速度高得多,因此不必采取幀同步措施;但為避免數據傳輸出錯,可增加檢錯、糾錯功能。
本節中介紹的方法均已在“長途電話臺記賬號查詢系統”、“分布式糧倉溫濕度巡測系統”、“51單片機開發系統”和“遠距離驅動器”中得到了實際應用。其效果良好,值得推廣。
上一篇:10KM遠距多個單片機的主從方式串行通信分析
下一篇:IBM-PC/XT機與單片機通信系統的設計方案
推薦閱讀
史海拾趣
進入新世紀,隨著科技的快速發展,電子產品更新換代速度日益加快。ANSHAN公司深知技術創新的重要性,不斷加大研發投入,積極引進先進技術和設備。在一次重要的技術攻關中,公司研發團隊成功突破了一項關鍵技術難題,推出了一款性能卓越、價格實惠的新型電子產品,受到了市場的熱烈歡迎。這一技術突破不僅提升了公司的核心競爭力,也為公司的后續發展奠定了堅實基礎。
Concord Semiconductor Corp深知人才是企業發展的根本。因此,公司高度重視人才培養和引進工作。公司建立了一套完善的人才培養機制,通過內部培訓、外部引進等方式,不斷提升員工的技能水平和綜合素質。同時,公司還積極營造良好的工作氛圍和企業文化,吸引更多優秀人才加入。這些人才的加入為公司的持續發展提供了有力保障。
質量是企業的生命線。維峰電子始終將質量管理作為公司發展的重中之重。公司建立了完善的質量管理體系,從原材料采購、生產過程到產品檢驗等各個環節都進行嚴格把控。同時,公司還引入了先進的檢測設備和技術,確保產品的質量和性能達到最高標準。這些措施的實施不僅提升了產品的競爭力,也贏得了客戶的信任和好評。
FINECHIPS公司始終堅持客戶導向的經營理念,深入了解客戶需求,提供定制化的產品和服務。在一次與某知名電子產品制造商的合作中,FINECHIPS根據客戶的特殊需求,迅速調整產品設計和生產流程,成功開發出了一款符合客戶要求的定制化芯片。這次合作不僅加深了雙方的合作關系,還為FINECHIPS贏得了更多潛在客戶的信任和青睞。
Embedded Planet公司自成立之初就注重技術創新和與業界領導者的合作。通過持續研發,公司成功開發出一款革命性的嵌入式系統解決方案,這一解決方案能夠顯著提升設備的性能和效率。同時,Embedded Planet積極與卓聯半導體公司合作,共同推出了一款偽線模塊,該模塊能夠大幅度降低通過分組網絡傳送TDM業務的網絡設備的復雜性,并縮短開發時間。這一創新產品得到了市場的廣泛認可,也為公司贏得了更多的合作機會。
在技術創新方面,三禮公司一直保持著領先地位。2009年,公司成功完成了UPI、DPI壓模型電感量產布線及自制粉料能力,并獲得了Texas Instrument認證。同時,公司重新發布了愿景并重新定義了3L,將持續改善、精益生產、以客為尊作為公司的三個核心L。隨后,公司成立了精實中心,進一步推進精益生產的自動化配置,實現了生產效率的大幅提升和不良品及庫存的減少。
在我們常用的人機交互顯示界面中,除了數碼管,LED,以及我們之前已經提到的LCD1602之外,還有一種液晶屏用的比較多。相信接觸過單片機的朋友都知道了,那就是12864液晶。顧名思義,12864表示其橫向可以顯示128個點,縱向可以顯示64個點。我們常用 ...… 查看全部問答∨ |
本帖最后由 dontium 于 2015-1-23 11:13 編輯 在前面一個討論7135的貼子里,提到了INL、DNL等幾個參數,可是似乎知道這幾個參數意義的朋友并不多。 說起來都是教科書害人。幾乎所有的教科書、參考書、文獻選編都只關心模數器件的分辨率和速度,而忽 ...… 查看全部問答∨ |
A進程要關閉B進程,而且B進程不一定在運行,如果B運行了我就關閉,如果沒運行則忽略,目前只知道B的進程名字為B.exe 那么兩個問題 1.A怎樣知道B是否在運行,是不是用OpenProcess()?但是我不知道B的ID啊。 2.在A中用Terminateprocess()怎樣獲得B ...… 查看全部問答∨ |
|
這個是RT-Thread11月份的開發者聚會。 歡迎所有對RT-Thread感興趣的工程師參加,歡迎所有在RT-Thread平臺上開發應用程序的工程師參加,在會上你將能夠與RT- Thread的開發者們面對面交流:-) 也能夠向RT-Thread的開發人員提出自己的疑問,看法。歡迎 ...… 查看全部問答∨ |
|
你好,我買了TI公司的LM3S8962開發板,用了我五百多大洋,我想用這塊板子下載程序到另外一塊開發板上去呢?另外的板子也是LM3S8962,我自己畫的,標準JTAG接口,我下了程序,就是下不進去,請問有哪些設置嗎?怎么操作呢?能詳細介紹嗎?我用的是Ke ...… 查看全部問答∨ |