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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 純軟件實現(xiàn)單片機(jī)遠(yuǎn)程通信

          純軟件實現(xiàn)單片機(jī)遠(yuǎn)程通信

          作者: 時間:2012-03-16 來源:網(wǎng)絡(luò) 收藏

          串行口接收和發(fā)關(guān)的工作原理和過程如下:復(fù)位后,執(zhí)行初始化程序時,定義P1口為位控方式,其中P1.0和P1.1定義為輸入,P1.2和P1.3定義為輸出。P1.2初始化為1, P1.3初始化為0,這樣發(fā)送信號處于停止位(差分電平1)。定義INT0為負(fù)沿觸發(fā)。允許中斷且定義成高優(yōu)先級,然后開中斷,兩機(jī)進(jìn)入隨時可開始串行的等待狀態(tài)。A、B不時,兩機(jī)的收發(fā)均為1,一旦某機(jī)(假設(shè)為A)需要與對方,A機(jī)以約定的波特率(假定為9600bps),通過 P1.2和P1.3發(fā)送。發(fā)關(guān)和接收一個字節(jié)的過程如下:

          A 機(jī)發(fā)送端首先發(fā)送起始位(0電平),B機(jī)INT0引腳產(chǎn)生下跳沿后,產(chǎn)生中斷申請。B機(jī)CPU響應(yīng)此中斷后,執(zhí)行INT0中斷服務(wù)子程序。在中斷服務(wù)子程序開始,用位輸入指令讀入P3.6狀態(tài),如果是1電平,則表明此次中斷是受干擾所致,因而取消此次接收過程,中斷返回;如果P3.6狀態(tài)讀入電產(chǎn)是0,則表明本次中斷確系A(chǔ)機(jī)發(fā)送超始位所引起,經(jīng)精確延時,在A機(jī)發(fā)送各數(shù)據(jù)位中間處進(jìn)行采樣,獲得各數(shù)據(jù)位的狀態(tài),最后生成一個字節(jié),送有關(guān)單元之后中斷返回。雖然送往INT0的信號為TTL電平,但是由于它的傳輸速率非常之低,加上抗干擾措施,所以仍然可以有效地傳輸1200米。

          串行中通信的關(guān)鍵是如何以較高的波特率可靠地數(shù)據(jù)的發(fā)送和接收。下面介紹一組以9600bps波特率設(shè)計,用MCS-51匯編語言編寫的具有很強(qiáng)抗干擾能力和很高可靠性的收發(fā)一個字節(jié)的子等等程序。

          軟件串行通信的編程

          串行通信要成功接收必須解決以下關(guān)鍵技術(shù):(1)要準(zhǔn)確、快速檢測出對方發(fā)出的超始位以及起始位負(fù)跳變的時刻;(2)保證在每個數(shù)據(jù)位中間采樣;(3)具有有效的校驗和查錯手段。

          我們針對性地采取以下措施:用定義成高級中斷的外中斷引腳下接收線相連,來及時捕捉起始位信息,并在確定采樣時刻的計算中扣除中斷響應(yīng)滯后的延時時間;精心設(shè)計、編寫程序,逐條計算指令實際執(zhí)行時間,排除其他中斷干擾(關(guān)中斷),從而保證在每個數(shù)據(jù)位中間處進(jìn)行采樣;每位重復(fù)采樣多次,確定各數(shù)據(jù)位的狀態(tài),從而可大大減少通信常見的瞬態(tài)干擾(其特點是幅度大、作用時間短、隨機(jī)性強(qiáng))對通信的不良影響。綜合采用上述技術(shù)措施以中斷方式工作的接收(1 幀)的中斷服務(wù)源程序見程序清單):

          以上指令共46個機(jī)器周期(T),加上中斷響應(yīng)平均延時5個機(jī)器周期,所以程序執(zhí)行到此,即A機(jī)發(fā)送起始位(開始變低)到此已經(jīng)歷51T。由于MCS-51指令的1個機(jī)器周期(T)相當(dāng)于12個時鐘周期,所以當(dāng)用12MHz的晶振時,1個機(jī)器周期(1T)相當(dāng)于是1μs。51T相當(dāng)于51μs。

          從A機(jī)發(fā)出超始位到此共延時51T+4T+88T=143T,相當(dāng)于143μs。

          傳輸率為9600bps時,每位費時104μs(即1s/9600)。從起始位開始到D0 位中間1.5位,費時1.5×104μs=156μs。下面程序在 156μs及其前后各11μs處對D0位進(jìn)行共3次采樣,記錄D0采樣結(jié)果為0次數(shù)。如果3次采樣結(jié)果為0的次數(shù)小于等于1,則判斷D0=1。如果3次采樣結(jié)果為0的次數(shù)大于等于2,則判斷D0=0。這樣極大地增強(qiáng)了串行通信的可靠性。然后再經(jīng)過延時后對其他各位數(shù)據(jù)進(jìn)行同樣的三次采樣,直到D0~D7共 8位數(shù)據(jù)全部采樣結(jié)束。

          以上程序執(zhí)行用去40T,加上前面的143T,共花去183μs。每次返回NEXT3循環(huán)一次,讀入一位數(shù)據(jù)。在程序輸入NEXT3前,給R0賦值02H,就能保證以后各位數(shù)據(jù)位3次采樣的準(zhǔn)確時刻。此中斷服務(wù)子程序段不僅能在每位數(shù)據(jù)采樣,而且還在中間時刻前后11μs各采樣1次。以3次數(shù)據(jù)的多數(shù)結(jié)果確定該位的值,可大大降低因干擾出錯的概率,因此在干擾嚴(yán)重的通信中有很強(qiáng)的適應(yīng)性。

          結(jié)語

          本文介紹的GMS97C2051遠(yuǎn)程通信的純軟件方法和程序也適合于ATMEL公司的AT89C2051,對其他單片機(jī)的遠(yuǎn)程通信也具有一定的參考價值。文中提供的軟件接口方法和源程序經(jīng)實際應(yīng)用表明,該方法可延長通信距離至 1200米(9600bps時)。本方法的不足之處在于軟件編程要求比較高,如果要實現(xiàn)即軟件編程簡單、又通用性好的單片機(jī)遠(yuǎn)程通信,還是要使用RS- 232/RS-485/RS-422轉(zhuǎn)換器或光隔遠(yuǎn)程收發(fā)器。


          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁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); })();