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

📄 main.c

📁 我的网口控制程序
💻 C
字号:
/*
	该程序既可以用我的界面来控制,也可以显示网页
	通过宏定义作开关 DebugHttp
	该程序的IP地址为10.10.0.70
	网关:10.10.0.1
	子网掩码:255.255.255.0
	端口:1001
	
    温子祺____________________
	佛山科学技术学院
	日期:2008/11/6

*/
#include "..\GloblDef\GloblDef.h"
#include "..\TCPIP\TCPIPmem.h"
#include "..\Netif\RTL8019.h"
#include "..\TCPIP\IP.h"
#include "..\Netif\etherif.h"
#include "..\Netif\ARP.h"
#include "..\TCPIP\Netif.h"
#include "..\TCPIP\TCP.h"
#include "..\App\main.h"

//用于网页显示还是控制LED灯模式
#ifndef DebugHttp
//#define DebugHttp
#endif

#define DATA_SIZE 	0x500

BYTE DT_XDATA DataBlock[DATA_SIZE];
BYTE DT_XDATA str[]="hello";
socket		DT_XDATA * DT_XDATA ExConn;
socket		DT_XDATA * DT_XDATA	ExAccept;
socket		DT_XDATA * DT_XDATA	ExListen;


//自己添加的网页部分-------------------------------------------------
#ifdef DebugHttp

#define HTTP_SERVER_PORT 80

socket  DT_XDATA * DT_XDATA HttpSocket = NULL;
socket  DT_XDATA * DT_XDATA ExAccept   = NULL;

void OnHttpAccept(socket DT_XDATA *) REENTRANT_MUL;

char xdata  htmlpage[] =
{
"HTTP/1.0 200 OK\nContent-Type: text/html\n\n"
"<HTML><HEAD><TITLE>欢迎来到温子祺的主页</TITLE></HEAD>"
"<table border=\"1\" width=\"100%\" height=\"81\">"
"<tr>"
"<td width=\"200%\" colspan=\"2\" height=\"24\">"
"<p align=\"center\">"
"<font color=\"#FF0000\">"
"温子祺,佛山科学技术学院(致:亲爱的林德彬老师)</font></td>"
"</tr>"
"<br>"
"^_^ 没有林老师的关怀,就没有我的成长.谢谢林老师.我爱林老师呢 ^_^</br>"
"</HTML>"
};

char xdata  htmlpage_k[] =
{
"HTTP/1.0 200 OK\nContent-Type: text/html\n\n"
"<HTML><HEAD><TITLE>欢迎来到温子祺的主页</TITLE></HEAD>"
"<table border=\"1\" width=\"100%\" height=\"81\">"
"<tr>"
"<td width=\"200%\" colspan=\"2\" height=\"24\">"
"<p align=\"center\">"
"<font color=\"#DE0000\">"
"总之十分感谢林老师,就是了....林老师还是挺好人的呢</font></td>"
"</tr>"
"<br>"
"希望林老师能够提供更加多的机会给我们实践呢 ^_^ [敬爱的林德彬老师]</br>"
"</HTML>"
};

unsigned int count=0;

#endif


void OnReceive(void DT_XDATA * buf,WORD size)  REENTRANT_MUL
{	

TCPSend(ExConn,buf,size);

}


void OnAcceptRecv(void DT_XDATA *buf,WORD size) REENTRANT_MUL
{
	unsigned int i;
	unsigned int RecTemp;


		

	TCPSend(ExAccept,buf,size);

#ifdef DebugHttp
TCPAbort(ExAccept);  
TCPClose(ExAccept);
#endif

	for(i<0;i<=100;i++)
	{	
		RecTemp=(*((BYTE DT_XDATA *)buf)++);
		switch(RecTemp)
		{
		 case 'a': P1_0=0;break;
		 case 'b': P1_1=0;break;
		 case 'c': P1_2=0;break;
		 case 'd': P1_3=0;break;
		 case 'e': P1_4=0;break;
    	 case 'f': P1_5=0;break;
		 case 'g': P1_6=0;break;
		 case 'h': P1_7=0;break;
		 case 'A': P1_0=1;break;
		 case 'B': P1_1=1;break;
		 case 'C': P1_2=1;break;
		 case 'D': P1_3=1;break;
		 case 'E': P1_4=1;break;
    	 case 'F': P1_5=1;break;
		 case 'G': P1_6=1;break;
		 case 'H': P1_7=1;break;
		 case 'Q': P1=0xff;break;
		 case 'q': P1=0x00;break;
		 default :break;
		}
	}


}

void OnAccept(socket DT_XDATA *pNewSocket) REENTRANT_MUL
{
	ExAccept = pNewSocket;
	pNewSocket->recv = OnAcceptRecv;
	pNewSocket->close = OnClose;
}


void OnClose(socket DT_XDATA * pSocket) REENTRANT_MUL
{
	TCPClose(pSocket);	
}

void Timer() REENTRANT_MUL interrupt 1
{
	TH0 = 0x3C;	/*TIMER_24M_25MS_H;*/
	TL0 = 0xAA;	/*TIMER_24M_25MS_L;*/
	
	NetIfTimer();
	ARPTimer();
	TCPTimer();
}

void SerialInit()
{
	/* set TI to 1, set TR1 to 1 */
	SCON = 0x52;/* SM0 SM1 =1 SM2 REN TB8 RB8 TI RI */
	TMOD = 0x20;/* GATE=0 C/T-=0 M1 M0=2 GATE C/T- M1 M0 */
	TH1 =  0xE6;	/* TH1=E6 4800 when at 24MHz,TH1=F3,9600,24MHz */
	PCON = 0x80;
	TCON = 0x40;/* 01101001 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT */
}

void InterruptInit()
{
	TMOD |= 0x01;
	TH0 = 0x3C;	/*TIMER_24M_25MS_H;*/
	TL0 = 0xAA;	/*TIMER_24M_25MS_L;*/
	TR0 = 1;
	
	/* open interrupt for rtl and timer */
	EA = 1;
	/* EX0 = 1; */
	ET0 = 1;
}

//自己添加的------------------------
#ifdef DebugHttp

sfr  P4       = 0xe8;
sbit CONT     = P4^3;

void OnHttpClose(socket DT_XDATA * pSocket) REENTRANT_MUL
{
 TCPClose(pSocket); /* we close too */
}

void OnHttpAccept(socket DT_XDATA *pNewSocket) REENTRANT_MUL
{
	WORD i;
	BYTE te;

    ExAccept = pNewSocket;
    pNewSocket->recv  = OnAcceptRecv;
    pNewSocket->close = OnHttpClose;


	htmlpage[416]=te/100+0x30;
	htmlpage[417]=te%100/10+0x30;
	htmlpage[419]=te%10+0x30;

	count++;
	if(count>65534) count=65534;
	htmlpage[467]=count/10000+0x30;
	htmlpage[468]=count%10000/1000+0x30;
	htmlpage[469]=count%1000/100+0x30;
	htmlpage[470]=count%100/10+0x30;
	htmlpage[471]=count%10+0x30;

    for(i = 0; htmlpage[i]; i++);
    TCPSend(ExAccept, htmlpage, i);
	//P1=0XF0;	//只要我网页有刷新时,低位亮
	//--------------------------------------------
	htmlpage_k[416]=te/100+0x30;
	htmlpage_k[417]=te%100/10+0x30;
	htmlpage_k[419]=te%10+0x30;

	count++;
	if(count>65534) count=65534;
	htmlpage_k[467]=count/10000+0x30;
	htmlpage_k[468]=count%10000/1000+0x30;
	htmlpage_k[469]=count%1000/100+0x30;
	htmlpage_k[470]=count%100/10+0x30;
	htmlpage_k[471]=count%10+0x30;

    for(i = 0; htmlpage_k[i]; i++);
    TCPSend(ExAccept, htmlpage_k, i);
	//P1=0XF0;	//只要我网页有刷新时,低位亮
}

#endif


//------------------------------------------------------------------
main()
{
	struct SMemHead DT_XDATA *MemHead;
	struct SEtherDevice DT_XDATA DevRTL;
	BYTE   DT_XDATA EtherAddr[ETHER_ADDR_LEN] = {0x52,0x54,0x4c,0x30,0x2e,0x2f};
	IP_ADDR		IPAddr	= 0x0A0A0046;//10.10.0.70	
	IP_ADDR		NetMask	= 0xffffff00;//255.255.255.0	
	IP_ADDR		GateWay	= 0x0A0A0001;//10.10.0.1
	P1=0xff;
	/*
	 * init
	 */
	/* init. the order is not important */
	NetIfInit();//初始化网络接口
	ARPInit();//初始化ARP
	TCPInit();//初始化TCP
	MemInit();//初始化内存模块
	RTLInit(EtherAddr);//初始化RTL8019AS,EtherAddr为以太网地址	
	

   EtherDevInit(&DevRTL,EtherAddr,RTLSendPacket,RTLReceivePacket);


	NetIfAdd(IPAddr,NetMask,GateWay,EtherInput,EtherOutput,&DevRTL);

	/*
	 * start use socket 
	 */
	SerialInit();
	InterruptInit();//启动25ms的定时中断
	TRACE("start");
	
	/* Illustrate how to listen as a server */
	ExListen = TCPSocket(IPAddr);
	ExAccept = NULL;
	//----自己添加的

#ifdef DebugHttp
 HttpSocket = TCPSocket(IPAddr);
 ExAccept   = NULL;
 if(TCPListen(HttpSocket,HTTP_SERVER_PORT,OnHttpAccept));
 #endif

	TCPListen(ExListen,TCP_DEFAULT_PORT,OnAccept);

	ExConn = TCPSocket(IPAddr);


	if(TCPConnect(ExConn,0xc0a8020e,1001,OnReceive,OnClose) == TRUE)
	{	
		/* Illustrate how to Use TCPSend() */
		TCPSend(ExConn,str,6);
		/* Illustrate how to Use TCPSendEx() */
		while(1)
		{
			if((MemHead = TCPAllocate(DATA_SIZE)) == NULL)
				break;
			MemCopy(MemHead->pStart,DataBlock,DATA_SIZE);
			if(TCPSendEx(ExConn,MemHead) == FALSE)
				break;
		}
	}


	TCPAbort(ExConn); 

	while(1);
//-------自己添加的
//#ifdef DebugHttp
//TCPAbort(ExAccept); 
//TCPAbort(HttpSocket); 
//#endif


}




⌨️ 快捷键说明

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