急求单片机高手指点........如何通过串口接收一组字符串,然后判断这组字符串,来调用相应的函数啊???
voidUART()interrupt4{recive[i]=SBUF;i++;delay(10);//P0=a;RI=0;flag=1;//function();swi...
void UART() interrupt 4
{
recive[i]=SBUF;
i++;
delay(10);
// P0=a;
RI=0;
flag=1;
// function();
switch(recive[i])
{
case 'a':
P2=0x01;
P1=0x02;
P0=0x02;
break;
case 'b':
P2=0x01;
P1=0x02;
P0=0x00;
break;
}
}
/*
void function()
{
if(a=="00000001")
{ //一号正转
P2=0x01;
P1=0x02;
P0=0x02;
}
if(a=="00000000")
{
P2=0x01;
P1=0x02;
P0=0x00;
}
if(a==3)
P0=0x03;
if(a==4)
{
P2=0x02;
P1=0x03;
P0=0x06;
}*/ 展开
{
recive[i]=SBUF;
i++;
delay(10);
// P0=a;
RI=0;
flag=1;
// function();
switch(recive[i])
{
case 'a':
P2=0x01;
P1=0x02;
P0=0x02;
break;
case 'b':
P2=0x01;
P1=0x02;
P0=0x00;
break;
}
}
/*
void function()
{
if(a=="00000001")
{ //一号正转
P2=0x01;
P1=0x02;
P0=0x02;
}
if(a=="00000000")
{
P2=0x01;
P1=0x02;
P0=0x00;
}
if(a==3)
P0=0x03;
if(a==4)
{
P2=0x02;
P1=0x03;
P0=0x06;
}*/ 展开
2个回答
展开全部
我的话我会建一个队列,如果有数据竟来就把数据先放进队列,当需要判断的时候(可能根据已接收的字节数或其他原因) 在整体判断既可!
更多追问追答
追问
额,,,不会、、、。。
追答
你先定义一个数据包 包的类型大概如此:
#define MAX_BUF_SIZE 100
struct Packet
{
int length;
char buf[MAX_BUF_SIZE];
}
当你接收到 数据长度超过 sizeof(int) 时再判断 接受数据的长度是否等于 length 如果是的话证明整个包你都接受成功了,这时候你就可以判断buf里面的内容了。不过前提就是你发送的时候要封包,把你要发送的数据和length都填充好,然后再通过串口发过来!
2011-09-30
展开全部
同学,记得 你 发过一次的,好像
追问
是的。,,单个字符已经解决,就是字符串一直没弄好。
追答
建议 去 我的领地 5d6d 的 proteus 论坛看看
那里有很多 单片机仿真实例,包括仿真图 和 源码
搜 5d6d 和 proteus 2个关键词
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询