<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > PC機與單片機多機實(shí)時(shí)通信的設計與實(shí)現

PC機與單片機多機實(shí)時(shí)通信的設計與實(shí)現

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

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

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

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

2 Windows95下實(shí)現串行通信的方法

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

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

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

MSComm1.InputLen= 0 '當輸入占用時(shí),告訴控件讀入整個(gè)緩沖區。

MSComm1.InBufferSize=1024 '設置接收緩沖的字節長(cháng)度

MSComm1.InBufferCount=0 '清除接收緩沖區數據

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

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

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

MSComm1.PortOpen= True '打開(kāi)端口。

End Sub

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

Dim Data() As Byte

Select Case MSComm1.CommEvent

Case comEventRxOver '接收緩沖區溢出。

MsgBox "接收緩沖區溢出"

Case comEventTxFull '傳輸緩沖區已滿(mǎn)。

MsgBox "傳輸緩沖區已滿(mǎn)"

Case comEvReceive ' 收到 RThreshold # of Data

Buf = MSComm1.Input

Data = Buf

'

'在這里可加入對接收數據的處理

'

End Select

End Sub

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

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

Dim Buf As Variant

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

'

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

'
Buf = Data

MSComm1.Output = Buf

End Sub


上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>