如题,单片机接收串口发送的浮点数,然后进行处理,我想的是建立一个二维数组,想把浮点数一位一位的存到数组里,因为要接收多个浮点数所以用了二维数组,可是实际发现是不可行的,请问到底应该怎么接收啊。以下是我写的串口数据接收代码,还请各位大神指点一下,我实在是不知道该怎么办了。
void init()//串口初始化
{
SCON=0x50; //串口:方式1,允许发送和接收
TMOD=0x20; //定时器1:模式2,8位自动重装模式,用于产生波特率
TH1=0xfd;
TL1=0xfd;
TR1=1;
SM0=0; //串口工作方式1
SM1=1; //串口工作方式1
REN=1; //允许串行口接收数据
EA=1; //开总中断
ES=1; //打开串口中断
}
int strTransform(char *p) //字符处理函数
{
float f = atof(p); //将字符转换成浮点数
int n = (int)(f * 100 + 0.5); //四舍五入
// char *q = new char[strlen(p)];
// strcpy(q, p);
// q [6] = '\0';
// printf("%s\n", q);
return n;
}
void main()
{
init();
while(1)
{
if(flag==1)
{
ES=0; //关闭串口中断
GSM_Sent_Text_Message();
ES=1;
flag=0;//如果发送完数据之后flag不置0,则会一直处于发送状态,模块将不停地发短信
Delay_ms(300);
//printf("sent message");
}
}
}
void ser() interrupt 4 //串口中断服务程序
{
RI=0;//接收中断标志位,停止接收
for(row=0;row<8;row++)
{
for(column=0;column<9;column++)
{
strRcv[row][column]=SBUF; //将接收缓存里面的数据存放到数组
}
switch(row)
{
case 0:
sprintf(string0,"%9s",strRcv[row]);//将接收的每个数据提取出来,以便后面对数据进行处理
//char *a1=(char*)malloc(5);
// n=strTransform(string0);
sprintf(a0,"%04d",strTransform(string0));
break;
case 1:
sprintf(string1,"%9s",strRcv[row]);
sprintf(a1,"%04d",strTransform(string1));
break;
case 2:
sprintf(string2,"%9s",strRcv[row]);
sprintf(a2,"%04d",strTransform(string2));
break;
case 3:
sprintf(string3,"%9s",strRcv[row]);
sprintf(a3,"%04d",strTransform(string3));
break;
case 4:
sprintf(string4,"%9s",strRcv[row]);
sprintf(a4,"%04d",strTransform(string4));
break;
case 5:
sprintf(string5,"%9s",strRcv[row]);
sprintf(a5,"%04d",strTransform(string5));
break;
case 6:
sprintf(string6,"%9s",strRcv[row]);
sprintf(a6,"%04d",strTransform(string6));
break;
case 7:
sprintf(string7,"%9s",strRcv[row]);
sprintf(a7,"%04d",strTransform(string7));
break;
}
}
strdata=strcat(strdata,a0);
strdata=strcat(strdata,a1);
strdata=strcat(strdata,a2);
strdata=strcat(strdata,a3);
strdata=strcat(strdata,a4);
strdata=strcat(strdata,a6);
strdata=strcat(strdata,a7);
flag=1;//产生中断标志
//RI=1;
}