欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機串口接收數(shù)據(jù) 怎么接收一個判斷一個?
[打印本頁]
作者:
418854190
時間:
2021-11-25 21:07
標題:
單片機串口接收數(shù)據(jù) 怎么接收一個判斷一個?
遙控接收部分 不想接收完整的數(shù)據(jù)后再判斷接收的數(shù)據(jù)是否正確 想接收一個判斷一個 接收判斷的部分怎么寫 要C語言的 我現(xiàn)在只能判斷第一個 往后就不會寫了 比如接收123456 1到5需要判斷 6存到Temp里
void UARTInterrupt(void) interrupt 4
{
if(RI)
{ RI=0;
Receive=SBUF;
if(Receive=='1')
{ Temp=Receive;
}
}
else
TI = 0;
}
作者:
188610329
時間:
2021-11-25 22:51
建議存緩存,然后統(tǒng)一判斷, 如果非要收一個判斷一個的話, 接收的時候啥事都干不了了。
接收時判斷如下:
void UARTInterrupt(void) interrupt 4
{
u8 i;
if(RI)
{
RI=0;
Receive=SBUF;
if(Receive=='1') //如果第一個字節(jié)吻合'1'
{
i = 255;
while((--i > 0) && (!RI));
if(RI)
{
RI=0;
Receive=SBUF;
if(Receive=='2') //如果第二個字節(jié)吻合'2'
{
i = 255;
while((--i > 0) && (!RI));
if(RI)
{
RI=0;
Receive=SBUF;
if(Receive=='3') //如果第三個字節(jié)吻合'3'
{
i = 255;
while((--i > 0) && (!RI));
if(RI)
{
RI=0;
Receive=SBUF;
if(Receive=='4') //如果第四個字節(jié)吻合'4'
{
i = 255;
while((--i > 0) && (!RI));
if(RI)
{
RI=0;
Receive=SBUF;
if(Receive=='5') //如果第五個字節(jié)吻合'5'
{
i = 255;
while((--i > 0) && (!RI));
if(RI)
{
RI=0;
My_Buf=SBUF; //保存第六個字節(jié)到緩存并返回
Recive_Ok = 1;
}
}
}
}
}
}
}
}
}
}
}
else
TI = 0;
}
再你代碼的基礎上寫的,i用來判斷超時, i 的值取決于你的波特率,波特率越高i可以越小,反之i 可能需要增大。
最后,這種方法非常不建議?赡艿脑,還是推薦用緩沖池方式。
作者:
Y_G_G
時間:
2021-11-25 23:32
你這是紅外遙控還是串口,紅外遙控是在外部中斷的,那是要接收完整數(shù)據(jù)的
如果是串口通訊,可以在上位機或者遙控程序中加入起始信號和停止信號收到起始信號開始保存到數(shù)組中,收到結束信號之后開始判斷接收的信息,不需要每次都檢測,那串口不累壞了
你參考一下:
void Uart1_Isr() interrupt 4 //串口1中斷函數(shù),這里要參考數(shù)據(jù)手冊來編寫代碼
{
char *p,Uart_S[20];
static unsigned char RX_Count=0x0;
if(TI) //如果是發(fā)送中斷觸發(fā),就處理發(fā)送中斷
{
TI=0; //發(fā)送中斷
busy=0;
}
if(RI)
{
RI=0; //清除中斷接收標示位
Uart_S[RX_Count]=SBUF;
if(SBUF==0xff)end_str++; //檢測結束符
else if (end_str>0)end_str--;
if((Uart_S[RX_Count]==0xe8)&&(Uart_S[RX_Count-1]==0xc9)) //檢測開始接收到"設"字
{
RX_Count=1;
Uart_S[0]=0xc9;
Uart_S[1]=0xe8;
}
RX_Count++;
if(RX_Count>=20)RX_Count=0;//防止數(shù)組溢出
if(end_str>2)
{
p=strstr(Uart_S,"設開機"); //查找指令
if(NULL!=p)//如果接收到"設開機"字符串,指針返回值不為"空"
{
//處理部分
}
}
end_str=0;
RX_Count=0;
memset(&Uart_S,0,sizeof(Uart_S)); //串口接收數(shù)據(jù)歸零
}
}
}
作者:
xws245925587
時間:
2021-11-26 08:22
對于數(shù)據(jù)接收,建立一個環(huán)形緩存,在接收數(shù)據(jù)的時候,把數(shù)據(jù)push進緩存中,在外部(while大循環(huán)中)一直檢測緩存是否有數(shù)據(jù),有數(shù)據(jù)則讀取出來,類似生產(chǎn)者消費者模式
作者:
npn
時間:
2021-11-26 08:55
建立一個unsigned char數(shù)組,然后進行FIFO緩存。
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1