<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 利用MSM7512B的PC機和單片機遠程通信

          利用MSM7512B的PC機和單片機遠程通信

          作者: 時間:2012-02-09 來源:網(wǎng)絡 收藏

          是一款單片F(xiàn)SK調制解調器。他符合ITUT V.23標準,可以支持1200 b/s半雙工或1 200 b/s收/75 b/s發(fā)全雙工2種數(shù)據(jù)傳輸方式。用于控制或單向數(shù)據(jù)比較方便,這樣的系統(tǒng)往往執(zhí)行端由小巧的組成,處理控制端由計算機組成。如通過網(wǎng)絡的抄表,報警,檢測和遠程在系統(tǒng)編程。但如果需要經(jīng)過模擬接入網(wǎng)的遠程雙向數(shù)據(jù),問題就不簡單了。這就引出了如何 進行機和之間的遠程問題。

          本文引用地址:http://www.ex-cimer.com/article/172148.htm

          1通信方案與模式

          通信方案應由具體應用決定。當機和要通過公共電話交換網(wǎng)進行通信時,由于MSM7512B沒有附加其他功能電路,因此在發(fā)起連接端需要加接撥號電路,在應答連接端需要加接振鈴檢測電路。如果連接請求是由計算機發(fā)起的,其通信方案可如圖1所示。

          MSM7512B的14,15腳 MOD1,MOD2是通信工作模式控制。當MOD2=0,MOD1=0時,芯片處于發(fā)送模式,只能以1 200 b/s向外發(fā)送數(shù)據(jù);而MOD2=0,MOD1=1時,處于接收模式,可以以1 200 b/s的速率接收數(shù)據(jù),也可以以75 b/s的速率發(fā)送數(shù)據(jù)。可惜MSM7512B沒有一種模式可以以75 b/s接收數(shù)據(jù),因此當機端和單片機端都采用MSM7512B時,無法用全雙工發(fā)送接收數(shù)據(jù)。

          18.jpg

          然而計算機與單片機之間的數(shù)據(jù)傳輸是雙向的,如果沒有應答確認,通信過程就難以為續(xù)。這就引出了如何用2個MSM7512B以物理層的半雙工實現(xiàn)鏈路層雙向通信的問題。也就是說,一方使用MOD2=0,MOD1=0,另一方使用MOD2=0,MOD1=1,并且這2種模式需要在通信過程中不斷轉換。

          2模式轉換中必須注意的問題

          根據(jù)以上提出的設計方案,通過單向的通信測試發(fā)現(xiàn)兩個方向的單工模式都是可行的。但這并不意味著半雙工通信一定可行,當在連接建立后的通信過程中改變調制解調器模式從而改變收發(fā)方向時,接收的數(shù)據(jù)就會時而正確時而不正確。顯然,在通信過程中轉變模式是一個值得探討的問題。經(jīng)過多次反復的測試和分析,發(fā)現(xiàn)雙機的MSM7512B都處于接收狀態(tài)時,也就是兩者都不發(fā)送數(shù)據(jù)時,一方居然能接收到一些奇怪的數(shù)據(jù)。這說明如果一方已經(jīng)從發(fā)送模式轉換為接收模式而另一方還沒來得及轉換,通信雙方將同時處于接收狀態(tài)(見圖2),而這時模擬信道上信號為零,其上的噪聲被MSM7512B誤認為是信號加以接收,從而導致一些干擾數(shù)據(jù)的產(chǎn)生進而影響正常通信。

          19.jpg

          為此需制定新的通信時序,用以保證在通信過程中雙方不可能同時出現(xiàn)在接收狀態(tài),也就是雙方或者都處于發(fā)送狀態(tài),或者一發(fā)一收。圖3表示了這種新的通信時序中PC方發(fā)數(shù)據(jù),單片機方發(fā)應答的情形。其中Td是數(shù)據(jù)傳輸時延,Tc是MSM7512B模式轉換時延,T1、T2為避免雙方同時處于接收狀態(tài)而設置的人為延遲。單片機方的保存數(shù)據(jù)僅在接收到正確的幀后操作,而若是在等待接收重傳幀時則不操作,所需時間為Tsave。同樣,PC方的裝載數(shù)據(jù)也是在發(fā)送新幀時操作,而重傳幀時也無需操作,所需時間為Tload。

          20.jpg

          在正常收發(fā)情況下(無重傳),對單片機而言,一收到來自計算機的數(shù)據(jù),緊接著就改變?yōu)榘l(fā)模式,但改變?yōu)榘l(fā)模式后并不立即發(fā)應答,而要延遲T1時間等待計算機準備好收狀態(tài)再發(fā)應答。單片機發(fā)完應答后也不能立即轉換為收模式,而應延遲T2時間保證計算機方在此之前已轉移為發(fā)送模式。如果是確認應答,就保存數(shù)據(jù),然后轉為收模式,如果是否認應答,直接轉為收模式。對計算機端而言,狀態(tài)轉移過程類似。即計算機一收到來自單片機的應答立即改變?yōu)榘l(fā)模式,如果是確認應答,裝載下一組數(shù)據(jù),然后延遲T1時間等待單片機準備好接收狀態(tài)再發(fā)數(shù)據(jù)。如果是否認應答,直接延遲T1時間等待單片機準備好接收狀態(tài),然后重發(fā)數(shù)據(jù)。計算機發(fā)完數(shù)據(jù)后也不能立即轉換為收模式,而應延遲T2時間保證單片機方在此之前已轉移為發(fā)送應答模式。顯然,在鏈路對稱的情況下,假定裝載數(shù)據(jù)和保存數(shù)據(jù)時間相同,應有T1>T2。

          那么如何確定T1,T2呢?為了保證在通信過程中雙方不能同時出現(xiàn)在接收狀態(tài)(也就是雙方或者都處于發(fā)送狀態(tài),或者一發(fā)一收),則不難得出如下關系式:

          21.jpg

          因為Tsave和Tload都與具體的幀長度有關,即與機器速率有關,例如單片機處理數(shù)據(jù)要慢于PC機,因此幀越長,保存數(shù)據(jù)時間就越大于裝載數(shù)據(jù)時間,為保證正確的模式轉換,T1隨之增加。所以延時值即T1,T2的取值在數(shù)據(jù)傳輸速率一定時也要依具體的數(shù)據(jù)長度而定。通過實驗得出當幀長度為54字節(jié)時T1,T2的取值為100 ms,50ms比較合理。而幀長度為100字節(jié)時T1,T2的取值為200 ms、100 ms比較合理。針對其他長度的T1,T2的選取可以用試湊法,測試多組數(shù)據(jù)比較選取較好的。選取的原則就是在保證數(shù)據(jù)傳輸可以正常進行的前提下選取較小值。

          3傳輸效率

          從圖3的時序圖可以看出如下關系:

          設幀長度為N1字節(jié),應答長度為N2字節(jié),數(shù)據(jù)傳輸速率為Rb/s。當每字節(jié)10個碼元時,傳輸一段數(shù)據(jù)的總耗時Ts為
          Ts≈2T1+2Tc+2Td+[(N1+N2)×10/R]×1 000 (ms)(3)

          其中Td與路徑長度和媒介有關,Tc與調制解調芯片有關,一般均較小。由于傳輸效率與傳輸時間成反比,因此在N1,N2,R取值一定時,式(3)表明傳輸效率主要由T1決定,即T1選取越小傳輸效率越高。注意到延時T2是為了保證通信過程中,在收方轉變?yōu)榘l(fā)送模式之前,發(fā)方仍處于發(fā)送模式,同時也要保證在對方數(shù)據(jù)發(fā)出之前轉變?yōu)榻邮漳J?,他的選取只要滿足關系式(1)即可,表面上看與傳輸效率無關,但由于T1受到T2的制約,所以隱含著對T2的要求。由此可見,合理選取模式轉換的人為延遲時間T1和T2,是提高傳輸效率的關鍵所在。

          采用以上方案,PC機和單片機之間就都可以使用MSM7512B正確地進行遠程數(shù)據(jù)的發(fā)送和接收了。




          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();