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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > PC機與單片機多機實時通信的設(shè)計與實現(xiàn)

          PC機與單片機多機實時通信的設(shè)計與實現(xiàn)

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

          在多媒體語音教學(xué)系統(tǒng)中,主計算機與各學(xué)生機之間需要進行雙向指令傳送。由于串行通信具有高效、可靠、價格便宜等優(yōu)點,故本系統(tǒng)采用了串行通信的方法。 Windows95是非實時操作系統(tǒng),對此本系統(tǒng)設(shè)計了以單片機為核心的智能接口單元,負(fù)責(zé)完成與64臺從機的實時通信。整個通信系統(tǒng)由一臺PC機和一臺負(fù)責(zé)通信及相關(guān)分組配對功能的智能接口單元和64臺以單片機為核心的學(xué)生單元組成。本系統(tǒng)的單片機采用89C51。智能接口單元通過串行接口芯片8251 及電平轉(zhuǎn)換器MAX202與主機通信,通過單片機自帶串口用接口芯片MAX487與從單片機之間進行通信。智能接口單元與6臺從單片機之間為總線式網(wǎng)絡(luò)結(jié)構(gòu),采用接口標(biāo)準(zhǔn)。這是半雙工的串行通信接口標(biāo)準(zhǔn),由于采用平衡驅(qū)動差分接收電路,具有抗干擾能力強的特點,適用于遠距離、高速率下的多機通信。拓?fù)浣Y(jié)構(gòu)示意圖如圖1所示。硬件接口示意圖見圖2。

          1 通信協(xié)議的約定

          在通信過程中,PC機將指令打包后發(fā)給智能接口單元(以下簡稱主單片機)。主單片機收到完整一包后將包解開,按對每個從機的指令分別發(fā)送,同時將各從機發(fā)給PC機的指令送給PC 機。由于64個從機和主單片機使用同一串口通信線,為避免發(fā)生沖突,主單片機處于主動狀態(tài),按一定的定時間隔與每一臺從機順序通信。主單片機在與每一臺從機通信過程中先發(fā)送地址,從機收到地址后若與自己的地址一致,則繼續(xù)接收主單片機發(fā)來的一個字節(jié)的命令碼,從機收到命令后,將自己的一個字節(jié)的命令發(fā)送到主單片機。主單片機完成與64個從機的通信需要64個定時間隔,只要定時間隔足夠短,主單片機與從機基本上可以實現(xiàn)實時通信。在整個通信過程中,主單片機起著通信樞紐的作用。

          2 Windows95下實現(xiàn)串行通信的方法

          6.0提供了功能強大的MSCOMM.VBX通信控件,它提供了通過串口發(fā)送和接收數(shù)據(jù)的通信能力,不但包括了全部WindowsAPI中關(guān)于串行通信的 16個函數(shù)所完成的功能,而且開拓了更多的方便用戶設(shè)計的對象屬性來滿足不同用戶不同業(yè)務(wù)的需求。該通信控件可以采用事件驅(qū)動和查詢方式來處理和解決通信軟件的開發(fā)和設(shè)計。其中事件驅(qū)動是較常用的方式。該控件使用OnComm事件來實現(xiàn)對通信中出現(xiàn)的相關(guān)事件以及檢測和處理通信錯誤等方面的問題的處理。例如,根據(jù)RThreshold 屬性設(shè)置值,當(dāng)接收緩沖區(qū)內(nèi)接收到相應(yīng)字節(jié)的字符時,引發(fā)OnComm事件,在事件處理程序中接收數(shù)據(jù)。
          Private Sub Form—Load() '完成對串口控件的初始化

          MSComm1.CommPort = 1 '選用COM1串行口

          MSComm1.Settings= "9600,N,8,1"'9600波特率,無奇偶校驗,8位數(shù)據(jù),一位停止位。

          MSComm1.InputLen= 0 '當(dāng)輸入占用時,告訴控件讀入整個緩沖區(qū)。

          MSComm1.InBufferSize=1024 '設(shè)置接收緩沖的字節(jié)長度

          MSComm1.InBufferCount=0 '清除接收緩沖區(qū)數(shù)據(jù)

          MSComm1.OutBufferCount=0 '清除發(fā)送緩沖區(qū)數(shù)據(jù)

          MSComm1.RThreshold= 3 '接收緩沖區(qū)接收到3個字符后引發(fā)OnComm事件。

          MSComm1.InputMode= comInputModeBinary '接收二進制格式的數(shù)據(jù)

          MSComm1.PortOpen= True '打開端口。

          End Sub

          Private Sub MSComm1—OnComm() '處理OnComm事件
          Dim Buf As Variant

          Dim Data() As Byte

          Select Case MSComm1.CommEvent

          Case comEventRxOver '接收緩沖區(qū)溢出。

          MsgBox "接收緩沖區(qū)溢出"

          Case comEventTxFull '傳輸緩沖區(qū)已滿。

          MsgBox "傳輸緩沖區(qū)已滿"

          Case comEvReceive ' 收到 RThreshold # of Data

          Buf = MSComm1.Input

          Data = Buf

          '

          '在這里可加入對接收數(shù)據(jù)的處理

          '

          End Select

          End Sub

          發(fā)送程序較為簡單,可對Output屬性賦值完成。

          Private Sub Command1—Click() '處理發(fā)送命令

          Dim Buf As Variant

          Dim Data(66) As Byte '定義發(fā)送數(shù)據(jù)的字節(jié)數(shù)組

          '

          '將需發(fā)送的數(shù)據(jù)賦給Data數(shù)組

          '
          Buf = Data

          MSComm1.Output = Buf

          End Sub


          上一頁 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); })();