找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

51串口多字節(jié)發(fā)送與接收問題

查看數(shù): 16322 | 評論數(shù): 24 | 收藏 1
關(guān)燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發(fā)布時間: 2015-8-28 14:16

正文摘要:

在寫一個串口接受多字節(jié)的一個程序時遇到了一個問題,我寫程序使52單片機以9600波特率接受串口助手發(fā)送來的12個字節(jié),然后再發(fā)回去,但是在程序啟動時,單片機第一次收到數(shù)據(jù)并發(fā)回,發(fā)現(xiàn)在發(fā)回的數(shù)據(jù)中第一個字節(jié)變 ...

回復(fù)

ID:18297 發(fā)表于 2017-10-9 14:43
本帖最后由 zjjhtony 于 2017-10-9 14:47 編輯

請看壓縮包 aking.rar (30.76 KB, 下載次數(shù): 59)



123.jpg (197.49 KB, 下載次數(shù): 86)

123.jpg

222.jpg (9.81 KB, 下載次數(shù): 92)

222.jpg

111.jpg (27.95 KB, 下載次數(shù): 92)

111.jpg

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

ID:338173 發(fā)表于 2018-11-27 19:52
要有幀頭 幀尾 我寫過兩個單片機藍牙通信的程序。你加上幀頭 幀尾就行了,再有校驗位的話,基本萬無一失。這個代碼雖然不難 但是想了好久 分享一下

QQ截圖20181127195125.jpg (38.71 KB, 下載次數(shù): 41)

QQ截圖20181127195125.jpg
ID:433533 發(fā)表于 2018-11-26 16:35
進入中斷時候,先判斷RI是否等于1,然后在把sbuf的數(shù)據(jù)放入數(shù)組中
ID:404720 發(fā)表于 2018-11-26 15:04
請問現(xiàn)在解決了嗎?求
ID:267947 發(fā)表于 2017-12-27 19:49
可能是中斷問題
ID:94867 發(fā)表于 2017-12-27 19:09
謝謝講解
ID:237939 發(fā)表于 2017-10-10 15:42
4:在中斷里加while(!ri)這樣的語句,是巴不得系統(tǒng)死掉的寫法。應(yīng)該用if(ri==0) {再查下為啥進中斷居然不置位,然后清掉,return;} 這樣才是王道
ID:237939 發(fā)表于 2017-10-10 15:38
1:你的代碼沒有任何容錯。你既然用0d開頭,那你就要檢查一下0d,或者插入兩到三個無意義的數(shù)據(jù)作為頭。同時加入長度域和校驗值。
2:出現(xiàn)ff的可能有兩種情況,發(fā)送出錯或接收出錯。
起始位為邏輯0,那么不發(fā)送的時候最好是邏輯1.你開始初始化pc機或者單片機的時候,pc機或單片機在初始化之前他的狀態(tài)不是rs232協(xié)議,單片機很多時候口是復(fù)用的,有可能開始收到或發(fā)送的就會錯。這個很好解釋。
3:你的代碼計數(shù)到12,所以多了個ff,自然少了最后一個,這個很正常,這就是為啥我建議你加校驗和頭,長度的原因。
4:這種代碼風(fēng)格出錯是正常的,不錯才不正常。
ID:238225 發(fā)表于 2017-10-10 11:47
SER中斷有問題,判斷到RI==0馬上退出;RI==1才接收SBUF,清RI
ID:238225 發(fā)表于 2017-10-10 11:40
ser中斷有問題,里面判斷RI==1就清RI=0,接收SBUF,退出中斷;如果RI==0直接退出
ID:238036 發(fā)表于 2017-10-9 16:08
同樣問題同求
ID:238024 發(fā)表于 2017-10-9 16:01
第一次單片機也是接收12個字節(jié), 只不過第一個字節(jié)是FF,樓主可以重點分析這個FF是從哪來的
ID:111634 發(fā)表于 2017-10-9 15:21
老貼不回了
ID:237965 發(fā)表于 2017-10-9 12:14
建議接收到數(shù)據(jù)后delay 一下,再發(fā)送數(shù)據(jù)。先調(diào)試發(fā)送一個BYTE成功后再調(diào)試發(fā)送接收多個BYTE。
ID:219796 發(fā)表于 2017-10-8 18:47
init加flag=0試試
ID:225054 發(fā)表于 2017-10-8 09:30
我感覺要先設(shè)置串口工作方式后在允許串口發(fā)送數(shù)據(jù)
ID:89053 發(fā)表于 2015-9-10 10:52
發(fā)送的數(shù)據(jù)回傳么,接收到一個字節(jié)進入接收中斷后,直接發(fā)送,
ID:89750 發(fā)表于 2015-9-9 22:05
是不是緩沖區(qū)里有上次發(fā)送的數(shù)據(jù)導(dǎo)致亂碼。。
ID:89738 發(fā)表于 2015-9-9 21:02
這個問題我也遇到過,有時候也自己就正常了
ID:89481 發(fā)表于 2015-9-6 11:53
在中斷里面接收到數(shù)據(jù)之后馬上發(fā)送看看  不要設(shè)置flag標(biāo)志位  你看看結(jié)果是不是正確的
ID:89101 發(fā)表于 2015-8-30 18:49
從調(diào)試方法上來說,先單個字節(jié)發(fā)送,然后在多個字節(jié)發(fā)送
ID:89092 發(fā)表于 2015-8-30 14:28
51串口常於power on第一次傳送時常會發(fā)生資料錯誤, 所以, 建議power on時, 可以要求51串口, 傳任意資料, 之後, 才開始接收資料....
ID:76227 發(fā)表于 2015-8-29 14:51
在中斷里面接收到數(shù)據(jù)之后馬上發(fā)送看看  不要設(shè)置flag標(biāo)志位  你看看結(jié)果是不是正確的
ID:77578 發(fā)表于 2015-8-28 20:27
沒人回復(fù),自頂

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表