⑴ 51單片機串口用數組接收字元串程序怎麼寫
對於固定的數據,可以通過順序判斷來識別用if或switch語句來判決即可
通過串口中斷,每次進入把SBUF的值賦給T,通過判決、累加NUM的值最終取得冒號後面的數值(不知樓主是否是要最後的數值)
voidUART_Int(void)interrupt4
{
staticucharNUM=0;
ucharT;
if(RI==1)
{
RI=0;
T=SBUF;//接收串口數據
switch(T)//如果是按value":0的順序讀進的話會最終觸發NUN=7的條件
{
case'v':
NUM=1;
break;
case'a':
if(NUM==1)
{
NUM=2;
}
else
{
NUM=0;
}
break;
case'l':
if(NUM==2)
{
NUM=3;
}
else
{
NUM=0;
}
break;
case'u':
if(NUM==3)
{
NUM=4;
}
else
{
NUM=0;
}
break;
case'e':
if(NUM==4)
{
NUM=5;
}
else
{
NUM=0;
}
break;
case'"':
if(NUM==5)
{
NUM=6;
}
else
{
NUM=0;
}
break;
case':':
if(NUM==6)
{
NUM=7;
}
else
{
NUM=0;
}
break;
default:
if(NUM==7)
{
LED=T; //LED為全局變數
}//把最後的數據傳給LED
NUM=0;
break;
}
}
}
⑵ 單片機中 x!=『\0』是什麼意思
X不等於0,用於檢測字元串結尾,字元串以'\0'結尾,編譯後就是0
⑶ 用串口工具發送了一個字元串,單片機端怎麼把它與設定好的一個字元串作比較判斷是否相等
首先單片機要知道什麼時候開始接收的字元串,在什麼時候結束。只有結束後才能開始字元串的比較。因此計算機發給單片機的字元串最好有「開始」和「結束」的標示,讓單片機判斷完全接收字元串後才開始比較。
字元串比較的函數就簡單了。比如這樣的函數:
int strcmp(char *S,char *D,char LEN)
{
int n;
for(n=0;n<LEN;n++)
if(S[n]!=D[n]) return 1;
return 0;
}
上面的函數至比較字元串S和D的前LEN個字元,如果遇到不同的字元就不需要比較了,立即返回1,如果被比較的部分相同就返回0.
⑷ 51單片機串口接收字元串
51單片機串口接收字元串,接收的字元串長度不定,無結束符,要判斷這個字元串結束,確實比較難。如果每個字元串還是連續發送,幾乎是無法判斷的。如果每個字元串之前有一定的空閑時間,可以根據最短的空閑時間來判斷結束。即接收每一個字元都開始計時,接收下一個字元結束計時,如果計時的時間超過最短的空閑時間,則前一個字元為結束,且新字元串開始。並再重新計時。
⑸ 51單片機 串口通信 檢查接收的字元串
首先SBUF只有8位 即一位元組,而"adcd"有4位元組+『 』個,你這把temp和「abcd」比較永遠只能為假。所以LED1=!LED1;這條語句不能執行。正確的做法是建立一個變數,將SBUF接受到的字元存入變數,然後再比較
⑹ 電腦給單片機發送字元串,單片機比較收到的字元串是不是相同的
你的密碼是字元串,
先想清楚怎麼接收一串數據後再比較。
建議程序大巧困致流程:
先定義個全局變數數組,至少要大於密碼長度
用串口中斷接收,
接收到孝鉛念第一個數據後,存入數組首地址,打開定時中斷,
期間接收到的數據都放在數組里,順便記錄接收數據長激彎度
定時中斷到時檢驗數組內的值和密碼是不是相等
然後輸出結果