//-----------------------------------------------------------------------------
// Net ETH.C
//
// This module is the Ethernet layer
//-----------------------------------------------------------------------------
//#include <reg52.h>
#include "w78e365.h"
#include <absacc.h>
//#include <string.h>
//#include <stdlib.h>
//#include "net.h"
//#include "51web.h"
//#include "webdoc1.h"
//#include "tcp.h"
//#include "serial.h"
//#include "ip.h"
//#include "icmp.h"
//#include "http.h"
#include "eth.h"
//#include "cknum.h"
//#include "arp.h"
//#include "udp.h"
//---------------------------------------------------------
//RTL8019AS的I/O BASE=0x200H~0x21FH
//8051MCU的AD-BUS BASEAddr=0x00H~0x1FH
#define RTL8019AS_BASE_ADDRESS 0x0200
#define reg00 XBYTE[RTL8019AS_BASE_ADDRESS+0x00] //reg00- 10为isa网卡接口的寄存器地址
#define reg01 XBYTE[RTL8019AS_BASE_ADDRESS+0x01]
#define reg02 XBYTE[RTL8019AS_BASE_ADDRESS+0x02]
#define reg03 XBYTE[RTL8019AS_BASE_ADDRESS+0x03]
#define reg04 XBYTE[RTL8019AS_BASE_ADDRESS+0x04]
#define reg05 XBYTE[RTL8019AS_BASE_ADDRESS+0x05]
#define reg06 XBYTE[RTL8019AS_BASE_ADDRESS+0x06]
#define reg07 XBYTE[RTL8019AS_BASE_ADDRESS+0x07]
#define reg08 XBYTE[RTL8019AS_BASE_ADDRESS+0x08]
#define reg09 XBYTE[RTL8019AS_BASE_ADDRESS+0x09]
#define reg0a XBYTE[RTL8019AS_BASE_ADDRESS+0x0A]
#define reg0b XBYTE[RTL8019AS_BASE_ADDRESS+0x0B]
#define reg0c XBYTE[RTL8019AS_BASE_ADDRESS+0x0C]
#define reg0d XBYTE[RTL8019AS_BASE_ADDRESS+0x0D]
#define reg0e XBYTE[RTL8019AS_BASE_ADDRESS+0x0E]
#define reg0f XBYTE[RTL8019AS_BASE_ADDRESS+0x0F]
#define reg10 XBYTE[RTL8019AS_BASE_ADDRESS+0x10] //DMA地址
#define reg18 XBYTE[RTL8019AS_BASE_ADDRESS+0x18] //复位端口
#define reg1f XBYTE[RTL8019AS_BASE_ADDRESS+0x1F] //复位地址
// Event word bits
#define EVENT_ETH_ARRIVED 0x0001
#define EVENT_AGE_ARP_CACHE 0x0002
#define EVENT_TCP_RETRANSMIT 0x0004
#define EVENT_TCP_INACTIVITY 0x0008
#define EVENT_ARP_RETRANSMIT 0x0010
#define EVENT_READ_ANALOG 0x0020
#define EVENT_RS232_ARRIVED 0x0040
//unsigned char xdata temp1[2000];
unsigned char counter123;
unsigned char xdata c;
unsigned int xdata cint;
unsigned long xdata clong;
//unsigned char xdata tempbuf[1000]; //yjj:1000太大,LCD1602显示不正常
unsigned int count1 = 0;
unsigned int count2 = 0;
unsigned char xdata cpu_voltage;
unsigned char xdata air_temperature;
unsigned char xdata cpu_temperature;
#define SYSCLK 11059200L
// Global variables
unsigned int volatile event_word;
char xdata text[20];
unsigned char xdata debug;
unsigned char xdata rcve_buf_allocated;
// This sets my hardware address to 00:01:02:03:04:05
//unsigned char code my_hwaddr[6] ={0x00, 0x00, 0x00, 0x00, 0x12, 0x34};// {0x00, 0x01, 0x02, 0x03, 0x04, 0x05};
unsigned char my_hwaddr[6] ={0x00, 0x00, 0x00, 0x00, 0x12, 0x34};// {0x00, 0x01, 0x02, 0x03, 0x04, 0x05};
// Hardware addr to send a broadcast
unsigned char code broadcast_hwaddr[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
// This sets my IP address to 172.18.71.10
unsigned long code my_ipaddr = 0xAC12470AL;//0xC0A8000AL;
// This sets my subnet mask to 255.255.255.0
unsigned long code my_subnet = 0xFFFF0000L;
// Set to 0 if no gateway is present on network
unsigned long code gateway_ipaddr = 0xAC124701L;//0xC0A80001L;
#define my_port 1025
extern void s8(unsigned char senddata); //9600,8,1
//--------------------------------------------------------------------------
// Initialize the memory management routines
// Initialize variables declared in main
//--------------------------------------------------------------------------
unsigned int xdata Count1msInc;
unsigned char xdata Count1ms,Count10ms,Count1s;
unsigned char xdata TimeSecond,TimeMinute;
unsigned long xdata initial_sequence_nr;
unsigned char xdata HTTP_header_len;
unsigned char xdata HTTP_nr;
unsigned char xdata HTTP_resend;
//CONNECTION xdata conxn[5];
unsigned long xdata clong;
// Global variables
unsigned int volatile event_word;
// This sets my hardware address to 00:01:02:03:04:05
//unsigned char code my_hwaddr[6] ={0x00, 0x00, 0x00, 0x00, 0x12, 0x34};// {0x00, 0x01, 0x02, 0x03, 0x04, 0x05};
bit txd_buffer_select=0; //选择网卡的发送缓冲区
//void page(unsigned char pagenumber);
//void RTL8019AS_Reset(); //复位网卡
//void ReadRtl8019NodeID(void);//读出网卡的物理地址存到my_ethernet_address.bytes[6]里;
//void WriteRtl8019NodeID();
//void YJJ_RTL8019AS_Init(void);
///void send_frame(unsigned char * outbuf, unsigned int len);/*发送一个数据包的命令,长度最小为60字节,最大1514字节*/
//void query_8019(void);
//unsigned char * rcve_frame(void);//如果收到一个有效的数据包,返回收到的数据,否则返回NULL;
//void eth_send(unsigned char * outbuf, unsigned char * hwaddr, unsigned int ptype, unsigned int len);
//void eth_rcve(unsigned char * inbuf);
sbit RTL8019_RST=P2^2;
unsigned char bnry,curr,next_page;
unsigned char temp;
unsigned int len;
/******************************************************************/
/****************************延时子程序****************************/
/******************************************************************/
/**********************************************************************
**函数原型: void delay_ms(uint ms_number)
**入口参数:?ms_number: 延时的毫秒数
**出口参数: 无
**返 回 值: 无
**说 明: 延时预定的时间,延时时间与特定的处理器有关
************************************************************************/
void delay_ms(unsigned char ms_number)
{
//延时子程序,延时时间单位为1毫秒,晶振使用22。1184兆赫,芯片使用mcs51兼容芯片
//ms_number为需要延时的毫秒数,最大为255毫秒 误差小于1 %
unsigned int i;
unsigned char j;
for(j=0;j<ms_number;j++)
{
for(i=0;i<90;i++)//for(i = 0;i < 229;i++);
{
;//....
}
}
//replace_tag(0,0,0);
}
/******************************************************************/
/******************选择8019寄存器页面子程序************************/
/******************************************************************/
/**********************************************************************
**函数原型: void page(uchar pagenumber)
**入口参数: ?uchar pagenumber: 要切换的页
**出口参数: 无
**返 回 值: 无
**说 明: 选择页,可选择0,1,2三页,第四页ne000兼容芯片保留
************************************************************************/
void page(unsigned char pagenumber)
{
unsigned char data temp;
temp=reg00; //command register
temp=temp&0x3B ; //注意txp位不能要
pagenumber=pagenumber <<6;
temp=temp | pagenumber;
reg00=temp;
}
/******************************************************************/
/****************************复位网卡子程序************************/
/******************************************************************/
//功能:
//入口参数:
//出口参数:
void RTL8019AS_Reset(void)
{
unsigned char temp;
//----硬复位:----
/*
RTL8019_RST=0; //RSTDRV为高电平有效,推荐等待更久的时间之后如100ms之后才对它操作,以确保完全复位。
delay_ms(2000);
RTL8019_RST=1;
delay_ms(2000);
RTL8019_RST=0;
*/
//----软复位:----
delay_ms(2000);
temp=reg18; //软复位:读网卡的复位端口
reg18=temp; //软复位:写网卡的复位端口
delay_ms(2000);
temp=reg1f; //软复位:读网卡的复位端口
reg1f=temp; //软复位:写网卡的复位端口
delay_ms(2000);
}
/******************************************************************/
/******************读出网卡的物理地址子程序************************/
/******************************************************************/
//功能:
//入口参数:
//出口参数:
void ReadRtl8019NodeID(void)//存到my_ethernet_address.bytes[6]里
{
unsigned char