1. 51单片机串口接收到一个字符串后怎样从中提取想的内容请提供例程!
可以。
unsigned char buff[32];
unsigned int len;
unsigned char receiveByte()
{
while(RI==0); //等待接收数据
RI = 0;
return SBUF;
}
void receiveString()
{
unsigned char bbyte;
len = 0;
do
{
bbyte = receiveByte();
buff[len++] = bbyte;
}
while(bbyte!=0x00);
}
这世誉个程序可以搜启段接旁拍受一个字符串,就是以00结尾的字符串。
2. 单片机接收串口数据
你通过串口助手要接受字符串或一组数据需要在单片机端开辟一个缓冲区,否则可能丢失数据。
以下程序是较为通用的串口收发例程,开辟一个16字节的缓冲区,两个指针,一个存数指针,一个取数指针,两指针相等,证明没有新的接收数据。
#include<reg51.h>
#define uchar unsigned char
uchar buf[16],getptr,putptr;
void uart_isr() interrupt 4
{
if(RI)
{
RI=0;
buf[putptr]=SBUF;
putptr++;
putptr&=0x0f;
}
}
main()
{
TMOD=0x20;
SCON=0x50;
TH1=TL1=0xfd;
TR1=1;
ES=1;
EA=1;
putptr=0;
getptr=0;
while(1)
{
if(getptr!=putptr) //取数指针和存数指针如果不等
{
SBUF=buf[getptr];
getptr++;
getptr&=0x0f;
while(!TI);
TI=0;
}
}
}
3. 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;
}
}
}
4. 单片机从PC端接受字符
PC端发送数据的时候,每次发送一个字符串即可。
单片机就可以接收到这个字符串。