www.pudn.com > TcpIpOn8051.rar > COMM.C


/*------------------------------------------------------------------------------ 
comm.C 
 
 
------------------------------------------------------------------------------*/ 
typedef unsigned char BYTE; 
typedef unsigned int WORD; 
typedef unsigned long DWORD; 
#include  
#include  
 
char xdata as[]="are you there?"; 
char xdata ack[]="yes!\n\r"; 
char xdata as1[]="who are you?"; 
char xdata ack1[]="I am embedded!\n\r"; 
char xdata as2[]="what are you mean?"; 
char xdata ack2[]="I mean you are foolish.\n\r"; 
char xdata as3[]="ok?"; 
char xdata ack3[]="OK!idiot!!!\n\r"; 
char xdata as4[]="what's that?"; 
char xdata ack4[]="That's a computer,spoony!\n\r"; 
char xdata ackf[]="parden,I can not understand!\n\r"; 
char xdata ping174[]="ping 202.118.19.174"; 
char xdata pinging[]="pinging 202.118.19.174\n\r"; 
extern void delay_ms(BYTE sec); 
 
void receive(void); 
void send(void); 
 
//void comm(void) interrupt 4; 
 
typedef struct 
{ 
	BYTE revflag; 
	BYTE revcount; 
	char revbuf[100]; 
}COMMB; 
COMMB xdata commbuffer; 
COMMB xdata commsen; 
void comm_send(BYTE len); 
 
extern void ping(DWORD destip); 
extern void command_deal(char * str); 
extern DWORD strtoip(char *arg); 
/*--------------------------- 
print 
 ----------------------------*/ 
 
void print(char str[]) 
{ 
	strcpy(&commsen.revbuf,str); 
	comm_send((BYTE)strlen(str)); 
} 
 
void comm_send(BYTE len) 
{ 
	register i; 
	BYTE rev; 
	for(i=0;i<100;i++) 
		rev=rev; 
	P3=P3|0x10; 
	SBUF=commsen.revbuf[0]; 
	commsen.revcount=len; 
	commsen.revflag=0; 
} 
 
void comm_deal(void) 
{ 
//	DWORD destip; 
//	char *comm = "ping 192.168.1.1"; 
	char *comm; 
	command_deal(comm); 
	if(commbuffer.revflag==1) 
	{ 
		commbuffer.revcount=0; 
		comm=&commbuffer.revbuf[0]; 
//		strtoip(comm); 
		command_deal(comm); 
/* 
		if(!strcmp(comm,&as)) 
		{ 
			print(ack); 
		} 
		else if(!strcmp(comm,&as1)) 
		{ 
			print(ack1); 
		} 
		else if(!strcmp(comm,&as2)) 
		{ 
			print(ack2); 
		} 
		else if(!strcmp(comm,&as3)) 
		{ 
			print(ack3); 
		} 
		else if(!strcmp(comm,&as4)) 
		{ 
			print(ack4); 
		} 
		else if(!strcmp(comm,&ping174)) 
		{ 
			//print(pinging); 
			destip=0xca7613ae; 
			ping(destip); 
		} 
		else  
		{ 
			print(ackf); 
		} 
*/ 
		commbuffer.revflag=0; 
	} 
} 
void outRev(COMMB commbuf) 
{ 
	unsigned char i; 
	for(i=0; i < commbuf.revcount;i++) 
		{	 
			SBUF = commbuf.revbuf[i]; 
			while(!TI) 
			{} 
			TI=0; 
		} 
//	SBUF = '\n'; 
//	while(!TI) 
//	{} 
//	TI=0; 
} 
 
 
void receive(void) 
{ 
	BYTE rev,i; 
	RI=0; 
	rev=0x00; 
	rev=SBUF; 
	commbuffer.revbuf[commbuffer.revcount++]=rev; 
//	for(i=0;i<100;i++) 
//		rev=rev; 
//	P3=P3|0x10; 
	if(rev==0x0d) 
	{ 
//		SBUF='\n'; 
		commbuffer.revbuf[--commbuffer.revcount]='\0'; 
		commbuffer.revflag=1; 
		outRev(commbuffer); 
//		commbuffer.revcount=0; 
//		while(!TI) 
//		{} 
//		TI=0; 
	} 
//	if(rev==0x0a) 
//	{ 
//		SBUF ='\r'; 
//	   	while(!TI) 
//		{} 
//		TI=0; 
//		commbuffer.revcount=0; 
//	 } 
 
//	SBUF=rev; 
 
//	while(!TI) 
//	{} 
//	TI=0; 
//	P3=P3&0xef; 
} 
 
void send(void) 
{ 
	TI=0; 
	commsen.revflag++; 
	if(commsen.revflag==commsen.revcount) 
		P3=P3&0xef; 
	else SBUF=commsen.revbuf[commsen.revflag]; 
} 
 
void comm(void) interrupt 4 
{ 
	if(RI==1) receive(); 
	else if(TI==1) send(); 
} 
 
/*EOF*/