娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年02月27日(星期四)

正在發生

2018年02月27日 | 單片機與IBM-PC機的串行通信分析

發布者:WanderlustSoul 來源: eefocus關鍵字:單片機  IBM-PC機  串行通信 手機看文章 掃描二維碼
隨時隨地手機看文章

  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單片機開發系統”和“遠距離驅動器”中得到了實際應用。其效果良好,值得推廣。


關鍵字:單片機  IBM-PC機  串行通信 引用地址:單片機與IBM-PC機的串行通信分析

上一篇:10KM遠距多個單片機的主從方式串行通信分析
下一篇:IBM-PC/XT機與單片機通信系統的設計方案

推薦閱讀

在2018年平昌冬奧會的閉幕式上,300架英特爾? Shooting Star?無人機騰空而起,向在本屆奧運會上取得佳績的運動員表示祝賀。這些無人機在空中組成了絢麗多姿的圖案,由英特爾? Shooting Star?無人機拼成的奧運會吉祥物Soohorang白虎生動地出現在體育館上空,并隨后拼出立體的愛心圖案,向奧運會健兒表達感謝和喜愛。 英特爾以一個創紀錄的表演為本...
隨著柔性電子學、材料科學及微納加工技術發展,柔性/可穿戴電子技術近年來成為電子器件研究的重要領域。其中,能夠實現對外界信號精確感知的高性能柔性可延展傳感器是其中的基礎性核心元器件之一。由于具有良好曲面共形特征及輕、柔、韌等特性,柔性傳感器在人機交互、智能機器人、人工智能、可穿戴設備、醫療監測及運動健康等戰略新興領域具有廣闊的應用...
今晨,LG悄然發布新旗艦機V60 ThinQ。 新機沒有2K屏、高刷新率等特性,不免讓人失望,不過雙屏擴展的功能繼續保留,體現出一種執拗。 外形方面,V60 ThinQ正面是一塊6.8英寸1080P分辨率POLED水滴屏(20.5:9縱橫比),屏下指紋,支持Hand ID隔空操控,背部水平一字型雙攝,底部保留耳機孔。 基本參數方面,它基于驍龍865 5G平臺打造,8+128GB起步(支持m...
據華爾街日報報道,知情人士透露,拜登政府計劃允許一項旨在打擊中國技術發展的全面的法案,這一法案延續自特朗普政府,并將于下個月生效。據了解,該法案最初于2020年11月提出,使美國商務部能夠禁止其認為對國家安全構成威脅的技術相關業務交易。科技,電信,金融和其他行業的公司表示,該法案可能扼殺創新并損害競爭力,此前,這些公司曾預測隨著拜登政...

史海拾趣

問答坊 | AI 解惑

玩轉12864液晶(1)--顯示字符

在我們常用的人機交互顯示界面中,除了數碼管,LED,以及我們之前已經提到的LCD1602之外,還有一種液晶屏用的比較多。相信接觸過單片機的朋友都知道了,那就是12864液晶。顧名思義,12864表示其橫向可以顯示128個點,縱向可以顯示64個點。我們常用 ...…

查看全部問答∨

ADC和DAC應用中常被忽略的幾個關鍵參數

本帖最后由 dontium 于 2015-1-23 11:13 編輯 在前面一個討論7135的貼子里,提到了INL、DNL等幾個參數,可是似乎知道這幾個參數意義的朋友并不多。 說起來都是教科書害人。幾乎所有的教科書、參考書、文獻選編都只關心模數器件的分辨率和速度,而忽 ...…

查看全部問答∨

GPRS/CDMA選擇問題

我想用通訊模塊,傳輸數據到email。我不知道該選哪種好, 是不是帶STMP,POP3之類的協議好一點? 不知道該選GPRS類型的還是CDMA類型的?…

查看全部問答∨

進程的打開和關閉問題

A進程要關閉B進程,而且B進程不一定在運行,如果B運行了我就關閉,如果沒運行則忽略,目前只知道B的進程名字為B.exe 那么兩個問題 1.A怎樣知道B是否在運行,是不是用OpenProcess()?但是我不知道B的ID啊。 2.在A中用Terminateprocess()怎樣獲得B ...…

查看全部問答∨

內核移植的問題

自己編譯的一個內核,版本為2.6.24.4,文件系統用的是1.9.2,交叉編譯工具用的是3.4.1, 內核已經下到板子上了,現用nfs文件系統測試,啟動已經成功。然后將一個nfs服務器共享的文件 掛到板子上,也已經成功。問題來了: 有一個簡單的驅動程序sbc2 ...…

查看全部問答∨

問個弱弱的問題

#define rPCONA                (*(volatile unsigned *)0x1d20000) 這句話是定義一個指向指針的指針,那么指針rPCONA指向的值應該是0x1d20000嗎? 如果用賦值語句 rPCONA=0x1ff;那么各個地址的值應該是怎 ...…

查看全部問答∨

RT-Thread 2010年11月上海開發者聚會

這個是RT-Thread11月份的開發者聚會。 歡迎所有對RT-Thread感興趣的工程師參加,歡迎所有在RT-Thread平臺上開發應用程序的工程師參加,在會上你將能夠與RT- Thread的開發者們面對面交流:-) 也能夠向RT-Thread的開發人員提出自己的疑問,看法。歡迎 ...…

查看全部問答∨

關于wifi (bcm4329) 速度的問題

~ [ 本帖最后由 pizazzel 于 2011-2-16 21:41 編輯 ]…

查看全部問答∨

【問TI】關于買TI公司開發板的問題

你好,我買了TI公司的LM3S8962開發板,用了我五百多大洋,我想用這塊板子下載程序到另外一塊開發板上去呢?另外的板子也是LM3S8962,我自己畫的,標準JTAG接口,我下了程序,就是下不進去,請問有哪些設置嗎?怎么操作呢?能詳細介紹嗎?我用的是Ke ...…

查看全部問答∨

單片機與人機界面HMI通信組網工程技術分享

  資料下載:                                     …

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 兴山县| 涿州市| 文安县| 攀枝花市| 福鼎市| 胶州市| 临澧县| 西青区| 九江市| 随州市| 延川县| 石阡县| 门源| 黄龙县| 潮安县| 古交市| 柳河县| 元氏县| 赤城县| 体育| 旬阳县| 富源县| 龙州县| 罗山县| 桃江县| 乌拉特中旗| 宣恩县| 冀州市| 浏阳市| 星座| 水城县| 淮南市| 视频| 信宜市| 锡林浩特市| 临清市| 侯马市| 东源县| 太谷县| 田林县| 绥滨县|