⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myapp.c

📁 串口服务器KEIL C51原代码,单片机采用STC89C58RD+,网络控制器采用RTL8019,经过三层交换机测试,可以直接应用在产品,串口波特率576
💻 C
字号:

#include "..\uip.h"  //LEON.Z.
#include "myapp.h"
#include <serial.h>
#include <LCD\LCD.h>
#include "c51iic.h"
#include <R8051.H>

//sbit LED4=P3^3;
sbit DebugPin=P1^3;

#define NULL (void *)0

#ifdef DEBUG
#include <stdio.h>
#define PRINT(x) printf("%s", x)
#define PRINTLN(x) printf("%s\n", x)
#else /* DEBUG */
#define PRINT(x)
#define PRINTLN(x)
#endif /* DEBUG */

struct myapp_state *hs;

//#define APPport 1180
u16_t idata APPport= 1180;
/*-----------------------------------------------------------------------------------*/
void
myapp_init(void)
{
  
  /* Listen to port 1180. */
  uip_listen(APPport);
}
/*-----------------------------------------------------------------------------------*/
void
myapp(void)
{ 
  u8_t i,temp[8];
    u16_t count;
//  switch(uip_conn->lport) {
  if(uip_conn->lport==APPport) 
  {
//  case htons(APPport):
    /* Pick out the application state from the uip_conn structure. */
    hs = (struct myapp_state *)(uip_conn->appstate);

    if(uip_connected()) 
   {
      /* first connect, the app do some initialize here */
      uip_connected=1;
        temp[0]=0x55;
        temp[1]=0xaa;
		 temp[2]=0x08;
		 temp[3]=0x01;
         temp[4]=0x01;
		 temp[5]=0x61;
		 temp[6]=0x11;
	 	Uart0_printR(temp, 7); //数据发送

	  Rec_len=0;
      //data_Rec=0;
	  //Rec_len=0;
	  //dataRec_timecount=0;

      hs->count = 0;
      /* Don't send any data in return; we wait for the remote request
	 instead. */
	 // Uart0_print("CONNECT\n");//ADDFJB
//	  Uart0_RevEn();
      uip_send(uip_appdata, 0);
      return;

    } 
	else if(uip_poll()) 
	{
      /* If we are polled ten times, we abort the connection. This is
         because we don't want connections lingering indefinately in
         the system. */
      if(dataRec_timecount>=1)//3)// if(REC_OK)
	  {//LCD_print("SSEND");
	     REC_OK=0;
        Uart0_RevDis();
         //LED4=~LED4;
       //  Uart0_print("CONNEC1212T\n");
         uip_len=Rec_len;
		 while(Rec_len)
		 {
		    Rec_len--;
		    uip_appdata[Rec_len]= Rec_data[Rec_len];
         }
        data_Rec=0;
		Rec_len=0;
        Uart0_RevEn();
		dataRec_timecount=0;
        hs->count = 0;
	  }
	  else if(hs->count++ >= 220)
      { 
	    //Uart0_print("disconte\n");
	 // LCD_print("DISCON");
	   uip_connected=0;
	    uip_abort();
		 temp[0]=0x55;
        temp[1]=0xaa;
		 temp[2]=0x08;
		 temp[3]=0x01;
         temp[4]=0x02;
		 temp[5]=0x61;
		 temp[6]=0x11;
	 	Uart0_printR(temp, 7); //数据发送

      }
      return;
    } 
	else if(uip_newdata()) 
	    {
                                       /* we have recieved the request or data, apply the remote now*/	 
                                 //--------leon, add the protocal here----, we receive the pc data or 
                                       //--retquest,  in uip_appdata, length=uip_len;
                                    //and we process it, place our data in uip_appdata. and set uip_len;
    
  
		if(!DebugPin) //setting parameters!
		{
            if(uip_len==3&&uip_appdata[0]=='G'&&uip_appdata[1]=='E'&&uip_appdata[2]=='T')//GET
			{
                 SubAddr=0;
	             Number=26;//20;
	           while( !IRcvStr(&uip_appdata[0]))  //读IP参数
	             { 
		           for(i=0;i<200;i++);
		           for(i=0;i<200;i++);
		           for(i=0;i<200;i++);
		           for(i=0;i<200;i++);
	             }
			   /* uip_appdata[0]=UIP_IPADDR0; 
				uip_appdata[1]=UIP_IPADDR1;              
				uip_appdata[2]=UIP_IPADDR2; 
				uip_appdata[3]=UIP_IPADDR3; 
				uip_appdata[4]=UIP_NETMASK0; 
				uip_appdata[5]=UIP_NETMASK1;              
				uip_appdata[6]=UIP_NETMASK2; 
				uip_appdata[7]=UIP_NETMASK3; 
				uip_appdata[8]= UIP_DRIPADDR0; 
				uip_appdata[9]= UIP_DRIPADDR1;  
				uip_appdata[10]=UIP_DRIPADDR2; 
				uip_appdata[11]=UIP_DRIPADDR3;              
				uip_appdata[12]=UIP_ETHADDR0; 
				uip_appdata[13]=UIP_ETHADDR1; 
				uip_appdata[14]=UIP_ETHADDR2; 
				uip_appdata[15]=UIP_ETHADDR3;              
				uip_appdata[16]=UIP_ETHADDR4; 
				uip_appdata[17]=UIP_ETHADDR5; 
				uip_appdata[18]=(APPport>>8)&0xff; 
				uip_appdata[19]=APPport&0xff; */
              #if UIP_ACTIVE_OPEN
		         /*	uip_appdata[20]=(REMOTE_IP[0]>>8)&0xff; 
				uip_appdata[21]= REMOTE_IP[0]&0xff;              
				uip_appdata[22]=(REMOTE_IP[1]>>8)&0xff;; 
				uip_appdata[23]= REMOTE_IP[1]&0xff; 
				uip_appdata[24]=(REMOTE_PORT>>8)&0xff; 
				uip_appdata[25]= REMOTE_PORT&0xff; */
    			uip_send(uip_appdata, 26);
               #else
    			uip_send(uip_appdata, 20);
               #endif
			}
			else
			if(uip_len>=24&&uip_len<=30&&uip_appdata[0]=='S'&&uip_appdata[1]=='E'&&uip_appdata[2]=='T')//SET
			{
               //uip_appdata[4]~uip_appdata[23]
			    TI=1;//????WHY
			   	SubAddr=0;
				Number=16;
				if( !ISendStr(&uip_appdata[4]) )
			       {uip_appdata[0]=1;uip_send(uip_appdata,1);return;}
                for(count=0;count<4000;count++);
			   	SubAddr=16;
				Number=uip_len-20;//4;
				if( !ISendStr(&uip_appdata[20]) )
			       {uip_appdata[0]=2;uip_send(uip_appdata,1);return;}
				uip_appdata[0]='S'; 
				uip_appdata[1]='E';              
				uip_appdata[2]='T'; 
				uip_appdata[3]='O'; 
				uip_appdata[4]='K'; 
				uip_send(uip_appdata,5);
			}
		}//if(!DebugPin)
		else //Normal running.
		{
   	   		Uart0_printR(&uip_appdata[0], uip_len); //数据发送
       		uip_send(uip_appdata, 0);
       		hs->count = 0;
		}
    }
    else if(uip_acked()) 
	  {
	  	//	Uart0_RevDis();
	  	//    uip_close();
	  }
	 else
	 {
	   uip_connected=0;
       uip_abort();
	   	 temp[0]=0x55;
        temp[1]=0xaa;
		 temp[2]=0x08;
		 temp[3]=0x01;
         temp[4]=0x02;
		 temp[5]=0x61;
		 temp[6]=0x11;
	 	Uart0_printR(temp, 7); //数据发送
	 }
    /* Finally, return to uIP. Our outgoing packet will soon be on its
       way... */
    return;
 }//end of if(uip_conn->lport==APPport)
 else // default:
 {
    /* Should never happen. */
	uip_connected=0;
    uip_abort();
		 temp[0]=0x55;
        temp[1]=0xaa;
		 temp[2]=0x08;
		 temp[3]=0x01;
         temp[4]=0x02;
		 temp[5]=0x61;
		 temp[6]=0x11;
	 	Uart0_printR(temp, 7); //数据发送
    return;//break;
  }  
}
/*-----------------------------------------------------------------------------------*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -