单片机w5500的应用

本文介绍了如何使用单片机W5500进行以太网通信,通过解析接收到的命令并根据命令执行相应操作,如返回特定字符串或控制状态。在函数Process_Socket_Data中,针对不同命令进行了详细处理,并展示了如何避免以太网通信中的死锁问题。
摘要由CSDN通过智能技术生成

        前一段时间玩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)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值