|
發(fā)布時間: 2021-11-12 11:05
正文摘要:程序小白請教大佬,串口發(fā)送指令只執(zhí)行一次功能,后面發(fā)送的指令串口助手能正常發(fā)送接收,但功能沒出來,程序怎么修改? 主要是我想發(fā)送不同長度的指令,指令長度一樣的話程序是沒問題的 |
Y_G_G 發(fā)表于 2021-11-12 16:53 學(xué)習(xí)了謝謝 |
|
//串口接收上位機,可以用strstr函數(shù)查找,比如,上位機發(fā)送 數(shù)據(jù):255 //單片機可以先查找"數(shù)據(jù):",查找到之后再處理后面的255,這樣的代碼可以簡單明了很多 void Uart2_Isr() interrupt 8 //串口2中斷 { char *p,Uart_S[15]; static unsigned char RX_Count; unsigned a; if(S2CON&0x02) { S2CON&=~0x02; //清除中斷發(fā)送標(biāo)示位 Busy=0; // return; } //──────────────────────────────────────────────────────────────────────────── if(S2CON&0x01) { S2CON&=~0x01; //清除中斷接收標(biāo)示位 Uart_S[RX_Count]=S2BUF; RX_Count++; p=strstr(Uart_S,"數(shù)據(jù):"); //查找指令結(jié)束符"數(shù)據(jù):" if(NULL!=p) //如果沒有查找到"數(shù)據(jù):",指針返回值為空 { //指針返回值不為空,就表示串口接收到"數(shù)據(jù):",處理......... } } //────────────────────────────────────────────────────────────────────────────── } |
188610329 發(fā)表于 2021-11-12 15:43 好的謝謝 |
|
用for 循環(huán) 假定你的 dat 長度為64 for(j=0, j<63,j++) //循環(huán)63次 { dat[j] = dat[j+1]; } 然后再去對比指令。 |
188610329 發(fā)表于 2021-11-12 14:30 利用 dat[j] = dat[j+1]; 具體怎么實現(xiàn)的呢? |
|
首先需要確認(rèn),你的 i 是全局變量, 然后, 你即使 sflag == FALSE 也要 i=0 不然,只要有一個錯誤指令,后面你的指令位置都不會從0開始,永遠(yuǎn)指令都是錯誤的。 通常有兩個方案, 1)按照波特率的 105倍計時,超過后,判斷超時(表示所有指令都已經(jīng)接受完畢),開始驗證指令,驗證完畢后,不管指令對不對,都把 i=0 準(zhǔn)備接受下一個指令。 2)利用 dat[j] = dat[j+1]; 進行移位,多次反復(fù)比較指令,那么就不在乎 i 有沒有歸零了。 |
Powered by 單片機教程網(wǎng)