|
|||||||||||
| 技術(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)于mscomm編寫串口字節(jié)接收的問題,請幫忙 |
| 作者:shadowman 欄目:技術(shù)交流 |
關(guān)于mscomm編寫串口字節(jié)接收的問題,請幫忙 有幾個關(guān)于用mscomm進行串口編程的問題,請大蝦們幫忙: 雙機以2400baud的速率相互通過MODEM通信,主機是用來接收數(shù)據(jù)的,客戶機發(fā)送是采用1k xMODEM格式發(fā)送,現(xiàn)在問題就是在主機的數(shù)據(jù)接收編程中遇到的。mscomm里面有個接收緩沖區(qū)的門限屬性設(shè)置,我設(shè)置為1(如果設(shè)為0,則一次oncomm事件只能收8個字節(jié)),那么只要接收緩沖區(qū)一收到字符(因為我需要對每個數(shù)據(jù)包的第1,2,3個字節(jié)進行判斷處理),就會產(chǎn)生一個oncomm事件,我就在這個事件里編寫數(shù)據(jù)接收程序,我的接收程序無非就是判斷首字節(jié)是否是stx(或者soh)第2字節(jié)是否為期望的序號,并存儲下1024個數(shù)據(jù)字節(jié),最后判斷2個crc的字節(jié)是否出錯,并以此作出ack,或者nak,F(xiàn)在問題是,我有兩種處理方法, 一種是在oncomm事件處理中一開始先延遲一段時間,以便在這段時間內(nèi)整個數(shù)據(jù)包(1029個字節(jié))都接收完畢,然后再對inbuffer里的字節(jié)作相應(yīng)的處理,這樣就是在一個事件中就處理完畢了,,可這時的問題就是需要延遲多少時間,才能保證數(shù)據(jù)都接收完,如果這個時間長的話,就不是很合適了。還有就是oncomm事件會不會每收到一個字符就產(chǎn)生一次(那要產(chǎn)生1029次那),如果產(chǎn)生的話會不會對我當(dāng)前的事件(第一個事件)處理有影響,如果在當(dāng)前事件處理過程中沒有影響,會不會在事后影響,也就是說這一系列的oncomm事件都排在事件隊列中,當(dāng)前事件處理完畢后,這些事件還是相繼產(chǎn)生,要求程序去處理它們。 另一種是oncomm事件處理中不延遲,這樣的意圖是想,一個個字節(jié)處理,也就是收到一個字節(jié)產(chǎn)生一個oncomm事件,事件中對這個字節(jié)進行相應(yīng)處理。接著又收到一個字節(jié),又產(chǎn)生一個oncomm事件,再對這個字節(jié)處理,,以此類推。這樣的話 就有個問題,就是會不會在我對當(dāng)前字節(jié)還沒處理完(也就是oncomm事件過程還沒結(jié)束),下一個字節(jié)就收到了,從而產(chǎn)生新的oncomm事件,這樣影響到我的正常處理過程。 3。如果我一次oncomm事件接收固定字節(jié)數(shù),怎么實現(xiàn)。 以上是幾個問題,另外還有個附帶的問題,就是vb里面可不可以進行位操作 希望高手幫忙,謝謝了! |
| 2樓: | >>參與討論 |
| 作者: computer00 于 2006/2/17 22:46:00 發(fā)布:
VB的MSCOMM控件不是太好用, 如果將串口接收事件請求閾值設(shè)置為一個字節(jié),則可能后面的幾個字節(jié)會不發(fā)生請求,而導(dǎo)致數(shù)據(jù)丟失(估計這跟windows的系統(tǒng)任務(wù)調(diào)度有關(guān))。 記得以前有個人弄了一個很詳細的關(guān)于這個問題的說明,還動用了系統(tǒng)延時。我以前用一個字節(jié)時,總是丟失數(shù)據(jù)(除非兩個字節(jié)之間的間隔很大)。 比較合適的辦法是選擇一個合適的門限值,發(fā)生串口接收事件時,一次將緩沖區(qū)所有字節(jié)都讀出來。 VB里面的AND,OR,XOR,NOT等,當(dāng)用在整數(shù)上時(包括byte型)就是位按位操作的。 |
|
| 3樓: | >>參與討論 |
| 作者: Bingoes 于 2006/2/18 0:15:00 發(fā)布:
關(guān)于MSComm1.RThreshold設(shè)為多少的問題,我的看法 個人觀點,如果將THreshold設(shè)置成為比較大的值, 則進去oncomm處理事務(wù)的時間需要更長,而且并不 方便處理。 我覺得將InBufferSize的值設(shè)置得大一點就比較好吧。 我在oncomm的comEvReceive事件中是這樣處理的: Handle_Rec_Data: 。。。(處理數(shù)據(jù)) If MSComm1.InBufferCount <> 0 Then GoTo Handle_Rec_Data (不過沒嘗試過接收超過100字節(jié)的數(shù)據(jù)) |
|
| 4樓: | >>參與討論 |
| 作者: yhzhx01 于 2006/2/18 20:50:00 發(fā)布:
我用C++編了一個串口接收程序 它采用定時讀緩沖區(qū)內(nèi)的字節(jié)數(shù), 字節(jié)數(shù)不再增加就開始處理。 |
|
| 5樓: | >>參與討論 |
| 作者: 對方答復(fù) 于 2010/1/18 19:19:18 發(fā)布:
多年以后現(xiàn)在的我,有遇到了和樓主一樣的問題!唉,求救啊求救 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號 |