前一段时间玩W5500,可能没有别人学的比较深,也只是拿着例子程序按照老师的要求达到实验的目的,就是电脑通过网口传送给单片机一个命令,单片机做出解析,通过解析来返回一个带有信息的字符串,或者完成一个操作。最后做出来效果还不错,希望分享出来,能够对大家。
在完成这个目的的时候,主要的修改的函数就是Process_Socket_Data(0);//中断处理架构
我们可以通过在这段函数中对收到的数据进行解析,然后根据解析,根据解析来返回。
我的函数最后变成这样了:
void Process_Socket_Data(SOCKET s)
{
unsigned short size;
int i,k=7;
int ii=0;
float a=0.000;
unsigned long m;
char jun[4];
size=Read_SOCK_Data_Buffer(s, Rx_Buffer);//收到字符串的长度
memcpy(Tx_Buffer, Rx_Buffer, size); //把接收缓冲区复制到发送缓冲区
if(memcmp(&Tx_Buffer[0],"GET_",4)==0) //解析,如果前面四个是“GET_”的话执行下面的操作。
{
if(memcmp(&Tx_Buffer[4],"TEST",4)==0)//从第4位开始解析
{
memcpy(Tx_Buffer, "\r\nANS_TSET=OK",12);//返回一段字符串
Write_SOCK_Data_Buffer(0, Tx_Buffer,12);//发送出去
}
if(memcmp(&Tx_Buffer[4],"CONTRAOLSTATE",13)==0)
{
memcpy(Tx_Buffer, "\r\nANS_STATE=AUTO\nANS_STATE=MANU\r\n", 43);
Write_SOCK_Data_Buffer(0, Tx_Buffer, 43);
}
if(memcmp(&Tx_Buffer[4],"DEMODAVG",8)==0) //得到均值
{
m=voltage[2]*1000;
jun[0]=m/1000+0x30;
jun[1]='.';
jun[2]=m%1000/100+0x30;
jun[3]=m%100/10+0x30;
for(ii=0; ii<40; ii++) //数据清0
Tx_Buffer[ii]=0;
memcpy(Tx_Buffer, "\r\nANS_DEMODAVG=",15);
Tx_Buffer[15]=jun[0];
Tx_Buffer[16]=jun[1];
Tx_Buffer[17]=jun[2];
Tx_Buffer[18]=jun[3];
Write_SOCK_Data_Buffer(0, Tx_Buffer, 19);
}
if(memcmp(&Tx_Buffer[4],"DEMODMAX",8)==0) //得到峰值
{
m=voltage[0]*1000;
jun[0]=m/1000+0x30;
jun[1]='.';
jun[2]=m%1000/100+0x30;
jun[3]=m%100/10+0x30;
for(ii=0; ii<40; ii++) //数据清0
Tx_Buffer[ii]=0;
memcpy(Tx_Buffer, "\r\nANS_DEMODMAX=\r\n", 15);
Tx_Buffer[15]=jun[0];
Tx_Buffer[16]=jun[1];
Tx_Buffer[17]=jun[2];
Tx_Buffer[18]=jun[3];
Write_SOCK_Data_Buffer(0, Tx_Buffer,19);
}
if(memcmp(&Tx_Buffer[4],"DEMODMIN",8)==0)