|
|||||||||||
| 技術(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 |
請教!!!波特率自動檢測 |
| 作者:發(fā)霉的味道 欄目:單片機 |
我想做一個波特率自動檢測的程序,用匯編寫,我試過檢測起始脈沖的寬度來計算波特率,可是不行,有哪位高人能否提供一下思路,還有就是能否實現(xiàn)在未知波特率的情況下識別字串呢?? |
| 2樓: | >>參與討論 |
| 作者: iC921 于 2007/2/5 16:29:00 發(fā)布:
我還不知道波特率是什么意思呢 |
|
| 3樓: | >>參與討論 |
| 作者: 發(fā)霉的味道 于 2007/2/5 16:32:00 發(fā)布:
汗!! 我說的是51的串口通信呀! |
|
| 4樓: | >>參與討論 |
| 作者: 發(fā)霉的味道 于 2007/2/5 16:35:00 發(fā)布:
每5分鐘看一次是否有人回復!! 我在線等哦,真的很希望有高手指點一下,感激不盡!!! |
|
| 5樓: | >>參與討論 |
| 作者: yjinter 于 2007/2/5 16:42:00 發(fā)布:
假設(shè)主機A,從機B,從機自動檢測波特率 以下是步驟: 1、A發(fā)0X55,發(fā)一個等待20MS 2、B不斷切換波特率去接收,一旦接收到0X55,立刻返回一個0XAA。此時波特率就是A的發(fā)送波特率。 3、A收到0XAA,馬上終止發(fā)送0X55。 A,B同步完畢。保守點還可以再重新確認一次。 |
|
| 6樓: | >>參與討論 |
| 作者: yjinter 于 2007/2/5 16:45:00 發(fā)布:
過程中,B可能會出現(xiàn)幀錯誤,做好錯誤處理就OK |
|
| 7樓: | >>參與討論 |
| 作者: 發(fā)霉的味道 于 2007/2/5 16:46:00 發(fā)布:
謝謝答復!! 這種在已知同步字符的情況下,那么在未知字符以及未知波特率的情況下呢??能否指點下?? |
|
| 8樓: | >>參與討論 |
| 作者: hq_y 于 2007/2/5 16:46:00 發(fā)布:
我覺得hotpower有一個波特率自動檢測的帖子:你可以搜索一下參考 |
|
| 9樓: | >>參與討論 |
| 作者: 發(fā)霉的味道 于 2007/2/5 16:49:00 發(fā)布:
!! 我拜讀過hotpower大俠的這個貼子,內(nèi)容是反匯編別人的HEX文件,也是采用已知同步字符的方式.我想知道在未知字符的情況下如何處理. |
|
| 10樓: | >>參與討論 |
| 作者: yjinter 于 2007/2/5 16:53:00 發(fā)布:
見下 只要A發(fā)送的是經(jīng)過校驗(CRC8,奇偶)的一串字符,B去校驗就可以了。 |
|
| 11樓: | >>參與討論 |
| 作者: yjinter 于 2007/2/5 16:55:00 發(fā)布:
搞別人的^%&%^#$%#$%,那就沒做過了。 |
|
| 12樓: | >>參與討論 |
| 作者: 發(fā)霉的味道 于 2007/2/5 16:57:00 發(fā)布:
嗚嗚...... 我是想知道在未知波特率以及所發(fā)送字符的情況下,讓程序處理得到正確的波特率,再進行通信. |
|
| 13樓: | >>參與討論 |
| 作者: yjinter 于 2007/2/5 16:59:00 發(fā)布:
看看串口協(xié)議吧。。說不定能總結(jié)個規(guī)律出來^_^ |
|
| 14樓: | >>參與討論 |
| 作者: 發(fā)霉的味道 于 2007/2/5 17:02:00 發(fā)布:
??? 如果能總結(jié)出規(guī)律我還問什么啊,你說是吧. |
|
| 15樓: | >>參與討論 |
| 作者: wjsue 于 2007/2/5 17:07:00 發(fā)布:
沒戲 未知波特率以及所發(fā)送字符???沒有通用辦法。。 假如對方發(fā)的是全零,或緊跟起始脈沖后的位是n個0,然后是全1,你有辦法知道波特率??? |
|
| 16樓: | >>參與討論 |
| 作者: 發(fā)霉的味道 于 2007/2/5 17:13:00 發(fā)布:
如何知道!! 謝謝指點!!洗耳恭聽!! |
|
| 17樓: | >>參與討論 |
| 作者: wjsue 于 2007/2/5 17:25:00 發(fā)布:
一般情況下 開始時,統(tǒng)計每一個0的寬度,保存最小的寬度;統(tǒng)計每一個1的寬度,保存最小的寬度。這兩個最小寬度中最小的就是1位的寬度了,這樣就可以知道波特率了。 當然,前提是你接收的的位必須出現(xiàn)過010或101才行。 |
|
| 18樓: | >>參與討論 |
| 作者: 發(fā)霉的味道 于 2007/2/5 17:34:00 發(fā)布:
!! 這個思路值得一試,還有其他思路嗎?各位大俠!!多多指點!! |
|
| 19樓: | >>參與討論 |
| 作者: 電子塵埃 于 2007/2/5 22:30:00 發(fā)布:
啊,有重嗎?哈哈,晚上無聊過來頂沉廣告貼 |
|
| 20樓: | >>參與討論 |
| 作者: 發(fā)霉的味道 于 2007/2/6 8:46:00 發(fā)布:
!!! 大俠!!你就別笑了,不懂就問,這很正常啊. |
|
| 21樓: | >>參與討論 |
| 作者: 發(fā)霉的味道 于 2007/2/6 9:22:00 發(fā)布:
??? 我已經(jīng)從昨天等到今天了,咋給提示的大俠就這么少呢!!! |
|
| 22樓: | >>參與討論 |
| 作者: 發(fā)霉的味道 于 2007/2/6 9:53:00 發(fā)布:
我還是在線等啊!! |
|
| 23樓: | >>參與討論 |
| 作者: zhaoyu2005 于 2007/2/6 10:41:00 發(fā)布:
我也想知道怎么弄 看手機模塊中西門子和WAVECOME都可以設(shè)成波特率自適應,就是不知道怎么弄的,一般發(fā)"AT+回車"看返回"AT" |
|
| 24樓: | >>參與討論 |
| 作者: xxdcq 于 2007/2/6 12:48:00 發(fā)布:
如果只是串口發(fā)送的控制命令控制某個終端 不需要關(guān)心具體是什么數(shù)據(jù),我可以通過對脈沖串的波形進行分析,然后得到偽命令去替代真正的控制命令也可以實現(xiàn)對終端的控制 可以不需要知道波特率 我們現(xiàn)在的方案可以做到對最高57600的串口命令進行識別 www.yofeng.com 如果需要關(guān)心具體數(shù)據(jù)目前還沒有更可靠的辦法用真實的波特率得到正確的數(shù)據(jù)內(nèi)容 |
|
| 25樓: | >>參與討論 |
| 作者: mon51 于 2007/2/6 13:26:00 發(fā)布:
請看下面,你主機發(fā)出0X11,就行了。 CLR A MOV RCAP2H,A MOV RCAP2L,A MOV TL2,A MOV TH2,A MOV T2MOD,A MOV T2CON,A L4: JB RXD,L4 L6: JNB RXD,L6 L7: SETB TR2 L8: JNB RXD,L10 JNB TF2,L8 L10: JNB RXD,L10 L12: JNB RXD,L14 JNB TF2,L12 L14: JNB RXD,L14 L15: CLR TR2 JB TF2,InitSerial MOV R7,TL2 MOV R6,TH2 MOV A,R6 CLR C RRC A MOV R4,A MOV A,R7 RRC A ADD A,R7 MOV R7,A MOV A,R4 ADDC A,R6 MOV R6,A MOV A,R7 ADD A,#010H MOV R7,A CLR A ADDC A,R6 MOV R6,A MOV A,R7 MOV R0,#05H L22: XCH A,R6 CLR C RRC A XCH A,R6 RRC A DJNZ R0,L22 MOV R7,A CLR C CLR A SUBB A,R7 MOV BRL,A CLR A MOV TL2,A MOV TH2,A MOV T2MOD,A MOV T2CON,A ORL PCON,#080H ; set SMOD1 to double baudrate MOV BDRCON,#01EH ; set TBCK/RBCK/BRR/SPD MOV SCON,#01011010B ; Init Serial |
|
| 26樓: | >>參與討論 |
| 作者: 發(fā)霉的味道 于 2007/2/6 15:04:00 發(fā)布:
!! 不知道周立功單片機所寫的那種方法可行性,先試驗一下再說. |
|
| 27樓: | >>參與討論 |
| 作者: zizzfish 于 2007/2/6 20:41:00 發(fā)布:
暈。把原理搞懂就很好做了。 ----- --- | | | | | | ----- --》 t 《--- 通過t就可以計算波特率了。 1、在第一個下降沿啟動定時器。 2、等待上升沿,關(guān)閉定時器。 用T2做定時。 一般來說只要讀取TL2的值就可以了。TH2都是0。 1/rate=t=TL2*fosc/12 fosc/(32*(65536-TH2TL2))=TL2*fosc/12 通過公式化簡可以得到一個簡單的關(guān)系式。通過關(guān)系式就可以編程了。 我用C做的,可以在1S內(nèi)從4.8~115.2k自適應。 小于4.8K還要考慮TH2。本來是給SM5964寫ISP程序,由于ISP的空間有限就不考慮TH2了。 自適應過程其實不一定要發(fā)0X055,只要LSB是1就可以了。 改天理一下程序供大家參考。 |
|
| 28樓: | >>參與討論 |
| 作者: mohanwei 于 2007/2/6 21:11:00 發(fā)布:
很簡單,在程序里實現(xiàn)一個邏輯分析儀…… 不斷采集端口的電平,在一段時間內(nèi)記錄下所有上升沿和下降沿出現(xiàn)的時間,保存到內(nèi)存里,然后分析它。 比如說先找出最短的跳變間隔時間,將它當作1位,算出波特率,然后套其它的,如果都對就到此結(jié)束。如果不對,將它當作2位,算出波特率,套其它的……依此類推,肯定可以算出來的,除非發(fā)送一方不斷改變波特率,呵呵 |
|
| 29樓: | >>參與討論 |
| 作者: hotpower 于 2007/2/6 23:54:00 發(fā)布:
波特率自動檢測的方法太多,真不知選什么好~~~ |
|
| 30樓: | >>參與討論 |
| 作者: 發(fā)霉的味道 于 2007/2/8 19:35:00 發(fā)布:
!! 哦,試試再說...... |
|
| 31樓: | >>參與討論 |
| 作者: 牛皮詹秀波 于 2007/2/8 20:33:00 發(fā)布:
_ 張明峰的那本書上說的很詳細,去看看 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |