欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機串口通訊接收數據時遇到的邏輯問題
[打印本頁]
作者:
飲酒作樂
時間:
2020-5-11 15:11
標題:
單片機串口通訊接收數據時遇到的邏輯問題
本帖最后由 飲酒作樂 于 2020-5-11 15:35 編輯
串口中斷部分的程序下所示。add代表地址位,0xff代表開始。我準備先判斷初始位,再判斷地址位,寫入數組的只需要從地址位開始的后幾位。現在遇到的問題是,當我用正確地址測試時沒有異常,當我更改地址,按說應該再地址判斷處截至的,卻依然能執行(我設置斷點看到了),但是只能執行一次,緊接著當我更改回正確地址測試時,第一次卻不能執行,第二次才能執行。請各位幫我看一下。我自己實在看不出來
void UART_Interrupt (void) interrupt 4
{
static unsigned char t= 0;
static unsigned char i= 0;
uchar a;
if(RI) //接收字節
{
RI = 0;
if(t ==0) //判斷第一位是否時起始位
{
a =SBUF;
if(a == 0xff)
{
a =0xc0;
t = 1;
}
}
else if(t == 1) //判斷地址位是否正確
{
t=0;
a = SBUF;
if (a == add)
{
a = 0xc0;
t = 2;
}
}
if(t==2)
{
DateBuf[ i ] =SBUF; //將接收緩沖區的信息按位寫入到數組中
i++;
if(i == 6)
{
i = 0;
t = 0;
date_over = 1;
}
}
}
if(TI)
{
TI = 0;
}
}
復制代碼
作者:
wulin
時間:
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;
}
}
}
}
作者:
xuyaqi
時間:
2020-5-11 16:17
不要在串口中斷里做處理,中斷里只做接收放到數組里,中斷外做處理,否則影響接收。
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1