新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機多機并行通訊的一種方法

        單片機多機并行通訊的一種方法

        作者: 時間:2006-12-28 來源:網絡 收藏
        1 簡介

          本文介紹的單片機多機并行通訊系統,使用作為主機,多片89C2051作為從機。(89C2051為20腳300MIL,帶有2K FLASH 的單片機,除了少了兩個并口外,具備MCS-51系列單片機所有功能。因為其體積小,功能強,必將在單片機應用領域內廣泛使用)。這種并行通訊方法適用于在多站點,多層次的檢測和控制系統中充當通信控制器的角色;也適合于用作單片機串行口擴充電路。

          

          

          圖1 芯片的邏輯圖及四種工作狀態 

          

              圖2 單片機并行通信原理框圖

          2 三態總線緩沖寄存器74HC646

          在單片機構成的多機并行通訊系統中,總線上的信息交換一般采用PIO(并行接口)和雙端口寄存器等方法,并輔助以總線仲裁電路。通常使用的并行接口芯片有8155,8255等。本文介紹一種簡單的并行接口電路,它既能取代8255等芯片,還能使電路結構更加簡單和緊湊。該電路由一片74HC74和一片74HC646(300MIL窄)構成。

          74HC646是三態總線緩沖寄存器,其實也是一個雙端口共享存儲器,只是共享存儲區很小的,僅有一個數據輸入寄存器與一個數據輸出寄存器,用它作為單字節通信數據的臨時中轉站,每傳送一個字節,主從機間握手一次,把數據取走后再繼續下一字節的通信。74HC646可以將兩條總線的數據分別鎖存,再由芯片內部總線進行數據交換。74HC646具有四種工作狀態,利用對這四種工作狀態的控制,可以實現多個單片機利用數據口進行數據交換,省下其余口線做其他的工作,如驅動LED,控制開關等。74HC646芯片的邏輯圖及四種工作狀態如圖1所示。

          3 單片機并行通信原理

          74HC646對數據進行的鎖存只為完成數據交換作了信息準備工作,單片機多機之間通訊的實現還必須具備通訊聯絡手段,以使單片機了解總線上的工作狀態,避免發生總線沖突。這里采用四線握手聯絡:兩條由發送方送接收方,通知接收方數據已經準備好(如圖2中的TFNE*,RFNE*);兩條由接收方送發送方,通知發送方數據已經收到(如圖2中的TFNF*,RFNF*)通信聯絡信號是由74HC74電路產生。單片機并行通信原理框圖如圖2所示。

          4 多機并行通信協議

          上面的并行通訊的單片機沒有封鎖電路以防止主從機向74HC646同時寫數或同時讀數,因此各單機在雙向傳輸時,必須根據狀態信息來控制自己的下一步操作,即進行聯絡,通過軟件、硬件通訊協議配合才能避免造成錯誤,保證對74HC646不會造成競爭沖突。因此,除了上面所講的聯絡電路之外,在編制軟件時,還必須遵從以下協議:

          . 主機向74HC646發送數據時,必須保證74HC646接收寄存器為空。

          . 主機與從機間的數據傳輸要通過74HC646,協議不允許雙方同時對74HC646進行操作,必須根據狀態信息來控制自己的操作。

          5 通訊協議的格式與執行過程

          5.1 信息格式

          在并行通訊的異步通信傳輸時,也同樣存在幀的類型及格式問題,可以采用串行通訊類似的幀格式:

          特征字

          長度

          數據1

          數據2

          ...

          校驗碼

          5.2 通訊協議的執行過程

          下面以檢測方式為例說明通訊協議的執行過程。

          5.2.1 主機向從機寫數過程:(主機寫, 從機讀)

          主機向74HC646寫數據,然后通知從機有數據來,從機從74HC646中讀取數據。

          ① 主機讀取狀態位,檢測TFNF*位是否為零。

         ?、谌鬞FNF*=1,主機暫時等待;若TFNF*=0,主機向74HC646寫數據,使TFNF*=1,同時使TFNE*=0。

         ?、?從機讀取狀態位,檢測TFNE*位是否為零。若TFNE*=1,從機暫時等待;若TFNE*=0,從機從74HC646讀數據,使TFNE*=1,同時使TFNF*=0。

          ④ 主機再次檢測狀態位TFNF*是否為零,若為“0”,說明從機已將數據從74HC646中取走,主機可發送下一數據。

          5.2.2 主機讀從機過程:(從機寫, 主機讀)

          從機向74HC646寫數據,然后通知主機有數據來,主機收到信號后,將數據從74HC646中取走。

          ① 從機讀取狀態位,檢測RFNF*位是否為零。

          ②若RFNF*=1,從機暫時等待;若RFNF*=0,從機向74HC646寫數據,使RFNF*=1,同時使RFNE*=0。

         ?、?主機讀取狀態位,檢測RFNE*位是否為零。若RFNE*=1,主機暫時等待;若RFNE*=0,主機從74HC646讀數據,使RFNE*=1,同時使RFNF*=0。

         ?、?從機再次檢測狀態位RFNF*是否為零,若為“0”,說明從機已將數據從74HC646中取走,主機可發送下一數據。

          6 流程圖(檢測方式)

          采用檢測方式的程序流程如圖3所示?! ?/FONT>

          

          圖3 采用檢測方式的程序流程圖

          若使用中斷方式, 只需對執行過程和流程圖稍加修改即可。



        關鍵詞: 89C51 封裝 E2PROM

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 芜湖市| 北宁市| 镇坪县| 沅陵县| 米林县| 任丘市| 义马市| 出国| 祁阳县| 张掖市| 海盐县| 泽普县| 望都县| 嘉兴市| 梅河口市| 阳春市| 中山市| 五莲县| 库伦旗| 徐州市| 敖汉旗| 哈巴河县| 鄯善县| 黑河市| 且末县| 唐河县| 香港 | 东辽县| 钦州市| 虞城县| 孟村| 峨眉山市| 阿巴嘎旗| 绿春县| 交城县| 思南县| 五家渠市| 铜陵市| 武冈市| 大方县| 永登县|