用串口工具发送了一个字符串,单片机端怎么把它与设定好的一个字符串作比较判断是否相等?

用串口工具发送了一个字符串,单片机端怎么把它与设定好的一个字符串作比较判断是否相等?
如果有知道的朋友可以给我一段参考程序,其次也可以告诉我怎么把接收到的一个字符串每一位取出来放到一个数组里面,谢谢大家了

首先单片机要知道什么时候开始接收的字符串,在什么时候结束。只有结束后才能开始字符串的比较。因此计算机发给单片机的字符串最好有“开始”和“结束”的标示,让单片机判断完全接收字符串后才开始比较。

字符串比较的函数就简单了。比如这样的函数:
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.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-02-04
判断串口接收的字符是否相等的程序:
temp=SBUF;
if(temp=XXXX)
{如果相等后需要执行的代码写这里}
else
{如果不等需要执行的代码写这里}
将接收的字符存入数组:
temp=SBUF;
for(i=0;i<8;i--)
{
temp<<1;
TAB[i]=CY;
}
注意:1.要提前申明char temp和char TAB[8]这两个变量
2.以上只是部分代码,并非完整的程序,仅供参考追问

temp=SBUF;
if(temp=XXXX)
这样可以吗?字符串比较可以用运算符吗?而且用的是赋值运算符‘=’,strcmp也不行啊。
假如我在单片机内设定了“admin”一个字符串,我要求将串口接收到的数据与之做比较,然后按照结果做动作,如果用第一段程序好像不能实现。
receive = SBUF;
if(receive == "ADMIN") {
//code
}
else {
//code
}
也不可以。

下面的还没试。
不惜赐教。。

追答

这样比较肯定是不行的,串口收到的数据不是字符串,是一个 8bit的数据,简单点说就是8个二进制数,两个类型不同,当然不能比较了

追问

哦,我有点明白了。还有几个疑点却一时间表达不清楚。但是还是写过朋友了,自己假期无聊自己玩单片机,还有好多不清楚的地方,望下次朋友还能帮忙。特此谢过了。

追加20分积分为谢

本回答被提问者采纳
第2个回答  2012-02-04
这样的话只能用简单的就校验。助手旁边有个校验位的设置,你设置一下吧。在程序中注意,数据格式。

简单点的方法,你可以发两个数据,如数据1: 0x33数据2: 0x99,数据2作为校验数据校验数据。
当单片机接受到数据1和数据2后,把数据1扩大三倍,然后和数据2比较大小,相等的话表明数据正确。不相等的话为错误,需要从发。
第3个回答  2012-02-04
程序里 一个 字符 一个字符 比较嘛追问

我不知道怎么把收到的字符串的每一个字符单独取出来啊。。。请问怎么做

我用这种方法,但是实现不了..
ES=0;
table[i++]=SBUF;
RI=0;

ES=1;

相似回答