1樓:小憨憨肉嘟嘟
樓上回答的是檢測一幀資料是否接收完成。例如modbus協議,因為沒有包頭包尾不知道該幀是否接收完成,一般採用超時方式。如果協議是你自己定義的,最好每幀具有包頭和包尾,當我收到包頭說明有資料過來,收到包尾說明該幀理論上收完了。
但是各種外部和內部原因,超時和包頭包尾都不是絕對。如果傳送端傳送一幀資料,傳送一半由於各種原因暫停了一會或者接受端不知什麼原因只能收一半,此時的超時就無法證明收完,包頭包尾也是如此。因此需要加入資料校驗(校驗和或crc等)。
說了那麼多廢話,說正題。接收超時應根據自己實際應用加入,現在大多數都是硬體中斷接收,一進中斷就將資料拷到接收快取中,等有空再處理這些資料就可。但是如果利用迴圈查詢時,最好加入超時,讓接收函式能夠在一段時間內持續檢測是否有資料過來。
2樓:約定
這個是根據你的實際情況,你的9600的波特率,那麼資料之間的間隔也就1ms左右,一幀資料一般都是連續過來的,所有如果超過5ms,10ms都沒有手續資料過來,則可以認為是上一幀資料傳送完畢。
準備下一幀的資料接收。這個時間你可以根據你自己接收資料的實際情況來設定。 應為通訊協議你肯定是知道的
目的只有一個,減少干擾對你接收資料的正確性。
串列埠通訊中,傳送方傳送一幀資料,那麼vc接收資料時候是一個位元組一個位元組接收還是一幀接收?
3樓:
傳送方應該每幀做標記,比如先傳送幀長度,或是在幀尾再傳送個0之類的.接收方根據標誌恢復幀.
微控制器串列埠通訊時接收一個字元需要多長時間
4樓:匿名使用者
看你的波特率了。比如設定波特率為普通常用的9600,如果資料不壓縮,那表示每秒傳輸9600個位,在則如果設定為傳輸一個幀包括8位資料位 1位起始位 1位停止位 無奇偶校驗位的話,那就是9600/(8+1+1)=960個字元每秒。
5樓:匿名使用者
這個和波特率有關,波特率為每秒鐘傳送的位數,一個位元組有8位,自已算一下就知道了。
6樓:匿名使用者
要看波特率和收發方式。
如果波特率是9600,使用10位非同步通訊,則每秒可傳960個位元組,每個位元組(字元)1.04毫秒。
使用51微控制器與PC進行串列埠通訊時,怎麼將溫度值(帶兩位小數)傳送到VB編寫的上位機介面上顯示
可以啊,你自己定個協議,然後pc解包就可以了,打個比方說 你發aa 00 xx,aa表示幀頭,00表示溫度高位,xx寫溫度高位數值 aa 01 yy,aa表示幀頭,01表示溫度低位,yy寫溫度低位數值當然這只是比較簡單的說法,還有字長啊,檢驗啊等等問題需要考慮 使用51微控制器與pc進行串列埠通訊時...
做養殖前需要做哪些準備,想養殖肉牛需要做哪些準備
帝都小女子 養殖業前期準備工作 1.等到相關部門許可,並拿到合法證件。2.做市場考察,看看那些物種適合養殖並銷售。3.養殖業的醫務防護工作先做到位,以免有突發事件解決不了。4.場地方面的問題,飲水,家禽食用方面是否方便充足。養殖業的發展前景分析 首先,談談三個轉變。一是,種植業向養殖業轉變,改變養殖...
心肌梗塞需要做心肺復甦嗎,心肌梗塞發病時做心肺復甦有用嗎
不需要,心梗發生時若患者尚未出現心跳呼吸停止就不需要進行心肺復甦。請記住心肺復甦的適應症是心跳呼吸停止,對於任何疾病導致的心跳呼吸停止都可以使用心肺復甦施救,但是如果患者只是喪失意識,或者是根本還沒出現心跳呼吸停止的情況那就不需要心肺復甦。如果是心梗或懷疑心梗的情況,可以給患者含服硝酸甘油或救心丸後...