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

📄 server452.c

📁 This code is used to TCP/IP connection It is developed by PIC18F452 and all this code is successfull
💻 C
字号:
#include "tcptask.h"
#include "emNETRTOS.H"
#include "p18f452.h"
#include  "Tcp.h"
#pragma udata MAILDATABANK=0x300
unsigned char TXbuffer[64];//就这么简单吗??
unsigned char RCbuffer[64];
#pragma udata
#define  STACK_USE_ICMP
#define  STACK_USE_ARP
#define emDintl INTCONbits.GIEL=0		/* disable low priority int*/	//屏蔽所有L中断	
#define emEintl INTCONbits.GIEL=1										//使能所有L中断	
#define emDinth INTCONbits.GIEH=0		/* when low inttrupt disable high priority int*///屏蔽所有H中断
#define emEinth INTCONbits.GIEH=1
#define emEtmr0 INTCONbits.TMR0IF=0 /*enable TMR0 intrrupt again*/
extern unsigned char RunID,vpc,stemp,tbsr,twag;
extern char tempRunID;
extern emInt8 Htimer1,Htimer0;
extern struct tcb pTcb[MAX_TASK];
extern unsigned long mSeconds;
extern WORD _NextPort;
extern DWORD ISS;
extern SOCKET_INFO TCB[MAX_SOCKETS];
BOOL judge;
char TMRINT=0;
static NODE_INFO remote2;
static NODE_INFO remote3;
NODE_INFO remote1;
static IP_ADDR LocalIP;
IP_ADDR MailIP;
static WORD data1Count;
BYTE data1[MAX_ICMP_DATA_LEN];
static WORD ICMPid;
static WORD ICMPseq;
BYTE opCode;
TCP_SOCKET socket1;
TCP_SOCKET socket2;
char i=0;
char n=0;
unsigned char c[4]={192,168,23,98};
//unsigned char d[4]={192,168,23,98};
union
  {
        BYTE MACFrameType;
        BYTE IPFrameType;
        ICMP_CODE ICMPCode;
  } type;
void emHint( );
#pragma code HighVector=0x08
void atHighVector ( )
{
	_asm goto emHint  _endasm
}
#pragma code
void basemode()
{ 
   if(MACGetHeader(&remote2.MACAddr, &type.MACFrameType)) 
       {      
          switch(type.MACFrameType)
             {case MAC_ARP:
                   if(ARPGet(&remote2, &opCode))
                       {
                            if((opCode==ARP_REPLY)&&(remote3.IPAddr.Val==remote2.IPAddr.Val))
                                  {    
                                       //putrsUSART("arpreceive\n");
                                       MACDiscardRx();
                                  }
                            else
                                  {    
                                      //putrsUSART("arpdiscard\n");
                                      MACDiscardRx();
                                   }
                         
                            if ( opCode == ARP_REQUEST )
                                  {       
                                        while(!ARPIsTxReady());
                                        ARPPut(&remote2,ARP_REPLY );
                                  }
                       }
                   else
                       {     
                            //putrsUSART("arpwrong\n");   
                       }
                   MACDiscardRx();
                   break;
                  
              case MAC_IP:
                    if ( IPGetHeader(&LocalIP,&remote2,&type.IPFrameType,&data1Count) )
                        {
                            if ( type.IPFrameType == IP_PROT_ICMP )
                               {
                                   if ( ICMPGet(&type.ICMPCode,data1,(BYTE*)&data1Count,&ICMPid,&ICMPseq) )
                                        {
                                             if ( type.ICMPCode == ICMP_ECHO_REQUEST )
                                                  {     
                                                       //putrsUSART("ping\n"); 
                                                       ICMPPut(&remote2,ICMP_ECHO_REPLY,data1,data1Count,ICMPid,ICMPseq);
                                                  }
                                                                           
                                        }
                               }
                            else if(type.IPFrameType == IP_PROT_TCP)
                               {
                                     judge=TCPProcess(&remote2, data1Count); 
                                  /*   if(judge==1)
                                      {
                                         if(n==0)
                                           emDelHardTimer(1);
                                         if(n==1)
                                           emDelHardTimer(2);     
                                      }*/
                               }

                        }
                   MACDiscardRx();
                   break;
             } //end switch
    }//end if
   else
    {
           judge=0;
  
    }
// TCPtickout();

}
void TCPserver(TCP_SOCKET socket)
{
  BYTE httpLength=0;
  BYTE m,l=0;
  BYTE RxData[40];
  SOCKET_INFO* ps;
  ps=&TCB[socket];
  m=ps->RxCount;
  if(TCPIsGetReady(socket))
  {
     while( TCPGet(socket, &RxData[httpLength++]) );
     for(l=0;l<m;l++)
      { 
        while(!TXSTAbits.TRMT);
        putcUSART(*(RxData+l));
      }
     Nop();
  }
}
void delaysecond(BYTE s)
{
  BYTE c,d=0;
  c=200*s;
  for(d=0;d<c;d++)
  {
    DelayMs(5);
  }
}
void TASK15()
{ char j=0;
  TCPListen(800);
  while(1)
    {
      basemode();
      TCPserver(0);
    }
}//end task0


void emHint( )
{
	stemp=STATUS;
	tbsr=BSR;
	twag=WREG;
  if(PIR1bits.TMR1IF==1)//允许定时器1中断处理,以启动硬件定时器
	{
		PIR1bits.TMR1IF=0;
		TMR1H=Htimer1;
		TMR1L=0;
		mSeconds++;
		emEinth;
	}
	if((INTCONbits.TMR0IF==1))
	{ 
		emSpch(RunID);
		emSpcl(RunID);
		tempRunID=RunID;
		emSerTask();
		TMR0H=Htimer0;
		TMR0L=0;
		emEtmr0;
		emEinth;
		emEintl;
		if(tempRunID!=RunID)
		{
			STKPTR=3;
			emWpth1(RunID);
			emWptl1(RunID);		
			FSR1L=0x30;
		}

	}
	BSR=tbsr;
	WREG=twag;
	STATUS=stemp;		
}


void main()
{   
    
    IniPortA();
    InitializeBoard();
    MACInit();
    TCPInit();  
    SocketInit();
    emSysini();
    //woEEinf();
	emCreatTask(TASK15,15,15);//底层循环
    //emSetHardTimer(0,4000);//用硬件定时器0,定时时间20秒   
    //emSetHardTimer(7,6000);
    //emSetHardTimer(1,200);//用作socket0的超时处理
    //emSetHardTimer(2,200);//用作socket1的超时处理
    //emSetHardTimer(6,200);//用作默认socket建立连接
	//emStartHardTimer(0); 
    //emStartHardTimer(7);
    //emCreatSysMal();
    //emCreatSem(4); 
	emStar();
    //putrsUSART("START\n");
    emSched1();
}

⌨️ 快捷键说明

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