|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
關(guān)于串口通訊的速度和正確率~~~~ |
| 作者:Analog921 欄目:單片機 |
我現(xiàn)在做了一個轉(zhuǎn)換器結(jié)構(gòu)如下: RS232--單片機4路并行通訊--RS485 現(xiàn)在我用11.0592的晶振,在19200的波特率的情況下,一次通訊在300個字節(jié)以下的數(shù)據(jù)包 我能夠保證絕對不出現(xiàn)錯誤,這個情況是屬于什么情況?是速度正常,還是轉(zhuǎn)換器做得不 好,數(shù)據(jù)包太小了?? 謝謝~ |
| 2樓: | >>參與討論 |
| 作者: maychang 于 2006/10/20 0:20:00 發(fā)布:
我能夠保證絕對不出現(xiàn)錯誤,這個情況是屬于什么情況? 正常情況。 |
|
| 3樓: | >>參與討論 |
| 作者: HIGHWAY 于 2006/10/20 10:30:00 發(fā)布:
正常的啊,11.0592沒有波特率誤差的 |
|
| 4樓: | >>參與討論 |
| 作者: computer00 于 2006/10/20 10:46:00 發(fā)布:
暈……居然還有嫌100%正確不好的………… |
|
| 5樓: | >>參與討論 |
| 作者: hq_y 于 2006/10/20 11:14:00 發(fā)布:
樓主的意思可能是大于300個字節(jié)的數(shù)據(jù)包就有可能出錯誤 |
|
| 6樓: | >>參與討論 |
| 作者: Analog921 于 2006/10/20 11:52:00 發(fā)布:
嗯 是呀,我想做到連續(xù)不間斷發(fā)送不出錯呀,但是現(xiàn)在是要把數(shù)據(jù)打包發(fā)送才能不出錯,而且包大于300字節(jié)就有誤碼了~~~ |
|
| 7樓: | >>參與討論 |
| 作者: iC921 于 2006/10/20 13:04:00 發(fā)布:
很感興趣 特別是----- computer00 發(fā)表于 2006-10-20 10:46 侃單片機 ←返回版面 暈……居然還有嫌100%正確不好的………… >>如何理解?! |
|
| 8樓: | >>參與討論 |
| 作者: hq_y 于 2006/10/20 21:01:00 發(fā)布:
考慮一下,每個字節(jié)的停止位的設(shè)置,最好停止位是2個bit 減少積累誤差,然后晶振考慮使用11.0592/18.432/22.1184等這樣的頻率 當然合理的包長度是通信效率最高的;畢竟在正常的使用環(huán)境中要求一點干擾沒有也是不現(xiàn)實的;太長的數(shù)據(jù)包一旦傳輸出錯,再傳的代價就高了;不是追求數(shù)據(jù)包長度越長越好; |
|
| 9樓: | >>參與討論 |
| 作者: sio4 于 2006/10/20 23:15:00 發(fā)布:
樓上的很有道理 |
|
| 10樓: | >>參與討論 |
| 作者: Analog921 于 2006/10/21 9:17:00 發(fā)布:
謝謝 嗯,我采用的是中斷作為握手信號,一個晶振加74F14驅(qū)動五個單片機,一位停止位,~~ 呆會把停止位家成2BIT 再試一試~ |
|
| 11樓: | >>參與討論 |
| 作者: xujunchen 于 2006/10/21 20:10:00 發(fā)布:
與停止位無關(guān),一次發(fā)送不要超過緩沖區(qū)的大小 |
|
| 12樓: | >>參與討論 |
| 作者: Analog921 于 2006/10/21 21:31:00 發(fā)布:
xujunchen 不對~~ 我的結(jié)構(gòu)是這樣的: 計算機A--232--MCU1--并行通訊--MCU2--485--計算機B 我的緩沖區(qū)為32字節(jié),一次可以發(fā)送的最大數(shù)據(jù)包是300字節(jié)! 只要兩個單片機搬運緩沖區(qū)數(shù)據(jù)的速度大于對方(計算機)發(fā)送的速度,就可以保證不出錯的~~~~~~~~~ 現(xiàn)在我肯定我的程序搬運緩沖區(qū)數(shù)據(jù)的速度大于數(shù)據(jù)進入緩沖區(qū)的速度,還設(shè)置了一些標志結(jié)構(gòu)來保證數(shù)據(jù)處理順序的正確理論上是不管發(fā)多少字節(jié)連續(xù)不斷的發(fā)是不會出錯的,但是數(shù)據(jù)還是會出錯~~,我的232通訊距離大約有6M ~~~現(xiàn)在我懷疑是發(fā)送端(計算機)的發(fā)送程序有問題了,我用的是串口調(diào)試助手來發(fā)送數(shù)據(jù)的~~現(xiàn)在我打算自己用VB寫一個發(fā)送和接受程序? |
|
| 13樓: | >>參與討論 |
| 作者: wkman 于 2006/10/21 21:51:00 發(fā)布:
有個計算公式。 |
|
| 14樓: | >>參與討論 |
| 作者: yewuyi 于 2006/10/21 22:33:00 發(fā)布:
串口助手應(yīng)該沒有問題 很多人都用的,猜測會不會是MCU1《——》MCU2之間有問題。 |
|
| 15樓: | >>參與討論 |
| 作者: 農(nóng)民講習(xí)所 于 2006/10/21 22:36:00 發(fā)布:
理論上只要MCU的RAM足夠大就可以 串口中斷的數(shù)據(jù)直接進入并口發(fā)送的隊列,該隊列足夠大就可以。300字節(jié)連續(xù)發(fā)送,估計只要500左右就可以。 一定不要用數(shù)組概念,死等300數(shù)據(jù)完再處理,那樣做太傻。 |
|
| 16樓: | >>參與討論 |
| 作者: 西安周公 于 2006/10/22 11:49:00 發(fā)布:
多余緩沖!MAX202 + 75176 |
|
| 17樓: | >>參與討論 |
| 作者: zhang_lj 于 2006/10/22 12:30:00 發(fā)布:
MCU1---MCU2通訊 1、是不是用p1口傳送的? 而且 是一對多? 傳送完畢注意p1口拉高。 2、問題應(yīng)該沒有出在晶振上,可以考慮換一個晶振,我懷疑問題出在1對5傳輸?shù)臅r序上了,可以考慮只接一組,測試看看 |
|
| 18樓: | >>參與討論 |
| 作者: Analog921 于 2006/10/22 12:33:00 發(fā)布:
謝謝各位的熱心~ 回去試一試各位的建議 謝謝~ |
|
| 19樓: | >>參與討論 |
| 作者: hotpower 于 2006/10/22 13:12:00 發(fā)布:
當然FIFO好了~~~ |
|
| 20樓: | >>參與討論 |
| 作者: mcuatmel 于 2006/10/22 16:20:00 發(fā)布:
最好采用中斷方式 問題這樣試試: 1、每兩個字節(jié)間加一點延時試試 你的單片機按19200的速度通訊的話每傳一個字節(jié)大約用520uS(方式1),那么在標準51內(nèi)核下,約可執(zhí)行192條語句,用這么長的時間/語句是否可以完成MCU1接收到MCU2發(fā)送全過程,中間是否還有別的任務(wù),這得要計算一下才行。 2、最好采用中斷的方式 MCU1中斷接收,傳給MCU2,MCU2也中斷接收MCU1發(fā)來的數(shù)據(jù),然后再中斷方式發(fā)出,這樣將工作盡可能多的交給硬件來做,可能會給你盈得更多時間。 |
|
| 21樓: | >>參與討論 |
| 作者: yuands 于 2006/10/25 21:31:00 發(fā)布:
加校驗 |
|
| 22樓: | >>參與討論 |
| 作者: yuands 于 2006/10/25 21:31:00 發(fā)布:
加校驗,錯了重發(fā) |
|
| 23樓: | >>參與討論 |
| 作者: emailli 于 2006/10/26 8:36:00 發(fā)布:
建議你300一下多發(fā)幾次看看 我倒是覺得程序可能有點小問題 你把你的程序發(fā)送300個字節(jié)一下試試看,反復(fù)發(fā)他幾百次 如果一直不出誤碼,那就有可能是你的停止位需要增加以點點了 還有,你的發(fā)送也許不出問題,但是電腦那邊不一定可以保證百分百的不出錯哦 現(xiàn)在我的電腦就串口偏移了。我的串口1就收數(shù)據(jù)不對,但是他發(fā)出來的數(shù)據(jù)我的單片機可以收到無誤。 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號 |