久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 16501|回復: 24
打印 上一主題 下一主題
收起左側

51串口多字節發送與接收問題

  [復制鏈接]
回帖獎勵 120 黑幣 回復本帖可獲得 10 黑幣獎勵! 每人限 1 次
跳轉到指定樓層
樓主
在寫一個串口接受多字節的一個程序時遇到了一個問題,我寫程序使52單片機以9600波特率接受串口助手發送來的12個字節,然后再發回去,但是在程序啟動時,單片機第一次收到數據并發回,發現在發回的數據中第一個字節變成了FF,而第12個字節丟失,第二次發送便正常了,這是為什么? 下面是我的程序
/*
串口發送多字節
for循環發送
*////////////////////////////////
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char flag,a,i,b;//串口接受標識,接受的數據,
//uchar code table[]="I get";//定義發送數組
uchar table1[12]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
void lnit()//初始化
{
        TMOD=0x20;//設置工作方式
        TH1=0xfd;//設置初值
        TL1=0xfd;
        TR1=1;
        REN=1;
        SM0=0;
        SM1=1;
        EA=1;//開總中斷
        ES=1;//開串口中斷
}
void main()
{
        lnit();
        while(1)
        {
                if(flag==1)//當接收到數據
                {
                        ES=0;//關閉串口中斷
                        for(i=0;i<12;i++)
                        {
                                SBUF=table1[ i];
                                while(!TI);
                                TI=0;
                        }
                        //SBUF=a;
                        //while(!TI);
                //        TI=0;
                        ES=1;
                        b=0;
                        flag=0;
                }
        }
}
void ser()interrupt 4
{
                table1=SBUF;
                while(!RI);
                RI=0;
                b++;
                if(b==12)
                        flag=1;
        
}

評分

參與人數 1黑幣 +10 收起 理由
螺旋丸 + 10

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂1 踩
回復

使用道具 舉報

來自 2#
ID:18297 發表于 2017-10-9 14:43 | 只看該作者
本帖最后由 zjjhtony 于 2017-10-9 14:47 編輯

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



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

123.jpg

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

222.jpg

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

111.jpg

評分

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

查看全部評分

回復

使用道具 舉報

板凳
ID:77578 發表于 2015-8-28 20:27 | 只看該作者
沒人回復,自頂
回復

使用道具 舉報

地板
ID:76227 發表于 2015-8-29 14:51 | 只看該作者

回帖獎勵 +10 黑幣

在中斷里面接收到數據之后馬上發送看看  不要設置flag標志位  你看看結果是不是正確的
回復

使用道具 舉報

5#
ID:89092 發表于 2015-8-30 14:28 | 只看該作者

回帖獎勵 +10 黑幣

51串口常於power on第一次傳送時常會發生資料錯誤, 所以, 建議power on時, 可以要求51串口, 傳任意資料, 之後, 才開始接收資料....
回復

使用道具 舉報

6#
ID:89101 發表于 2015-8-30 18:49 | 只看該作者

回帖獎勵 +10 黑幣

從調試方法上來說,先單個字節發送,然后在多個字節發送
回復

使用道具 舉報

7#
ID:89481 發表于 2015-9-6 11:53 | 只看該作者

回帖獎勵 +10 黑幣

在中斷里面接收到數據之后馬上發送看看  不要設置flag標志位  你看看結果是不是正確的
回復

使用道具 舉報

8#
ID:89738 發表于 2015-9-9 21:02 | 只看該作者

回帖獎勵 +10 黑幣

這個問題我也遇到過,有時候也自己就正常了
回復

使用道具 舉報

9#
ID:89750 發表于 2015-9-9 22:05 | 只看該作者

回帖獎勵 +10 黑幣

是不是緩沖區里有上次發送的數據導致亂碼。。
回復

使用道具 舉報

10#
ID:89053 發表于 2015-9-10 10:52 | 只看該作者

回帖獎勵 +10 黑幣

發送的數據回傳么,接收到一個字節進入接收中斷后,直接發送,
回復

使用道具 舉報

11#
ID:225054 發表于 2017-10-8 09:30 來自觸屏版 | 只看該作者
我感覺要先設置串口工作方式后在允許串口發送數據
回復

使用道具 舉報

12#
ID:219796 發表于 2017-10-8 18:47 來自觸屏版 | 只看該作者
init加flag=0試試
回復

使用道具 舉報

13#
ID:237965 發表于 2017-10-9 12:14 | 只看該作者
建議接收到數據后delay 一下,再發送數據。先調試發送一個BYTE成功后再調試發送接收多個BYTE。
回復

使用道具 舉報

14#
ID:111634 發表于 2017-10-9 15:21 | 只看該作者

回帖獎勵 +10 黑幣

老貼不回了
回復

使用道具 舉報

15#
ID:238024 發表于 2017-10-9 16:01 | 只看該作者
第一次單片機也是接收12個字節, 只不過第一個字節是FF,樓主可以重點分析這個FF是從哪來的
回復

使用道具 舉報

16#
ID:238036 發表于 2017-10-9 16:08 | 只看該作者
同樣問題同求
回復

使用道具 舉報

17#
ID:238225 發表于 2017-10-10 11:40 | 只看該作者
ser中斷有問題,里面判斷RI==1就清RI=0,接收SBUF,退出中斷;如果RI==0直接退出
回復

使用道具 舉報

18#
ID:238225 發表于 2017-10-10 11:47 | 只看該作者
SER中斷有問題,判斷到RI==0馬上退出;RI==1才接收SBUF,清RI
回復

使用道具 舉報

19#
ID:237939 發表于 2017-10-10 15:38 | 只看該作者
1:你的代碼沒有任何容錯。你既然用0d開頭,那你就要檢查一下0d,或者插入兩到三個無意義的數據作為頭。同時加入長度域和校驗值。
2:出現ff的可能有兩種情況,發送出錯或接收出錯。
起始位為邏輯0,那么不發送的時候最好是邏輯1.你開始初始化pc機或者單片機的時候,pc機或單片機在初始化之前他的狀態不是rs232協議,單片機很多時候口是復用的,有可能開始收到或發送的就會錯。這個很好解釋。
3:你的代碼計數到12,所以多了個ff,自然少了最后一個,這個很正常,這就是為啥我建議你加校驗和頭,長度的原因。
4:這種代碼風格出錯是正常的,不錯才不正常。
回復

使用道具 舉報

20#
ID:237939 發表于 2017-10-10 15:42 | 只看該作者
4:在中斷里加while(!ri)這樣的語句,是巴不得系統死掉的寫法。應該用if(ri==0) {再查下為啥進中斷居然不置位,然后清掉,return;} 這樣才是王道
回復

使用道具 舉報

21#
ID:94867 發表于 2017-12-27 19:09 | 只看該作者
謝謝講解
回復

使用道具 舉報

22#
ID:267947 發表于 2017-12-27 19:49 | 只看該作者
可能是中斷問題
回復

使用道具 舉報

23#
ID:404720 發表于 2018-11-26 15:04 | 只看該作者
請問現在解決了嗎?求
回復

使用道具 舉報

24#
ID:433533 發表于 2018-11-26 16:35 | 只看該作者
進入中斷時候,先判斷RI是否等于1,然后在把sbuf的數據放入數組中
回復

使用道具 舉報

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

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

QQ截圖20181127195125.jpg
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产7777| 99亚洲视频 | 中文av电影 | 亚洲色图网址 | 狠狠做深爱婷婷综合一区 | 精品视频一区二区三区 | 一级黄a| 欧美中文在线 | 中文字幕av网站 | 99日韩 | 亚洲成人三级 | 亚洲国产成人在线视频 | 日韩av成人在线 | 久草青青草 | 国产福利视频在线观看 | 国产免费一区二区三区 | 影音先锋成人资源 | 久久久久国产精品午夜一区 | 国产成人免费在线 | 日韩精品免费在线观看 | 99re热精品视频 | av免费在线观看网站 | 亚洲综合无码一区二区 | 亚洲一区二区在线视频 | 人人性人人性碰国产 | 日韩一区二区三区在线观看 | 91看片官网 | 久久精品一 | 免费看91| 免费簧片视频 | 国产免费自拍 | 精品国产乱码一区二区三区 | 成人性生交大片免费看r链接 | 久久精品一区二区三区四区 | 99这里只有精品视频 | 亚洲精品视频在线 | 少妇精品久久久久久久久久 | 亚洲成人动漫在线观看 | 99pao成人国产永久免费视频 | 在线成人免费视频 | 久久久久久高潮国产精品视 |