开发工具:
文件大小: 264kb
下载次数: 0
上传时间: 2012-07-28
详细说明: //--------------------------------------------------------------------------- // Net MAIN.C // // 8051 Web Server project // See Makefile for build notes // Written for Keil C51 V5.1 compiler, notes: // It uses big endian order, which is the same as the // network byte order, unlike x86 systems. // Use OPTIMIZE(2)or higher so that automatic variables get shared // between functions, to stay within the 256 bytes idata space //--------------------------------------------------------------------------- #include # include #include "89E564RD.H" #include "net.h" #include "eth.h" #include "serial.h" #include "timer.h" #include "arp.h" #include "tcp.h" #include "http.h" #include "ip.h" // Global variables unsigned int volatile event_word; unsigned char idata debug; unsigned char idata rcve_buf_allocated; char xdata text[20]; // This sets my hardware address to 00:01:02:03:04:05 unsigned char code my_hwaddr[6] = {0x52, 0x54, 0x4c, 0xbb, 0x50, 0xd8}; // Hardware addr to send a broadcast unsigned char code broadcast_hwaddr[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; // This sets my IP address to 192.168.0.168 unsigned long code my_ipaddr = 0xC0A800A8L; // This sets my subnet mask to 255.255.255.0 unsigned long code my_subnet = 0xFFFFFF00L; // Set to 0 if no gateway is present on network // unsigned long code gateway_ipaddr = 0; // This sets my gateway address to 192.168.0.1 unsigned long code gateway_ipaddr = 0xC0A80001L; //-------------------------------------------------------------------------- // Initialize the memory management routines // Initialize variables declared in main //-------------------------------------------------------------------------- unsigned int Count1msInc; unsigned char Count1ms,Count10ms,Count1s; unsigned char TimeSecond,TimeMinute; /***************************************************************************************** ** 函数名称: init_main(void) ** 功能描述: 主函数初始化 ** 调用参数: 无 ** 返回参数: 无 ** 调用模块: init_mempool((void xdata *)1000, 1500);memset(text, 0, sizeof(text)); *****************************************************************************************/ void init_main(void) { // Start the memory pool for incoming and outgoing Ethernet // frames at 1000, with length = 1500 bytes. Memory below 500 // is used for program variables init_mempool((void xdata *)30720, 1500); memset(text, 0, sizeof(text)); event_word = 0; rcve_buf_allocated = FALSE; debug = FALSE; } /***************************************************************************************** ** 函数名称: void Timer_Init (void) ** 功能描述: 定时器初始化 ** 调用参数: 无 ** 返回参数: 无 ** Intr rate = 22.1184 MHz /(12 * (65536 - reload value)) ** For 25 ms reload value = 19456 = 0x4C00 *****************************************************************************************/ void Timer_Init (void) { TMOD = 0x11; //设置16位定时器 TF0 = 0; TR0 = 0; //停止定时器0 TH0 = 0xf8; //设置定时器0溢出时间为1ms TL0 = 0xcc; TR0 = 1; //启动定时器0 ET0 = 1; TR1 = 0; //停止定时器1 TF1 = 0; TH1 = 0x4C; //设置定时器0溢出时间为25ms TL1 = 0x00; ET1 = 1; //允许定时器1中断 TR1 = 1; //启动定时器1 } /***************************************************************************************** ** 函数名称: void Timer0_ISR (void) interrupt 1 ** 功能描述: 定时器0中断子程序 ** 调用参数: 无 ** 返回参数: 无 *****************************************************************************************/ void Timer0_ISR (void) interrupt 1 { TH0 = 0xf8; TL0 = 0xcc; if(Count1ms) Count1ms--; Count1msInc++; if(Count10ms) Count10ms--; else { Count10ms = 10; //定时10ms时间到 if(Count1s) Count1s--; else { Count1s = 100; //定时1s时间到 TimeSecond++; if(TimeSecond>=60) { TimeSecond = 0; //定时1min时间到 TimeMinute++; if(TimeMinute==60) TimeMinute = 0; } } } } /***************************************************************************************** ** 函数名称: void Delay1ms(unsigned char T) ** 功能描述: 延时子程序 ** 调用参数: 无 ** 返回参数: 无 *****************************************************************************************/ void Delay1ms(unsigned char T) { Count1ms = T; while (Count1ms); } /***************************************************************************************** ** 函数名称: void main (void) ** 功能描述: 主函数 ** 调用参数: 无 ** 返回参数: 无 *****************************************************************************************/ void main (void) { unsigned int j, event_word_copy; unsigned char xdata * inbuf; Timer_Init(); //初始化定时器 init_main(); //主函数初始化 init_tcp(); //初始化TCP init_http(); //初始化HTTP EA = 1; //开总中断 // init_serial(); //初始化串口 // SendCommString("Init OK\r\n"); init_arp(); //初始化ARP init_8019(); //初始化RTL8019 j = 0; while (1) { query_8019(); //检查RTL8019当前接收状态 EA = 0; event_word_copy = event_word; //把event_word值取出,以免与中断发生冲突 EA = 1; if (event_word_copy & EVENT_ETH_ARRIVED) //检查是否接收到以太网数据 { EA = 0; event_word &= (~EVENT_ETH_ARRIVED); //清标志位 EA = 1; inbuf = rcve_frame(); //接收以太网数据 if (inbuf != NULL) { eth_rcve(inbuf); //如果数据不为空,处理接收到的以太网数据 if (rcve_buf_allocated) //如果分配数据空间成功(数据空间没有释放) { free(inbuf); //释放数据空间 rcve_buf_allocated = FALSE; //清分配空间成功标志位 } } } if (event_word_copy & EVENT_TCP_RETRANSMIT) //检查是否重发TCP数据报 { EA = 0; event_word &= (~EVENT_TCP_RETRANSMIT); //清标志位 EA = 1; tcp_retransmit(); //重发TCP数据报 } if (event_word_copy & EVENT_TCP_INACTIVITY) //检查是否为TCP休止 { EA = 0; event_word &= (~EVENT_TCP_INACTIVITY); //清标志位 EA = 1; tcp_inactivity(); // } if (event_word_copy & EVENT_ARP_RETRANSMIT) //检查是否重发ARP数据报 { EA = 0; event_word &= (~EVENT_ARP_RETRANSMIT); //清标志位 EA = 1; arp_retransmit(); //重发ARP数据报 } if (event_word_copy & EVENT_AGE_ARP_CACHE) //检查是否ARP缓存数据生存时间到 { EA = 0; event_word &= (~EVENT_AGE_ARP_CACHE); //清标志位 EA = 1; age_arp_cache(); //ARP缓存数据生存时间处理 } } } ...展开收缩
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.