⑴ 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接受到的字符存入变量,然后再比较
⑹ 电脑给单片机发送字符串,单片机比较收到的字符串是不是相同的
你的密码是字符串,
先想清楚怎么接收一串数据后再比较。
建议程序大巧困致流程:
先定义个全局变量数组,至少要大于密码长度
用串口中断接收,
接收到孝铅念第一个数据后,存入数组首地址,打开定时中断,
期间接收到的数据都放在数组里,顺便记录接收数据长激弯度
定时中断到时检验数组内的值和密码是不是相等
然后输出结果