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*/