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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機串口通訊接收數據時遇到的邏輯問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:735148 發表于 2020-5-11 15:11 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
1黑幣
本帖最后由 飲酒作樂 于 2020-5-11 15:35 編輯

    串口中斷部分的程序下所示。add代表地址位,0xff代表開始。我準備先判斷初始位,再判斷地址位,寫入數組的只需要從地址位開始的后幾位。現在遇到的問題是,當我用正確地址測試時沒有異常,當我更改地址,按說應該再地址判斷處截至的,卻依然能執行(我設置斷點看到了),但是只能執行一次,緊接著當我更改回正確地址測試時,第一次卻不能執行,第二次才能執行。請各位幫我看一下。我自己實在看不出來
  1. void UART_Interrupt (void) interrupt  4
  2. {
  3.         static unsigned char t= 0;
  4.         static unsigned char i= 0;

  5.         uchar a;
  6.         if(RI)  //接收字節
  7.         {
  8.                 RI = 0;
  9.                 if(t ==0) //判斷第一位是否時起始位
  10.                 {
  11.                         a =SBUF;
  12.                         if(a == 0xff)
  13.                         {
  14.                                 a =0xc0;
  15.                                 t = 1;
  16.                         }
  17.                 }
  18.                 else if(t == 1) //判斷地址位是否正確
  19.                 {
  20.                         t=0;
  21.                         a = SBUF;
  22.                         if (a == add)
  23.                         {
  24.                                 a = 0xc0;
  25.                                 t = 2;
  26.                         }
  27.                 }
  28.                
  29.                 if(t==2)
  30.                 {
  31.                         DateBuf[ i ] =SBUF; //將接收緩沖區的信息按位寫入到數組中
  32.                         i++;
  33.                         if(i == 6)
  34.                         {
  35.                                 i = 0;
  36.                                 t = 0;
  37.                                 date_over = 1;
  38.                         }
  39.                 }                       
  40.         }
  41.         if(TI)
  42.         {

  43.                 TI = 0;
  44.         }
  45. }
復制代碼

最佳答案

查看完整內容

void UART_Interrupt (void) interrupt 4 { static unsigned char i=0; // if(RI)這個判斷無意義,既然進入串口中斷RI必定=1 RI=0; DateBuf=SBUF; if(DateBuf[0]==0xff)//判斷數據串第一個字節正確,否則覆蓋掉 { if(i==1)//判斷數據串第二個字節錯誤 { if(DateBuf[1]!=0xc0) { i=0; DateBuf[0]=0x00;//清除后重新接收 DateBuf[1]=0x00; } else i++; } else { ...
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:213173 發表于 2020-5-11 15:11 | 只看該作者
void UART_Interrupt (void) interrupt  4
{
        static unsigned char i=0;       
//        if(RI)這個判斷無意義,既然進入串口中斷RI必定=1
        RI=0;
        DateBuf[i]=SBUF;
        if(DateBuf[0]==0xff)//判斷數據串第一個字節正確,否則覆蓋掉
        {
                if(i==1)//判斷數據串第二個字節錯誤
                {               
                        if(DateBuf[1]!=0xc0)
                        {
                                i=0;
                                DateBuf[0]=0x00;//清除后重新接收
                                DateBuf[1]=0x00;
                        }
                        else i++;
                }               
                else
                {
                        i++;
                        if(i==x)//x=數據串長度
                        {                       
                                flag=1;//接收完成標志置1,供主程序判斷解析數據串
                                i=0;
                        }
                }
        }
}
回復

使用道具 舉報

板凳
ID:94031 發表于 2020-5-11 16:17 | 只看該作者
不要在串口中斷里做處理,中斷里只做接收放到數組里,中斷外做處理,否則影響接收。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久9热 | 精品美女久久久久久免费 | 亚洲一区二区在线播放 | 天天草草草 | 欧美片网站免费 | 国产精品久久九九 | 亚洲综合在线播放 | 人人干免费 | 一区二区av | 久久久久久亚洲精品不卡 | 九九精品在线 | 亚洲视频在线播放 | 天堂亚洲网| 色资源在线观看 | 天堂一区二区三区 | 成人av片在线观看 | 亚洲一区二区高清 | 久久久www成人免费精品 | 麻豆久久 | 精品成人av | 久久精品在线免费视频 | 亚洲国产激情 | 亚洲精精品| 国内精品久久久久久影视8 最新黄色在线观看 | 日韩欧美国产精品一区 | 欧美一区二区三区精品 | 国产精品免费av | 国产乱xxav | 精品一区电影 | a视频在线| 国产一级在线观看 | 伊人狠狠| www国产亚洲精品久久网站 | 视频一区二区在线观看 | 一区二区精品 | 国产精品免费观看视频 | 91网站在线播放 | 精品不卡| 成人精品一区二区三区 | 色婷婷久久久久swag精品 | 国产中文一区二区三区 |