#include "includes.h"
code char hex[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
void uart(void) interrupt 4// 串口中断
{
if(RI) //接收
{
}
else //发送
{
}
}
//查询方式发送单个字符
void send(unsigned d1)
{
ES=0;
//TE=1;
TI=0;SBUF=d1;while(!TI);
//TE=0;
TI=0; ES=1;
}
void printu1(unsigned char * s)
{
while(*s != 0)
{
send(*s++);
}
}
//Send String Tor Uart
void printu(char * str)
{
char *ct = str;
while (*ct != '\0')
{
if (*ct == '\n')
{
SBUF = 13;
while (!TI);
TI = 0;
}
SBUF=*ct;
while (!TI);
TI = 0;
ct++;
}
}
//
void printuf(char *str, unsigned char cb)
{
char *ct = str;
char cx1;
char cx2;
while (*ct != '\0')
{
if (*ct == '%')
{
if (*(ct + 1) == 'x')
{
ct += 2;
cx1 = cb / 16;
cx2 = cb % 16;
SBUF = hex[cx1];
while (!TI);
TI = 0;
SBUF = hex[cx2];
while (!TI);
TI = 0;
continue;
}
if (*(ct + 1) == 'c')
{
ct += 2;
SBUF = cb;
while (!TI);
TI = 0;
continue;
}
}
if (*ct == '\n')
{
SBUF = 13;
while (!TI);
TI = 0;
}
SBUF = *ct;
while (!TI);
TI = 0;
ct++;
}
}
//中断实始化
void IntInit(void)
{
IT0=1; //INT0下降沿中断
EX0=0; //允许INT0中断
IT1=1; //INT1下降沿中断
EX1=0; //允许INT1中断
//WDT_CONTR = 0x3c; // 开看门狗
initUart();
ES =1;
ET1=0;
TMOD &=0xf0;
TMOD |=0x01;
TH0=0x4c,TH0=0xf7;
ET0=1;TR0=1;
EA =1;
}
//UART初始化
void initUart(void)
{
TMOD &=0x0f; TMOD |=0x20; SCON=0x50; IP = 0x10;
//PCON|=0x80;
TH1=0xfd; TL1=0xfd; //9600,normal
//TH1=0xfa; TL1=0xfa; //9600,倍速
TR1=1; ET1=0; RI=0;
//TE=0; //允许接收 仅485时用。
}
void main(void)
{
// BYTE mac[6];
BYTE led =0;//
ip_identfier.word =1;// 时间窗初值
// 设置IP地址
#ifdef LCD
lcd_init ();
#endif
// menu_init ();
delay_ms(2);
initUart();
send('O');
send('N');
printu("starting...\r\n");
enc28j60_init( avr_mac );
#ifdef LCD
lcd_string("ENC28J60 TEST! --Nie 2008.2.12");
#endif
//lcd_string("IP:172.31.220.1 PORT:3000 ENCCART");
flag1.bits.syn_is_sent=0;
while(1)
{
// server process response for arp, icmp, http
INTN =1;
while(INTN==0) server_process();
//client_process();
//delay_us(1);
P0 = 0xff;
P2 &= 0xf0;
P2 |= zwm[led];
P0 = zxm[digit[led]];
if(led<4) led++;
else led=0;
delay_ms(1);
P0 = 0xff;
}
}
// ===================UDP 处理 ================================
//
//********************************************************************************************
// The User mydatgram Protocol offers only a minimal transport service
// -- non-guaranteed datagram delivery
// -- and gives applications direct access to the datagram service of the IP layer.
// UDP is used by applications that do not require the level of service of TCP or
// that wish to use communications services (e.g., multicast or broadcast delivery)
// not available from TCP.
//
// +------------+-----------+-------------+----------+
// + MAC header + IP header + UDP header + Data ::: +
// +------------+-----------+-------------+----------+
//
// UDP header
//
// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
// +00+01+02+03+04+05+06+07+08+09+10+11+12+13+14+15+16+17+18+19+20+21+22+23+24+25+26+27+28+29+30+31+
// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
// + Source port + Destination port +
// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
// + Length + Checksum +
// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
// + Data ::: +
// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
//
//********************************************************************************************
//
// Function : udp_generate_header
// Argument : BYTE *rxtx_buffer is a pointer point to UDP tx buffer
// WORD_BYTES dest_port is a destiantion port
// WORD_BYTES length is a UDP header and data length
// Return value : None
//
// Description : generate udp header
//
//********************************************************************************************
void udp_generate_header ( BYTE *rxtx_buffer, WORD dest_port, WORD length )
{
WORD_BYTES data ck;
// setup source port, default value is 3000
rxtx_buffer[UDP_SRC_PORT_H_P] = UDP_AVR_PORT_H_V;
rxtx_buffer[UDP_SRC_PORT_L_P] = UDP_AVR_PORT_L_V;
// setup destination port
rxtx_buffer[UDP_DST_PORT_H_P] = (dest_port & 0xff00)>>8;
rxtx_buffer[UDP_DST_PORT_L_P] = dest_port & 0x00ff;
// setup udp length
rxtx_buffer[UDP_LENGTH_H_P] = (length & 0xff00) >>8 ;
rxtx_buffer[UDP_LENGTH_L_P] = length & 0x00ff;
// setup udp checksum
rxtx_buffer[UDP_CHECKSUM_H_P] = 0;
rxtx_buffer[UDP_CHECKSUM_L_P] = 0;
// length+8 for source/destination IP address length (8-bytes)
ck.word = software_checksum ( (BYTE*)&rxtx_buffer[IP_SRC_IP_P], length+8, length+IP_PROTO_UDP_V);
rxtx_buffer[UDP_CHECKSUM_H_P] = ck.byte.high;
rxtx_buffer[UDP_CHECKSUM_L_P] = ck.byte.low;
}
//********************************************************************************************
//
// Function : udp_puts_data
// Description : puts data from RAM to UDP tx buffer
//
//********************************************************************************************
WORD udp_puts_data ( BYTE *rxtx_buffer, BYTE *mydat, WORD offset )
{
while( *mydat )
{
rxtx_buffer[ UDP_DATA_P + offset ] = *mydat++;
offset++;
}
return offset;
}
//********************************************************************************************
//
// Function : udp_puts_data_p
// Description : puts data from program memory to tx buffer
//
//********************************************************************************************
WORD udp_puts_data_p ( BYTE *rxtx_buffer, BYTE * mydat, WORD offset )
{
BYTE data ch;
while( (ch = *(mydat++)) )
{
rxtx_buffer[ UDP_DATA_P + offset ] = ch;
offset++;
}
return offset;
}
//********************************************************************************************
//
// Function : udp_receive
// Argument : BYTE *rxtx_buffer is a pointer, point to UDP tx buffer
// BYTE *dest_mac is a pointer, point to destiantion MAC address
// BYTE *dest_ip is a pointer, point to destiantion IP address
// Return value : if received packet is UDP and destination port matching with AVR port, return true
// other return false
//
// Description : check received packet and process UDP command.
//
//********************************************************************************************
BYTE udp_receive ( BYTE *rxtx_buffer, BYTE *dest_mac, BYTE *dest_ip )
{
WORD_BYTES data dlength;
WORD data n;
// BYTE generic_buf[MAX_RXTX_BUFFER];
// check UDP packet and check destination port
if ( rxtx_buffer[IP_PROTO_P] != IP_PROTO_UDP_V || rxtx_buffer[UDP_DST_PORT_H_P] != UDP_AVR_PORT_H_V || rxtx_buffer[ UDP_DST_PORT_L_P ] != UDP_AVR_PORT_L_V )
return 0;
// check UDP command, UDP command are first and second byte
if ( rxtx_buffer[UDP_DATA_P] == 'G' && rxtx_buffer[UDP_DATA_P+1] == 'A' && rxtx_buffer[UDP_DATA_P+2] == '\r' && rxtx_buffer[UDP_DATA_P+3] == '\n')
{
// command response
dlength.word = udp_puts_data_p ( rxtx_buffer,"GAOK", 0 );
}
else if ( rxtx_buffer[UDP_DATA_P] == '
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
ENC28J60_AT89S52.rar (52个子文件)
ENC28J60_AT89S52
ENC28J60_C51.opt.bak 2KB
ethernet.h 895B
lcd.h 182B
ENC28J60_C51.uvgui.Administrator 80KB
struct.h 5KB
ENC28J60_C51.uvproj 13KB
lcd1602_4.c 3KB
ENC28J60_C51_uvopt.bak 7KB
ENC28J60_C51.uvopt 8KB
ip.h 1KB
netmain.c 46KB
ENC28J60_C51_Opt.Bak 2KB
includes.h 1KB
ENC28J60_C51.Uv2.bak 2KB
icmp.h 2KB
ENC28J60_C51.uvgui_Administrator.bak 76KB
debug
ENC28J60_C51 78KB
myethernet.LST 5KB
udp.__i 33B
lcd1602_4.obj 7KB
myudp.OBJ 38KB
ENC28J60_C51(WithLCD).M51 53KB
ENC28J60_C51.Opt 1KB
ENC28J60_C51(NoLCD).M51 50KB
netmain.lst 75KB
ethernet.LST 8KB
ENC28J60_C51(WithLCD).lnp 101B
netmain.obj 86KB
ENC28J60_C51.lnp 92B
ENC28J60_C51(NoLCD).plg 241B
lcd1602_4.lst 6KB
ENC28J60_C51_Uv2.Bak 2KB
ip.OBJ 30KB
ENC28J60_C51(NoLCD).hex 14KB
ENC28J60_C51(WithLCD) 79KB
enc28j60.__i 38B
udp.LST 24KB
ENC28J60_C51_Opt.Bak 1KB
ENC28J60_C51.M51 52KB
ethernet.__i 38B
myudp.LST 23KB
tcp.LST 27KB
myenc28j60.OBJ 46KB
tcp.OBJ 46KB
myenc28j60.LST 24KB
enc28j60.LST 30KB
ip.LST 7KB
ENC28J60_C51(NoLCD) 74KB
myethernet.OBJ 29KB
udp.h 849B
enc28j60.h 9KB
arp.h 3KB
共 52 条
- 1
资源评论
御道御小黑
- 粉丝: 58
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功