• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    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*位是否為零。

      ②若TFNF*=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所示。  

      

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

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



    關鍵詞: 89C51 封裝 E2PROM

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 石柱| 镇原县| 朔州市| 新邵县| 正蓝旗| 延川县| 项城市| 友谊县| 酉阳| 原阳县| 辽宁省| 通辽市| 汝阳县| 大足县| 柳州市| 海门市| 阿合奇县| 南京市| 宜良县| 漳浦县| 绿春县| 玉环县| 武定县| 开远市| 哈巴河县| 佛教| 克什克腾旗| 贡觉县| 堆龙德庆县| 介休市| 时尚| 金华市| 通州区| 布拖县| 新乡市| 合阳县| 象山县| 张家川| 延安市| 临西县| 泰兴市|