<var id="fnfpo"><source id="fnfpo"></source></var>
<rp id="fnfpo"></rp>

<em id="fnfpo"><object id="fnfpo"><input id="fnfpo"></input></object></em>
<em id="fnfpo"><acronym id="fnfpo"></acronym></em>
  • <th id="fnfpo"><track id="fnfpo"></track></th>
  • <progress id="fnfpo"><track id="fnfpo"></track></progress>
  • <tbody id="fnfpo"><pre id="fnfpo"></pre></tbody>

  • 電子工程網

    標題: 關于RS485通信數據丟失問題 [打印本頁]

    作者: she1987    時間: 2011-9-9 16:09
    標題: 關于RS485通信數據丟失問題

    最近用STC12C5202AD芯片,實現主機與從機通信功能,用的是RS485協議,上面是RS485電路圖,現在的情況是只能收發一個數據,無論主機發送多少個數據,從機也只能收發一個數據,調試了整天也沒有找到原因,下面是我編寫的程序:
    #include
    unsigned  char TEMP,a;
    sbit RE = P1^2;      //接收允許開關
    sbit DE = P1^1;      //發送允許開關
    /**************************************
         延時程序
    **************************************/
    void delay(unsigned char i)
    {
    unsigned char j;
      for(i; i > 0; i--)
        for(j = 200; j > 0; j--);
    }
    void init()
    {
      TMOD=0X20;      //設置定時器的工作方式為方式2,自動重裝8位數據
      TH1=0XFD;       //波特率9600的初始值
      TL1=0XFD; //波特率9600的初始值
      SCON=0X50; //設置串口的模式為方式1并置為REN使串口工作
      TR1=1;  //啟動定時器工作
      EA=1;  //開啟總中斷
      ES=1;  //開啟串口中斷  
      DE = 0;
      RE = 0;   //允許接收,禁止發送數據
    }
    void main()
    {
      init();      //調用初始化子函數
      //delay(50);
      while(1)       //死循環
       {
         if(TEMP==1)     //判斷是否接收完數據
          {
           DE = 1;
          RE = 1;    //允許發送,禁止接收數據
          delay(50);
            EA=0;    //關閉串口中斷
            TEMP=0;    //變量TEMP清0
            SBUF = a;    //把a的值送到發送SBUF中去,注意此SBUF不同中斷函數里面的接收SBUF
            while(!TI) ;    //等待數據發送完畢
            TI = 0;  //發送完數據后清0
            delay(50);
            EA=1;  //開啟串口中斷
            DE = 0;
       RE = 0;   //允許接收,禁止發送數據
       delay(50);
          }
       }

    }
    void ser() interrupt   4
    {
      RI=0;     //接收完數據后軟件清除中斷標志位
      a = SBUF;     //把他放進變量A中為了讀取返回
    TEMP=1;     //置位TEMP
    }

    該程序如果去掉延時,用在RS232芯片上,通信一切正常,請各位高手幫我分析一下,是程序出現了問題,還是電路問題,謝謝大家!
    作者: sherwin    時間: 2011-9-14 10:38
    程序不懂,僅就硬件說兩句:
    1、輸出端,A、B兩線之間,要并聯一個120歐姆的負載匹配電阻。必要時,最好再串接一個平衡濾波器。
    2、供電腳(pin 8)最好能再并一個10uF的電解,以確保供電穩定。
    作者: zjx_embcom    時間: 2011-9-14 13:17
    你這個程序實現的功能是:從主機收一個數據,再將該數據發送給主機。當然無法連續的接收到主機上發送的數據的。因為你在發數據的時候,就沒有辦法接收數據。這個485是工作在半雙工的狀態。
    作者: mutou868    時間: 2011-9-15 10:19
    如果你是連續發送數據,則串口一直產生中斷,無法執行其他程序。
    作者: c86518    時間: 2011-9-18 13:27
    我也正遇到同樣的問題。四套STC11F04XE+MAX485CSE連接到一起。一個單片機發送,其他單片機接收。通過反復調試發現,若連續發送4個字節,只能接收到前兩個字節。若間隔1秒發送一個字節,則都能收到。感覺到MAX485接收很慢。
    作者: c86518    時間: 2011-9-18 13:28
    如果哪位高手解決問題,請通知一聲c86518@163.com。
    網上相關485注意事項都看過了。
    作者: liuanmuyu    時間: 2011-9-27 15:57
    好好研究
    作者: 暗之聲    時間: 2011-9-28 22:07
    那個3腳一邊是DE,一邊是DO,不會是這里有問題吧,其他的我都看不懂.
    作者: 暗之聲    時間: 2011-9-28 22:09
    圖上3腳一個是DO,一個是DE
    作者: 暗之聲    時間: 2011-9-28 22:13
    那個3腳一邊是DE,一邊是DO,不會是這里有問題吧,其他的我都看不懂.
    作者: sc88cs    時間: 2011-9-29 09:32
    你這個程序這樣寫也是沒問題的。
    只不過主機發送的程序要配合從機。
    主機發了一個數據,等從機收到并且返回了再發下一個就可以了。。。。。
    你的程序有很多不好的地方,效率不高,盡量利用中斷來延時和中斷來發送數據就好點。。。。
    作者: Zaxife    時間: 2011-10-8 18:05
    1 485芯片A、B端沒接上下拉電阻,沒接中間電阻,會導致控芯片制信號邏輯不正確,兩個控制端短接為一個讀寫電平;
    2 定義全局數組,每次串口接收中斷把數據堆入數組,主程序每次循環都檢測數組里面的數據有效性,數組超限自動出棧最先進來的數。如果數據有效則取數到臨時數組后標記全局數組為無效數據。
    3 默認情況下主程序控制485芯片為接收狀態。當需要發送數據時才控制485芯片為發送狀態,狀態轉換時間可以累加變量來判斷,不要用延時子程序。while(!TI)也是用累加變量來判斷實現超時功能清TI,不要一直等待.....
    建議去單片機仿真論壇看看吧http://proteus.5d6d.com
    作者: richedy    時間: 2011-10-11 14:37
    學習中
    作者: Wilson2010888    時間: 2011-10-11 15:18
    就硬件電路而言,我建議你改進一下,貼一個我量產過的485電路

    作者: 笑梨    時間: 2014-3-13 09:09
    Wilson2010888 發表于 2011-10-11 15:18
    就硬件電路而言,我建議你改進一下,貼一個我量產過的485電路

    我沒看懂,請教一下,這個圖是怎么工作的呢?
    作者: deli333    時間: 2014-3-23 09:18
    可能是主機發送的太頻繁,叢機沒有反應過來主機的數據又來啦,叢機一直工作在中斷中自然數據發不回去
    作者: deli333    時間: 2014-3-23 09:19
    距離短的話你的電路沒甚問題
    作者: pcbkey    時間: 2015-2-22 14:30
    支持一下
    作者: lucent    時間: 2015-5-26 11:25
    呵呵。簡單。下載一份485規格書就可以的了。
    作者: sgj511285515    時間: 2015-6-10 22:03
    我給你提一個意見,硬件沒啥問題,看到有人說加匹配電阻,其實線很短,不加也沒事,你有兩個延時函數,如果程序正在執行第一個延時函數,如果我給你串口發數據了,但是你還沒有拉低485接受信號線,也就是收不到,你不覺得邏輯有問題嗎?




    歡迎光臨 電子工程網 (http://www.portaltwn.com/) Powered by Discuz! X3.4
    精品一区二区三区自拍图片区_国产成人亚洲精品_亚洲Va欧美va国产综合888_久久亚洲国产精品五月天婷