📄 main.c
字号:
#include "uip\uip.h"
#include "uip\uip_arp.h"
#include "rtl8019\rtl8019dev.h"
#include "serial.h"
#include <LCD\LCD.h>
#include <R8051.H>
#include "c51iic.h"
//#include "isd51.h"
sbit DebugPin=P1^3;
//------------parameters-----------------
// UIP_IPADDR: The IP address of this uIP node. 默认IP地址
UBYTE data UIP_IPADDR0 = 192;
UBYTE data UIP_IPADDR1 = 168;
UBYTE data UIP_IPADDR2 = 0;
UBYTE data UIP_IPADDR3 = 100;
// UIP_NETMASK: The netmask. 默认子网掩码
UBYTE data UIP_NETMASK0 = 255;
UBYTE data UIP_NETMASK1 = 0;
UBYTE data UIP_NETMASK2 = 0;
UBYTE data UIP_NETMASK3 = 0;
// UIP_DRIPADDR: IP address of the default router. 默认网关地址
UBYTE data UIP_DRIPADDR0 = 192;
UBYTE data UIP_DRIPADDR1 = 168;
UBYTE data UIP_DRIPADDR2 = 0;
UBYTE data UIP_DRIPADDR3 = 199;
// UIP_ETHADDR: The Ethernet address. 默认Mac码
UBYTE data UIP_ETHADDR0 = 0x00; //'O'
UBYTE data UIP_ETHADDR1 = 0xe0; //'F'
UBYTE data UIP_ETHADDR2 = 0x4c; //'F'
UBYTE data UIP_ETHADDR3 = 0x03; //'I'
UBYTE data UIP_ETHADDR4 = 0x1d; //'C'
UBYTE data UIP_ETHADDR5 = 0x8e; //'E'
#if UIP_ACTIVE_OPEN
UWORD data REMOTE_IP[2]={0xc0a8,0x0008}; //默认远程主机IP地址
UWORD data REMOTE_PORT=1180; //默认端口号
#endif
//UWORD data APPport= 1180;
UBYTE data BaudRate= 0;
//port;
//-------------------------------------
//sbit SDA=P1^1;
sbit Wdog=P1^1;
sbit LED_RED = P3 ^ 3;
sbit LED_GRE = P3 ^ 4;
unsigned char count1=0;
bit active_connect=0;
#define BUF ((struct uip_eth_hdr *)&uip_buf[0])
#define WatchDog() Wdog=~Wdog
//-------------------------------------
void InitTimer0(void)
{
// TMOD=TMOD&0xF0;
TMOD=TMOD|0x01; //模式1(16位定时器),仅受TR0控制
//TH0=0x7d; //Tick=100/s, 10ms evrey time
//TL0=0xcb; //OS_CPU_A.ASM 和 OS_TICKS_PER_SEC
//TH0=0x3c; //Tick, 15ms(40M) evrey time
//TL0=0xb0; //OS_CPU_A.ASM 和 OS_TICKS_PER_SEC
TH0=0x2a; //Tick, 20ms(32.768) evrey time
TL0=0xab;
ET0=1; //允许T0中断
TR0=1;
}
//-------------------------------------
void TcpIp_Init()
{
uip_init();
myapp_init();
uip_arp_init();
RTL8019dev_init();
}
//-------------------------------------
void main(void)
{
UBYTE i;
AUXR = 0x00 ;
SCONF=0X03;
ES=0;
Wdog=0;
// LCD_Initial();
// LCD_print("MCU-WEB");
// ISDinit (); // initialize uVision2 Debugger and continue program run
// ISDwait (); // wait for connection to uVision2 Debugger
//--------------------------------------------
// WatchDog();
if(!DebugPin)goto xxxx; //如果S3 OPEN,读取1161J-42中的设置信息
SubAddr=32;
Number=5;//20;
while( !IRcvStr(&Rec_data[0]) ) //读IP参数
{
for(i=0;i<200;i++);
for(i=0;i<200;i++);
for(i=0;i<200;i++);
for(i=0;i<200;i++);
}
if((Rec_data[0]==0x55)&&(Rec_data[1]==0xaa))
{
SubAddr=0;
Number=26;//20;
while( !IRcvStr(&Rec_data[0]) ) //读IP参数
{
for(i=0;i<200;i++);
for(i=0;i<200;i++);
for(i=0;i<200;i++);
for(i=0;i<200;i++);
}
// InitSerial_0();
UIP_IPADDR0 = Rec_data[0];
UIP_IPADDR1 = Rec_data[1];
UIP_IPADDR2 = Rec_data[2];
UIP_IPADDR3 = Rec_data[3];
UIP_NETMASK0 = Rec_data[4];
UIP_NETMASK1 = Rec_data[5];
UIP_NETMASK2 = Rec_data[6];
UIP_NETMASK3 = Rec_data[7];
UIP_DRIPADDR0 = Rec_data[8]; //网关地址
UIP_DRIPADDR1 = Rec_data[9];
UIP_DRIPADDR2 = Rec_data[10];
UIP_DRIPADDR3 = Rec_data[11];
UIP_ETHADDR0 = Rec_data[12]; //'O' //MAC
UIP_ETHADDR1 = Rec_data[13]; //'F'
UIP_ETHADDR2 = Rec_data[14]; //'F'
UIP_ETHADDR3 = Rec_data[15]; //'I'
UIP_ETHADDR4 = Rec_data[16]; //'C'
UIP_ETHADDR5 = Rec_data[17]; //'E'
*( (UBYTE *)(&APPport) )= Rec_data[18]; //本地端口
*( (UBYTE *)(&APPport)+1 )= Rec_data[19];
#if UIP_ACTIVE_OPEN
*( (UBYTE *)(REMOTE_IP) )= Rec_data[20]; //远端IP
*( (UBYTE *)(REMOTE_IP)+1 )= Rec_data[21];
*( (UBYTE *)(REMOTE_IP)+2 )= Rec_data[22];
*( (UBYTE *)(REMOTE_IP)+3 )= Rec_data[23];
*( (UBYTE *)(&REMOTE_PORT) )= Rec_data[24]; //远端PORT
*( (UBYTE *)(&REMOTE_PORT)+1 )= Rec_data[25];
#endif
}
else //如果S3 SHORT,读取默认的设置信息
{
xxxx:
Rec_data[0]= UIP_IPADDR0;
Rec_data[1]= UIP_IPADDR1 ;
Rec_data[2]= UIP_IPADDR2 ;
Rec_data[3]= UIP_IPADDR3 ;
Rec_data[4]= UIP_NETMASK0 ;
Rec_data[5]= UIP_NETMASK1;
Rec_data[6]= UIP_NETMASK2 ;
Rec_data[7]= UIP_NETMASK3 ;
Rec_data[8]= UIP_DRIPADDR0 ; //网关地址
Rec_data[9]= UIP_DRIPADDR1 ;
Rec_data[10]= UIP_DRIPADDR2;
Rec_data[11]= UIP_DRIPADDR3 ;
Rec_data[12]= UIP_ETHADDR0 ; //'O' //MAC
Rec_data[13]= UIP_ETHADDR1 ; //'F'
Rec_data[14]= UIP_ETHADDR2 ; //'F'
Rec_data[15]= UIP_ETHADDR3 ; //'I'
Rec_data[16]= UIP_ETHADDR4 ; //'C'
Rec_data[17]= UIP_ETHADDR5; //'E'
Rec_data[18]= *( (UBYTE *)(&APPport) ); //本地端口
Rec_data[19]= *( (UBYTE *)(&APPport)+1 );
#if UIP_ACTIVE_OPEN
Rec_data[20]=*( (UBYTE *)(REMOTE_IP) ); //远端IP
Rec_data[21]= *( (UBYTE *)(REMOTE_IP)+1 );
Rec_data[22]= *( (UBYTE *)(REMOTE_IP)+2 );
Rec_data[23]=*( (UBYTE *)(REMOTE_IP)+3 );
Rec_data[24]=*( (UBYTE *)(&REMOTE_PORT) ); //远端PORT
Rec_data[25]=*( (UBYTE *)(&REMOTE_PORT)+1 );
#endif
SubAddr=0;
Number=16;
while( !ISendStr(&Rec_data[0]) ) //写IP参数
{
for(i=0;i<200;i++);
for(i=0;i<200;i++);
for(i=0;i<200;i++);
for(i=0;i<200;i++);
}
SubAddr=16;
Number=10;
while( !ISendStr(&Rec_data[16]) ) //写IP参数
{
for(i=0;i<200;i++);
for(i=0;i<200;i++);
for(i=0;i<200;i++);
for(i=0;i<200;i++);
}
Rec_data[0]=0x55;
Rec_data[1]=0xaa;
SubAddr=32;
Number=5;
while( !ISendStr(&Rec_data[0]) ) //写IP参数
{
for(i=0;i<200;i++);
for(i=0;i<200;i++);
for(i=0;i<200;i++);
for(i=0;i<200;i++);
}
}
//-----------------------------------------------*/
WatchDog();
//--------------------------------------------
InitSerial_0();
//Uart0_printR(&Rec_data[0],26);
//Uart0_print("start\n");
TcpIp_Init();
//LCD_print("main start\n");
//Uart0_print("main start\n");
InitTimer0();
EA=1;
WatchDog();
InitSerial_0();
Rec_len=0;
uip_connected=0;
Rec_len=0;
dataRec_timecount=0;
data_Rec=0;
active_connect=0;
while(1)
{
// uip_ipaddr(REMOTE_IP, 192,168,1,8);
// uip_connect(REMOTE_IP, 4096);
// uip_connect(REMOTE_IP, REMOTE_PORT); //建立TCP连接
WatchDog();
uip_len = RTL8019dev_poll();
if(uip_len)
{
if(BUF->type == htons(UIP_ETHTYPE_IP))
{
uip_arp_ipin();
uip_process(UIP_DATA);
if(uip_len > 0) // transmit a packet, if one is ready
{
uip_arp_out();
RTL8019dev_send();
}
}
else if(BUF->type == htons(UIP_ETHTYPE_ARP))// process an ARP packet
{
uip_arp_arpin();
if(uip_len > 0) // transmit a packet, if one is ready
RTL8019dev_send();
}
}
//----------------time out------------------------------------
WatchDog();
if(count1>=50) //50*20ms=1s;//cccc20
{
count1=0;
// Uart0_print("TimT\n");
for(i = 0; i < UIP_CONNS; ++i)
{
uip_periodic(i);
if(uip_len > 0)
{
uip_arp_out();
RTL8019dev_send();
}
}
}
//----------------end of time out----------------------------
//----------------uart2tcp-----------------------------------
WatchDog();
//dataRec_timecount=21;
if(dataRec_timecount>=5) //20*20ms=400ms//cccc2
{
if(uip_connected) //判断连接状态
{
count1=0;
for(i = 0; i < UIP_CONNS; ++i)
{
uip_periodic(i); //组织数据
if(uip_len > 0)
{
WatchDog();
uip_arp_out();
RTL8019dev_send(); //发送
}
}
Rec_len=0;
dataRec_timecount=0;
data_Rec=0;
active_connect=0;
}
else if(dataRec_timecount>100) //100*20ms=2s
{
//Uart0_print("disc\n");
Rec_len=0;
dataRec_timecount=0;
data_Rec=0;
active_connect=0;
}
else
{
#if UIP_ACTIVE_OPEN
if(!active_connect)
{
//Uart0_print("connect\n");
active_connect=1;
uip_connect(REMOTE_IP, REMOTE_PORT); //建立TCP连接
uip_periodic(0); //only one connect!
if(uip_len > 0)
{
//Uart0_print("sendsyn\n");
uip_arp_out();
RTL8019dev_send();
}
}
#else
Rec_len=0;
dataRec_timecount=0;
data_Rec=0;
active_connect=0;
#endif
}
}
}//while(1);
}
//-----------------------------------------------------------
void Timer0(void) interrupt 1
{
TR0=0;
TH0=0x2a; //Tick, 20ms(32.768) evrey time
TL0=0xab;
TR0=1;
count1++;
if(data_Rec) dataRec_timecount++;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -