如題,單片機接收串口發送的浮點數,然后進行處理,我想的是建立一個二維數組,想把浮點數一位一位的存到數組里,因為要接收多個浮點數所以用了二維數組,可是實際發現是不可行的,請問到底應該怎么接收啊。以下是我寫的串口數據接收代碼,還請各位大神指點一下,我實在是不知道該怎么辦了。
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;
}
|