51单片机串口用数组接收字符串程序怎么写?

接收到一大串,列如
HTTP/1.1 200 OK
Server: nginx/1.1.19
X-Powered-By: PHP/5.3.10-1ubuntu3.6
Set-Cookie:CAKEPHP=ljgd18fpupaedgrrhepn0moda6; expires=Sat, 18-Jul-201510:37:30 GMT; path=/
P3P: CP="NOIADM DEV PSAi COMNAV OUR OTRo STP IND DEM"

2d
{"timestamp":"2015-07-10T10:05:50","value":0}
0
只有"value":0是有用的,想要把它提取出来识别,控制led亮灭,该怎么去写c程序?

对于固定的数据,可以通过顺序判断来识别用if或switch语句来判决即可
通过串口中断,每次进入把SBUF的值赋给T,通过判决、累加NUM的值最终取得冒号后面的数值(不知楼主是否是要最后的数值)
void UART_Int(void) interrupt 4
{
static uchar NUM = 0;
uchar T;
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;

}
}
}

温馨提示:内容为网友见解,仅供参考
无其他回答

如何在串口中接收一个字符串
temp=SBUF;\/\/ senduart(temp); \/\/用来测试过数据接收是否正确 if(temp!='\\n') \/\/判断是否接收到结束符 { RevBuf[data_count]=temp;\/\/ 否,就存到RevBuf【】数组中 data_count++;} else { temp_length=data_count;\/\/是,记录其数据长度 data_count=0;} } } void main(void){ s...

如何用51串口接受和发送数据,具体程序。
给你一个我自己写的串口通信程序,上层软件用串口调试助手即可,单片机软件如下:include <reg52.h> define uchar unsigned char sbit k5=P2^1;uchar zf[]={'0','1','2','3','4','5','6','3','7','8','9','a','b','c','d','e','f',0x00};uchar code dis[]={0xc0...

c51,单片机从串口接收字符串,放到一个数组里面,然后在与一个常量字符...
建议 去 我的领地 5d6d 的 proteus 论坛看看 那里有很多 单片机仿真实例,包括仿真图 和 源码 搜 5d6d 和 proteus 2个关键词

51单片机串口接收数组数据并存储
你用一个数组变量(也就是开辟一个接收缓冲区)就OK了如:include<reg51.h> define uchar unsigned char uchar buf[16],num;void ser_isr() interrupt 4 { if(RI){ RI=0;buf[num]=SBUF;num++;num&=0x0f;} } main(){ TMOD=0x20;SCON=0x50;TH1=TL1=0xfd;TR1=1;ES=1;EA=1;while...

一道51单片机的C语言程序,关于串口通讯的,很简单...
if(flag==1) \/\/等待flag标志位置位,当接收到数据的时候在串口接收中断中置位 { ES=0; \/\/禁止串口中断,但是注意发送中断标志位的置位仍然正常 for(i=0;i<18;i++) \/\/for循环为了一个个把之前定义的字符串 { SBUF=table[i]; \/\/向串口收发缓冲器中写入回应的内容“I receive...

51单片机通过串口实现数据的发送与接收程序
一般来说,过程如下:1,配置串口参数、波特率等,开启串口中断;void Init_UART(){ } 2,中断函数里写中断响应函数,根据接收的指令或者数据,执行相应的动作;程序一般为:void UART_ISR() interrupt x using y { ;串口中断处理函数 } x - 单片机的C51中断号 y - 指定使用的当前工作...

51单片机串口接收一个数组
1.你先显示num这个变量试试,看你是否接收到了数据。2. 把显示数值换成一个常数,试试你的显示是否正常

51单片机如何进行多字节串口接收?!!!
以你的程序为例改进,在中断服务接收中,每次接收中断只收1个字符,完成后退出。void uart_interrupt(void) interrupt 4 using 0 { static unsigned char i=0;unsigned char buf;if(RI==1){ buf=SBUF;switch(i){ case 0:if(buf==0x23)i=1;break;case 1:case 2:case 3:case 4:case ...

STC 52 单片机 从串口接收字符串
假设收到的数据存在单片机temp里面。char temp[4] ={'5','1','6','8'};a = (temp[0] - '0') * 10 + (temp[1] - '0');b = (temp[2] - '0') * 10 + (temp[3] - '0');这样就可以了。

如何用51单片机RXD串口接收MIDI信号然后将命令转换到数码管显示_百度知 ...
接收函数差不多,可以申明一个数组来接受三个值。unsigned char recv[3];...void recive(void){ while(RI==0);recv[0]=SBUF;RI=0;while(RI==0);recv[1]=SBUF;RI=0;while(RI==0);recv[2]=SBUF;RI=0;}

相似回答