51单片机如何对接收的字符串进行判断? 20
下面的程序是单片机接收PC发过来以s开头的字符串,然后返回PC串口上的,我想改成如果接收到如:s000后,led1=1,接收到s001后led1=0.//串口接收以特定字...
下面的程序是单片机接收PC发过来以s开头的字符串,然后返回PC串口上的,我想改成如果接收到如:s000后,led1=1,接收到s001后led1=0.
//串口接收以特定字符为开头的字符串并且保存特定字符之后的有效位
#include<reg52.h>
#define uint unsigned char
#define uchar unsigned int
uchar ser_receive; //串口接收到的数据
uchar ser_flag=0;
sbit led1=P0^0;
sbit led2=P0^1;
sbit led3=P0^2;
sbit led4=P0^3;
uchar receive_number[3]={0};//接收串口发送来的数据的数组
uchar i=0;
uchar j;
uchar come=0;
void init_ser()
{
TMOD=0X20;//定时器1工作在方式2
TH1=0XFD;
TL1=0XFD; //波特率9600
TR1=1;
EA=1;
SM0=0;
SM1=1;
REN=1;//允许串口接收
ES=1;//开串口 中断
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/****************************************************************************************
* 程序目的:串口接收字符串,但是要以字符s为开头的后面的11位字符,若开头不为s则接收不写入数组
* 若开头为a 但是发送有效位超过3位 就把后面的截断 只要前11位
****************************************************************************************/
void ser() interrupt 4 //中断函数不用声明
{
if(RI==1)
{
RI=0;
ser_receive=SBUF;
if(come==1)
{
if(ser_receive!='\0'&&ser_receive!='s')
{
receive_number[i]=ser_receive;
i++;
if(i==3)
{
i=0;
ser_flag=1;
come=0;
}
}
}
else if(ser_receive=='s')
{
come=1;
}
}
}
void main()
{
init_ser();
while(1)
{
if(ser_flag==1)
{
ES=0;
ser_flag=0;
for(j=0;j<3;j++)
{
SBUF=receive_number[j];
while(!TI);
TI=0;
delay(10);
}
ES=1;
}
}
} 展开
//串口接收以特定字符为开头的字符串并且保存特定字符之后的有效位
#include<reg52.h>
#define uint unsigned char
#define uchar unsigned int
uchar ser_receive; //串口接收到的数据
uchar ser_flag=0;
sbit led1=P0^0;
sbit led2=P0^1;
sbit led3=P0^2;
sbit led4=P0^3;
uchar receive_number[3]={0};//接收串口发送来的数据的数组
uchar i=0;
uchar j;
uchar come=0;
void init_ser()
{
TMOD=0X20;//定时器1工作在方式2
TH1=0XFD;
TL1=0XFD; //波特率9600
TR1=1;
EA=1;
SM0=0;
SM1=1;
REN=1;//允许串口接收
ES=1;//开串口 中断
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/****************************************************************************************
* 程序目的:串口接收字符串,但是要以字符s为开头的后面的11位字符,若开头不为s则接收不写入数组
* 若开头为a 但是发送有效位超过3位 就把后面的截断 只要前11位
****************************************************************************************/
void ser() interrupt 4 //中断函数不用声明
{
if(RI==1)
{
RI=0;
ser_receive=SBUF;
if(come==1)
{
if(ser_receive!='\0'&&ser_receive!='s')
{
receive_number[i]=ser_receive;
i++;
if(i==3)
{
i=0;
ser_flag=1;
come=0;
}
}
}
else if(ser_receive=='s')
{
come=1;
}
}
}
void main()
{
init_ser();
while(1)
{
if(ser_flag==1)
{
ES=0;
ser_flag=0;
for(j=0;j<3;j++)
{
SBUF=receive_number[j];
while(!TI);
TI=0;
delay(10);
}
ES=1;
}
}
} 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询