![]() |
發布時間: 2011-9-9 16:09
正文摘要:最近用STC12C5202AD芯片,實現主機與從機通信功能,用的是RS485協議,上面是RS485電路圖,現在的情況是只能收發一個數據,無論主機發送多少個數據,從機也只能收發一個數據,調試了整天也沒有找到原因,下面是 ... |
我給你提一個意見,硬件沒啥問題,看到有人說加匹配電阻,其實線很短,不加也沒事,你有兩個延時函數,如果程序正在執行第一個延時函數,如果我給你串口發數據了,但是你還沒有拉低485接受信號線,也就是收不到,你不覺得邏輯有問題嗎? |
呵呵。簡單。下載一份485規格書就可以的了。 |
支持一下 |
距離短的話你的電路沒甚問題 |
可能是主機發送的太頻繁,叢機沒有反應過來主機的數據又來啦,叢機一直工作在中斷中自然數據發不回去 |
就硬件電路而言,我建議你改進一下,貼一個我量產過的485電路![]() |
學習中 |
1 485芯片A、B端沒接上下拉電阻,沒接中間電阻,會導致控芯片制信號邏輯不正確,兩個控制端短接為一個讀寫電平; 2 定義全局數組,每次串口接收中斷把數據堆入數組,主程序每次循環都檢測數組里面的數據有效性,數組超限自動出棧最先進來的數。如果數據有效則取數到臨時數組后標記全局數組為無效數據。 3 默認情況下主程序控制485芯片為接收狀態。當需要發送數據時才控制485芯片為發送狀態,狀態轉換時間可以累加變量來判斷,不要用延時子程序。while(!TI)也是用累加變量來判斷實現超時功能清TI,不要一直等待..... 建議去單片機仿真論壇看看吧http://proteus.5d6d.com |
你這個程序這樣寫也是沒問題的。 只不過主機發送的程序要配合從機。 主機發了一個數據,等從機收到并且返回了再發下一個就可以了。。。。。 你的程序有很多不好的地方,效率不高,盡量利用中斷來延時和中斷來發送數據就好點。。。。 |
那個3腳一邊是DE,一邊是DO,不會是這里有問題吧,其他的我都看不懂. |
圖上3腳一個是DO,一個是DE |
那個3腳一邊是DE,一邊是DO,不會是這里有問題吧,其他的我都看不懂. |
好好研究 |
如果哪位高手解決問題,請通知一聲c86518@163.com。 網上相關485注意事項都看過了。 |
我也正遇到同樣的問題。四套STC11F04XE+MAX485CSE連接到一起。一個單片機發送,其他單片機接收。通過反復調試發現,若連續發送4個字節,只能接收到前兩個字節。若間隔1秒發送一個字節,則都能收到。感覺到MAX485接收很慢。 |
如果你是連續發送數據,則串口一直產生中斷,無法執行其他程序。 |
你這個程序實現的功能是:從主機收一個數據,再將該數據發送給主機。當然無法連續的接收到主機上發送的數據的。因為你在發數據的時候,就沒有辦法接收數據。這個485是工作在半雙工的狀態。 |
程序不懂,僅就硬件說兩句: 1、輸出端,A、B兩線之間,要并聯一個120歐姆的負載匹配電阻。必要時,最好再串接一個平衡濾波器。 2、供電腳(pin 8)最好能再并一個10uF的電解,以確保供電穩定。 |