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

📄 main.c

📁 W3100A网络调试程序,可进行数据传输
💻 C
字号:
/*
********************************************************************************
* Wiznet.
* 5F Simmtech Bldg., 228-3, Nonhyun-dong, Kangnam-gu,
* Seoul, Korea
*
* (c) Copyright 2002, Wiznet, Seoul, Korea
*
* Filename : main.c
* Programmer(s): 
* Created : 2002/01/
* Modified :
* Description : 8051EVB侩 TCP server mode甫 捞侩茄 loopback program.
********************************************************************************
*/

#include "../atmel/at89x51.h"	// 8051 SFR 沥狼 拳老
#include <stdio.h>		// printf 荤侩阑 困窃
#include <string.h>
#include "serial.h"		// serial 包访 窃荐甸
#include "socket.h"		// W3100A driver 拳老


#define	MAX_BUF_SIZE	2048			// 荐脚 滚欺狼 弥措 荤捞令

unsigned char xdata * sock_buf = 0x7000;		// 荐脚 滚欺狼 困摹
xdata unsigned char sock_state[MAX_SOCK_NUM];	// socket 惑怕 包府 函荐

void Init8051();						// 8051 MCU 檬扁拳
void init_sock(unsigned char i);				// 瘤沥等 channel阑 檬扁拳 窃

/*
********************************************************************************
*              loopback 荐青阑 困茄 main 窃荐.
*
* Description: 8051 檬扁拳 棺 W3100A俊 措茄 檬扁拳 荐青 饶 peer肺何磐狼 楷搬 汲沥阑 
*			   扁促府哥 楷搬矫 荐脚 等 单捞磐甫 促矫 价脚窍绰 loopback 扁瓷 荐青.
*			   楷搬 秦瘤 矫 促矫 盲澄阑 檬扁拳 窍咯 楷搬 汲沥阑 扁促覆.
* Arguments  : None.
* Returns    : None.
* Note       : 
********************************************************************************
*/
void main()
{
	unsigned char i;
	int xdata len;
	unsigned char xdata ip[6];
	int xdata scanf_ret;
	unsigned char xdata ret;
	unsigned char xdata uid[128], upw[128], pmac[6];
	unsigned int xdata psid, idlen, pwlen;

	T0 = 0;
	T1 = 0;

	Init8051();

	printf("3150 LoopBack Program.(TCP Server mode)\r\n");

	iinchip_init();

	EA = 1;								// 傈眉 interrupt enable

	ip[0] = 0x00; ip[1] = 0x01; ip[2] = 0x02; ip[3] = 0x03; ip[4] = 0x04; ip[5] = 0x05;
	setMACAddr(ip);						// MAC 汲沥
	ip[0] = 59; ip[1] = 150; ip[2] = 250; ip[3] = 1;
	setgateway(ip);						// gateway address 汲沥
	ip[0] = 255; ip[1] = 255; ip[2] = 255; ip[3] = 0;
	setsubmask(ip);						// subnet mask 汲沥
	ip[0] = 59; ip[1] = 150; ip[2] = 250; ip[3] = 69;
	setIP(ip);							// source IP 汲沥

	sysinit(0x55,0x55);	// network information 汲沥

//#ifdef _DEF_IINCHIP_PPP
	printf("<<Select the number>>\r\n  1) Normal mode\r\n  2) PPPoE mode\r\n>> ");
	scanf_ret = scanf("%c", &ret);
	printf("\r\n");
	if (ret != '1') 
	{
AUTH_FAIL:
		printf("<<Setup PPPoE connection>>\r\n");
		printf("Enter user id : ");
		scanf_ret = scanf("%s", uid);
		printf("Enter user password : ");
		scanf_ret = scanf("%s", upw);
		idlen = strlen(uid);
		pwlen = strlen(upw);

		i = 0;
		while ((ret = pppinit(uid, idlen, upw, pwlen)) != 1)
		{
			//printf("%d %d",idlen,pwlen);
			switch (ret)
			{
				case 2 : goto AUTH_FAIL; break;
				default : break;
			}				
			getDestMAC(0, pmac);
			psid = getDestPort(0);
			pppterm(pmac, psid);
			i++;
			if (i == 2) break;
		}
		if (i != 2)
		{
			ret = IINCHIP_READ(INT_REG); // remove already setted value of INT_REG
			printf("<<PPP Connection established>>\r\n");
			getDestMAC(0, pmac);
			psid = getDestPort(0);
			/*getLocalAddr(ip);
			setIP(ip); // source IP 汲沥
			printf("Received IP : %bu.%bu.%bu.%bu\r\n",ip[0],ip[1],ip[2],ip[3]);*/
		}
		else
		{
			IINCHIP_WRITE(TMODE,0x00);
		}
	}
//#endif
	getLocalAddr(ip);
	printf("-----------------------------\r\n");
	printf("Current IP : %bu.%bu.%bu.%bu\r\n",ip[0],ip[1],ip[2],ip[3]);
	printf("-----------------------------\r\n");

	for (i = 0; i < MAX_SOCK_NUM; i++) {					// socket 檬扁拳 棺 楷搬 措扁 惑怕肺 父店
		init_sock(i);
	}

	while (1) {
		for (i = 0; i < MAX_SOCK_NUM; i++) 
		{
			if (sock_state[i] == SOCK_ESTABLISHED) {
				switch (select(i, SEL_CONTROL))
				{
				case SOCK_ESTABLISHED:						/* if connection is established */
					if ((len = select(i, SEL_RECV)) > 0) 			/* check Rx data */
					{
						if (len > MAX_BUF_SIZE) len = MAX_BUF_SIZE;	/* if Rx data size is lager than TX_RX_MAX_BUF_SIZE */
												/* the data size to read is MAX_BUF_SIZE. */
						len = recv(i, sock_buf, len);			/* read the received data */
						send(i, sock_buf, len);				/* send the received data */
					}
					break;
				case SOCK_CLOSE_WAIT:                           		/* If the client request to close */
					printf("%bd : CLOSE_WAIT\r\n", i);
					disconnect(i);
					break;
				case SOCK_CLOSED: /* if a socket is closed */
					printf("%bd : CLOSED\r\n", i);
					init_sock(i);
					break;
				}
			} else {
				switch (select(i, SEL_CONTROL))
				{
				case SOCK_ESTABLISHED:						/* if connection is established */
					sock_state[i] = SOCK_ESTABLISHED;		// 楷搬 汲沥.
					printf("%bd : connected\r\n", i);
					break;
				case SOCK_CLOSE_WAIT:                           		/* If the client request to close */
					printf("%bd : CLOSE_WAIT\r\n", i);
					disconnect(i);
					break;
				case SOCK_CLOSED: /* if a socket is closed */
					close(i);
					printf("%bd : CLOSED\r\n", i);
					init_sock(i);
					break;
				}
			}
		}	// for
	} // while 

}

/*
********************************************************************************
*              8051 檬扁拳 贸府 窃荐.
*
* Description: 
* Arguments  : None.
* Returns    : None.
* Note       : 
********************************************************************************
*/
void Init8051(void)
{ 
	EA = 0; 		// 傈眉 interrupt disable
	IT0 = 0;		// interrupt level trigger
	EX0 = 1;		// INT 0 enable
	EX1 = 0; 		// INT 1 disable
	InitSerial();	// Serial 器飘 檬扁拳 (力傍登绰 serial.c 颇老 曼炼)
}

/*
********************************************************************************
*              楷搬 秦瘤 等 盲澄俊 措茄 犁 檬扁拳 窃荐.
*
* Description: 楷搬捞 秦瘤 等 盲澄俊 措秦 close 棺 檬扁拳 荐青
* Arguments  : None.
* Returns    : None.
* Note       : 
********************************************************************************
*/
void init_sock(unsigned char i) {
	unsigned char b;
	printf("socket : ");
	while ( (b = socket(i, SOCK_STREAM, 5000, 0)) == 0) ;
	printf("%bd ok..\r\n", i);

	printf("listen : ");
	NBlisten(i);
	printf("%bd ok..\r\n", i);
	sock_state[i] = SOCK_LISTEN;
}

⌨️ 快捷键说明

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