欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 單片機(jī)串口通訊接收數(shù)據(jù)時(shí)遇到的邏輯問題 [打印本頁(yè)]

作者: 飲酒作樂    時(shí)間: 2020-5-11 15:11
標(biāo)題: 單片機(jī)串口通訊接收數(shù)據(jù)時(shí)遇到的邏輯問題
本帖最后由 飲酒作樂 于 2020-5-11 15:35 編輯

    串口中斷部分的程序下所示。add代表地址位,0xff代表開始。我準(zhǔn)備先判斷初始位,再判斷地址位,寫入數(shù)組的只需要從地址位開始的后幾位。現(xiàn)在遇到的問題是,當(dāng)我用正確地址測(cè)試時(shí)沒有異常,當(dāng)我更改地址,按說應(yīng)該再地址判斷處截至的,卻依然能執(zhí)行(我設(shè)置斷點(diǎn)看到了),但是只能執(zhí)行一次,緊接著當(dāng)我更改回正確地址測(cè)試時(shí),第一次卻不能執(zhí)行,第二次才能執(zhí)行。請(qǐng)各位幫我看一下。我自己實(shí)在看不出來
  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)  //接收字節(jié)
  7.         {
  8.                 RI = 0;
  9.                 if(t ==0) //判斷第一位是否時(shí)起始位
  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; //將接收緩沖區(qū)的信息按位寫入到數(shù)組中
  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. }
復(fù)制代碼


作者: wulin    時(shí)間: 2020-5-11 15:11
void UART_Interrupt (void) interrupt  4
{
        static unsigned char i=0;       
//        if(RI)這個(gè)判斷無意義,既然進(jìn)入串口中斷RI必定=1
        RI=0;
        DateBuf[i]=SBUF;
        if(DateBuf[0]==0xff)//判斷數(shù)據(jù)串第一個(gè)字節(jié)正確,否則覆蓋掉
        {
                if(i==1)//判斷數(shù)據(jù)串第二個(gè)字節(jié)錯(cuò)誤
                {               
                        if(DateBuf[1]!=0xc0)
                        {
                                i=0;
                                DateBuf[0]=0x00;//清除后重新接收
                                DateBuf[1]=0x00;
                        }
                        else i++;
                }               
                else
                {
                        i++;
                        if(i==x)//x=數(shù)據(jù)串長(zhǎng)度
                        {                       
                                flag=1;//接收完成標(biāo)志置1,供主程序判斷解析數(shù)據(jù)串
                                i=0;
                        }
                }
        }
}
作者: xuyaqi    時(shí)間: 2020-5-11 16:17
不要在串口中斷里做處理,中斷里只做接收放到數(shù)組里,中斷外做處理,否則影響接收。




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1