新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機RS-485多機通訊的實現

        單片機RS-485多機通訊的實現

        作者: 時間:2012-07-19 來源:網絡 收藏

          另外,在主從機軟件上也應附加若干處理措施,如:上電時或正式通訊之前,對串行口做幾次空操作,清除端口的非法數據和命令。
          2) 控制端RE*,DE的信號的有效脈寬應該大于發送或接收一幀信號的寬度。
          在RS-232,RS-422等全雙工通訊過程中,發送和接收信號分別在不同的物理鏈路上傳輸,發送端始終為發送端,接收端始終為接收端,不存在發送、接收控制信號切換問題。在RS-485半雙工通訊中,由于SN75176的發送和接收都由同一器件完成,并且發送和接收使用同一物理鏈路,必須對控制信號進行切換。控制信號何時為高電平,何時為低電平,一般以單片機的TI,RI信號作參考。
          發送時,檢測TI是否建立起來,當TI為高電平后關閉發送功能轉為接收功能;
          接收時,檢測RI是否建立起來,當RI為高電平后,接收完畢,又可以轉為發送。
          在理論上雖然行得通,但在實際聯調中卻出現傳輸數據時對時錯的現象。根據查證有關資料,并在聯調中借助存儲示波器反復測試,才發現一個值得注意的問題,我們可以查看單片機的時序:


        圖3 串行口模式3時序圖

          單片機在串行口發送數據時,只要將8位數據位傳送完畢,TI標志即建立,但此時應發送的第九位數據位(若發送地址幀時)和停止位尚未發出。如果在這是關閉發送控制,勢必造成發送幀數據不完整。如果單片機多機通訊采用較高的波特率,幾條操作指令的延時就可能超過2位(或1位)數據的發送時間,問題或許不會出現。但是如果采用較低波特率,如9600,發送一位數據需100μs左右,單靠幾條操作指令的延時遠遠不夠,問題就明顯地暴露出來。接收數據時也同樣如此,單片機在接收完8個數據位后就建立起RI信號,但此時還未接收到第九位數據位(若接收地址幀時)和停止位。所以,接收端必須延時大于2位數據位的時間(1位數據位時間=1/波特率),再作應答,否則會發生
          3) 總線上所連接的各單機的發送控制信號在時序上完全隔開。
          為了保證發送和接收信號的完整和正確,避免總線上信號的碰撞,對總線的使用權必須進行分配才能避免競爭,連接到總線上的單機,其發送控制信號在時間上要完全隔離。
          總之,發送和接收控制信號應該足夠寬,以保證完整地接收一幀數據,任意兩個單機的發送控制信號在時間上完全分開,避免總線爭端。
          程序流程框圖,參見圖4。其中:a)為發送流程圖;b)為接收流程圖。

        點擊在新窗口中瀏覽產品
        圖4 程序流程圖

        注:延時T秒的取值
        (1) 傳送地址幀時,T>2X(1/波特率),可以選取T=2.5X(1/波特率)。
        (2) 傳送數據幀時,T>1X(1/波特率),可以選取T=1.5X(1/波特率)。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 和静县| 高雄县| 万宁市| 广灵县| 宜城市| 平乐县| 天全县| 腾冲县| 冕宁县| 偃师市| 乌拉特前旗| 梁河县| 邓州市| 安平县| 隆尧县| 宣汉县| 西安市| 垣曲县| 浏阳市| 阿巴嘎旗| 长阳| 滦南县| 苏州市| 华容县| 新营市| 崇礼县| 枣强县| 全椒县| 广德县| 彭泽县| 哈尔滨市| 章丘市| 天台县| 海南省| 北碚区| 布尔津县| 乡城县| 汶上县| 尉犁县| 区。| 宁国市|