基于uip协议的WEB服务器的软件设计.docx
- 文档编号:2982635
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:16
- 大小:238.50KB
基于uip协议的WEB服务器的软件设计.docx
《基于uip协议的WEB服务器的软件设计.docx》由会员分享,可在线阅读,更多相关《基于uip协议的WEB服务器的软件设计.docx(16页珍藏版)》请在冰豆网上搜索。
基于uip协议的WEB服务器的软件设计
1引言
目前,随着无线网络技术的不断发展,物联网时代呼之欲出。
物联网既是将所有智能设备联入互联网,充分利用互联网覆盖范围极其广泛的优势,在世界各地也能轻松实现对这些智能设备的控制。
大型设备的网络控制基本采用PC技术实现,但是物联网时代联入互联网的更多的是小型的、普通的生活用品,如洗衣机,电饭煲,电灯等。
若都用pc控制那成本必然不敢想象,正是基于此,只有考虑成本更小的嵌入式技术。
基于51单片机的嵌入式控制系统就是一个很经济实惠的解决方案。
在PC领域,通过TCP/IP协议就可以轻松实现互联网通信。
但出于压缩成本的原因,嵌入式系统的硬件资源就远远比不上PC,像在基于51单片机的控制系统集成TCP/IP也成了奢望。
这样一来,如何在有限的硬件资源下实现互联网通信变成了主要的研究问题。
本毕业设计课题“基于uip协议的WEB服务器的软件设计”,目的就是要设计一个WEB服务器,通过IE浏览器可远程浏览访问单片机。
软硬结合,追求成本更小,更经济实用的嵌入式控制系统,为实现物联网时代提供更多选择。
2硬件系统
硬件电路部分,本设计选用最为常见的ATMEL公司开发的高性能8位单片机AT89C51作为嵌入式系统的微处理器,通过网络控制芯片RTL8019AS将嵌入式系统与Interact相连接。
其硬件系统总框架如图1所示。
2.1主控芯片AT89C51
AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,内含4k的可反复擦写的只读程序存储器(PEROM)和128byte的随机数据存储器(RAM)。
2.1.1主要特性
·与MCS-51兼容
·寿命:
1000写/擦循环
·数据保留时间:
10年
·全静态工作:
0Hz-24Hz
·三级程序存储器锁定
·128*8位内部RAM
·32可编程I/O线
·两个16位定时器/计数器
·5个中断源
·可编程串行通道
·低功耗的闲置和掉电模式
·片内振荡器和时钟电路
2.1.2管脚说明
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,具体功能如下所示:
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入,当振荡器复位器件时,要保持RST脚两个机器周期的高电平。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
2.2网络芯片RTL8019AS
网络接口芯片选用RTL8019AS(台湾REALTEK公司),它是一种全双工即插即用的以太网控制器,兼容RTL8019控制软件和NE20008bit或16bit的传输,支持UTP,AUI,BNC和PNP自动检测模式,支持外接闪烁存储器读写操作,支持I/O口地址的完全解码,具有LED指示功能。
全二重功能能够模拟传播和接收在双绞线到全二重以太网交换机,避免了由于以太网频道争夺特性导致的读出多路存取协议的问题。
2.2.1芯片主要特性
(1)支持以太网和IEFES023(10Base5,10Base2,10BaseT),软件支持8位/16位的NE2000;
(2)全双工,收发商时达到10Mbps的速度;
(3)内置16kB的SRAM,用于收发缓冲,降低对主处理器的速度要求,支持8/16位数据总线,8个中断申请线以及16个I/O基地址选择为大资源提供了宽松的环境;
(4)可以使用8位ISA总线,与51系列单片机的接口简单,不用转换芯片;
(5)性价比高。
2.2.2主要引脚功能
引脚1-4,97-100:
中断控制INT0-7;
引脚33:
复位控制;
引脚34:
使能控制角AEN,低电平有效;
引脚6,17,70,89:
数字电源,+5V;
引脚14,28,83,86:
数字地GND;
引脚47,57:
模拟电源:
+5V;
引脚44,52:
模拟地;
引脚5,7-13,15,16,18-27:
ISA地址总线;
引脚36-43,87,88,90-95:
ISA数据总线;
引脚31:
BootROM读操作控制;
引脚32:
BootROM写操作控制;
引脚62:
RX接收数据显示LED1脚;
引脚63:
TX发送数据显示LED2脚;
引脚58,59:
接收数据TPIN+/-;
引脚45,46:
发送数据TPOUT+/-;
引脚50,51:
外接晶体;
引脚29:
ISAI/O读使能;
引脚30:
ISAI/O写使能;
引脚77:
9346连续数据输出;
引脚78:
9346连续数据输入;
引脚79:
9346连续数据时钟。
2.2.3RTL8019AS驱动的实现
网卡的驱动程序屏蔽了底层硬件的处理细节,为上层软件提供了一个与硬件无关的接口。
RTLS019AS的驱动程序将要发送的数据包按指定的格式写人芯片输人输出缓冲区中并启动发送命令…,这时RTL8019AS自动把数据包转换成物理帧格式在物理信道上传输,反之Rn皇019As收到物理信号之后将其还原成数据,按指定的格式输人输出缓冲区中供应用程序来取用。
其驱动程序主要包括:
网卡的初始化,数据的发送和接受函数。
具体的实现由如下函数来完成相应的功能:
(1)voidinitRTL8019(void)//RTL8019AS的初始化函数
(2)unsignedcharRTL8019dev_poll(void)//网卡的接收函数
{
unsignedintpacketLength;
packetLength=RTL8019beginPacketRetreive();
if(!
packetLength)//N断是否有数据
return0;
if(packetLength>UIP_BUFSIZE)
{
RTL8019endPacketRetreive();
return0;
}
RTL8019retreivePacketData(uip_buf,packetLength);
RTL8019endPacketRetreive();
returnpacketLength;
}
(3)voidRTL8019dev_send(void)//网卡发送函数
RTL8019beginPacketSend(uip_len);
if(uip_hn≤TOTAL_HEADER_LENGTH)
{
RTL8019sendPacketData(trip_bur,uip_len);
else{
uip_kn-=TOTAL_HEADER_LENGTH;
RTL8019sendPacketData(uip_buf,TOTAL_HEADER_LENGTH);
RTL8019sendPacketData((unsignedchar*)uip_appdata,
uip_len);
}
RTL8019endPaeketSend();
}
2.3硬件电路原理图(见附录1)
3Uip协议
3.1uip协议栈体系结构
uIP协议是瑞典计算机科学研究所AdamDunkels开发的一个适用于8/16位机上的小型嵌入式TCP/IP协议栈,简单易用、资源占用少是它的设计特点,它去掉了许多全功能协议栈中不常用的功能而保留网络通信所必要的协议机制,其设计重点放在IP、ICMP和TCP协议的实现上,将这三个模块合为一个有机的整体,而将UDP和ARP协议实现作为可选模块。
uIP0.9的体系结构如图2所示。
为了节省资源简化应用接口,uIP0.9在内部实现上作了特殊的处理:
减少处理函数的个数和调用次数,提高代码复用率以减少ROM占用;基于单一全局数组的收发数据缓冲区,不支持内存动态分配,由应用负责处理收发的数据;基于事件驱动的应用程序接口,各并发连接采用轮循处理,仅当网络事件发生时,由uIP内核唤起应用程序处理。
这样,uIP用户只须关注特定应用就可以了。
传统的TCP/IP实现一般要基于多任务处理环境,而大多数8位机系统不具备这个条件;应用程序主动参与部分协议栈功能的实现(如TCP的重发机制数据包分段和流量控制),由uIP内核设置重发事件,应用程序重新生成数据提交发送,免去了大量内部缓存的占用。
基于事件驱动的应用接口使得这些实现较为简单。
3.2uip的设备程序接口
uIP内核中有两个函数直接需要底层设备驱动程序的支持。
一个是uip_input()。
当设备驱动程序从网络层收到一个数据包时要调用这个函数,设备驱动程序必须事先将数据包存放到uip_buf[]中,包长放到uip_len然后交由uip_input()处理。
当函数返回时,如果uip_len不为0,则表明有
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 uip 协议 WEB 服务器 软件设计