51单片机驱动W5100以太网接口芯片

上传人:夏** 文档编号:508094620 上传时间:2023-08-03 格式:DOC 页数:10 大小:72.50KB
返回 下载 相关 举报
51单片机驱动W5100以太网接口芯片_第1页
第1页 / 共10页
51单片机驱动W5100以太网接口芯片_第2页
第2页 / 共10页
51单片机驱动W5100以太网接口芯片_第3页
第3页 / 共10页
51单片机驱动W5100以太网接口芯片_第4页
第4页 / 共10页
51单片机驱动W5100以太网接口芯片_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《51单片机驱动W5100以太网接口芯片》由会员分享,可在线阅读,更多相关《51单片机驱动W5100以太网接口芯片(10页珍藏版)》请在金锄头文库上搜索。

1、51单片机驱动W5100以太网接口芯片TxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTx*fileW5100.c*本文件包括5个部分:*1.W5100初始化*2.W5100的Socket初始化*3.Socket连接*如果Socket设置为TCP服务器模式,则调用Socket_Listen()函数,W5100处于侦听状态,直到远程客户端与

2、它连接。*如果Socket设置为TCP客户端模式,则调用Socket_Connect()函数,*每调用一次Socket_Connect(s)函数,产生一次连接,* 如果连接不成功,则产生超时中断,然后可以再调用该函数进行连接。*如果Socket设置为UDP模式,则调用Socket_UDP函数* 4.Socket数据接收和发送* 5.W5100中断处理* 置W5100为服务器模式的调用过程:W5100_Init()-Socket_Init(s)-Socket_Listen(s),设置过程即完成,等待客户端的连接。* 置W5100为客户端模式的调用过程:W5100_Init()-Socket_In

3、it(s)-Socket_Connect(s),设置过程即完成,并与远程服务器连接。* 置W5100为UDP模式的调用过程:W5100_Init()-Socket_Init(s)-Socket_UDP(s),设置过程即完成,可以与远程主机UDP通信。*W5100产生的连接成功、终止连接、接收数据、发送数据、超时等事件,都可以从中断状态中获得。TxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTxTx

4、TxTxTxTxTxTxTxTxTxTxTxTxTxTx*/#includeW5100.h/*定义W5100的寄存器地址、状态*/#includeREG51.htypedefunsignedcharSOCKET;sbitSPI_CS=P1A0;sbitSPI_SCK=P1A1;sbitSPI_SO=P1A2;sbitSPI_SI=P1A3;sbitSPI_EN=P1A4;sbitKEY=P1A5;/*端口数据缓冲区*/unsignedcharRx_Buffer20;/*端口接收数据缓冲区*/unsignedcharTx_Buffer20;/*端口发送数据缓冲区*/*网络参数寄存器*/unsig

5、nedcharGateway_IP4=192,168,2,254;/*GatewayIPAddress*/unsignedcharSub_Mask4=255,255,255,0;/*SubnetMask*/unsignedcharPhy_Addr6=0x00,0x08,0xDC,0x01,0x02,0x03;/*PhysicalAddress*/unsignedcharIP_Addr4=192,168,2,1;/*LoacalIPAddress*/unsignedcharS0_Port2=0x13,0x88;/*Socket0Portnumber5000*/unsignedcharS0_DIP

6、4=192,168,2,43;/*Socket0DestinationIPAddress*/unsignedcharS0_DPort2=0x13,0x88;/*Socket0DestinationPortnumber5000*/unsignedcharS0_State=0;/*Socket0staterecorder*/unsignedcharS0_Data;/*Socket0receivedataandtransmitOK*/unsignedcharW5100_Interrupt;/*UDPDestionationIPaddressandPortnumber*/unsignedcharUDP

7、_DIPR4;unsignedcharUDP_DPORT2;voidDelay(unsignedintx)unsignedinti;for(i=0;ix;i+)SPI_EN=1;unsignedcharSPI_ReadByte(void)unsignedchari,rByte=0;for(i=0;i8;i+)rByte=1;rByte|=SPI_SO;SPI_SCK=0;Delay(10);SPI_SCK=1;SPI_SCK=0;returnrByte;voidSPI_SendByte(unsignedchardt)unsignedchari;for(i=0;i8;i+)if(dti)&0x8

8、0)SPI_SI=1;elseSPI_SI=0;SPI_SCK=0;Delay(10);SPI_SCK=1;SPI_SCK=0;unsignedcharRead_W5100(unsignedshortaddr)unsignedchari;/*置W5100的CS为低电平*/SPI_CS=0;/*发送读命令*/SPI_SendByte(0x0f);/*发送地址*/SPI_SendByte(addr/256);SPI_SendByte(addr);/*读取数据*/i=SPI_ReadByte();/*置W5100的CS为高电平*/SPI_CS=1;returni;voidWrite_W5100(un

9、signedshortaddr,unsignedchardat)/*置W5100的CS为低电平*/SPI_CS=0;Delay(100);/*发送写命令*/SPI_SendByte(0xf0);/*发送地址*/SPI_SendByte(addr/256);SPI_SendByte(addr);/*写入数据*/SPI_SendByte(dat);Delay(100);/*置W5100的CS为高电平*/SPI_CS=1;voidW5100_Init(void)unsignedchari;SPI_EN=1;SPI_SCK=0;SPI_CS=1;SPI_SO=1;Write_W5100(W5100_M

10、ODE,MODE_RST);/*软复位W5100*/Delay(100);/Write_W5100(W5100_MODE,0);/*软复位W5100*/Delay(lOO);/*延时100ms,自己定义该函数*/*设置网关(Gateway)的IP地址,4字节*/*使用网关可以使通信突破子网的局限,通过网关可以访问到其它子网或进入Internet*/for(i=0;i4;i+)Write_W5100(W5100_GAR+i,Gateway_IP);/*Gateway_IP为4字节unsignedchar数组,自己定义*/for(i=0;i4;i+)Gateway_IP=Read_W5100(W5

11、100_GAR+i);/*设置子网掩码(MASK)值,4字节。子网掩码用于子网运算*/for(i=0;i4;i+)Write_W5100(W5100_SUBR+i,Sub_Mask);/*SUB_MASK为4字节unsignedchar数组,自己定义*/*设置物理地址,6字节,用于唯一标识网络设备的物理地址值该地址值需要到IEEE申请,按照OUI的规定,前3个字节为厂商代码,后三个字节为产品序号如果自己定义物理地址,注意第一个字节必须为偶数*/for(i=0;i6;i+)Write_W5100(W5100_SHAR+i,Phy_Addr);/*PHY_ADDR6字节unsignedchar数组

12、,自己定义*/*设置本机的IP地址,4个字节注意,网关IP必须与本机IP属于同一个子网,否则本机将无法找到网关*/for(i=0;i4;i+)Write_W5100(W5100_SIPR+i,IP_Addr);/*IP_ADDR为4字节unsignedchar数组,自己定义*/*设置发送缓冲区和接收缓冲区的大小,参考W5100数据手册*/Write_W5100(W5100_RMSR,0x55);/*SocketRxmemorysize=2k*/Write_W5100(W5100_TMSR,0x55);/*SocketTxmemprysize=2k*/*设置重试时间,默认为2000(200ms)

13、*/Write_W5100(W5100_RTR,0x07);Write_W5100(W5100_RTR+1,0xd0);/*设置重试次数,默认为8次*/Write_W5100(W5100_RCR,8);/*启动中断,参考W5100数据手册确定自己需要的中断类型IMR_CONFLICT是IP地址冲突异常中断IMR_UNREACH是UDP通信时,地址无法到达的异常中断其它是Socket事件中断,根据需要添加*/Write_W5100(W5100_IMR,(IMR_CONFLICT|IMR_UNREACH|IMR_S0_INT);unsignedcharDetect_Gateway(void)uns

14、ignedchari;Write_W5100(W5100_S0_MR),S_MR_TCP);/*设置socket。为TCP模式*/Write_W5100(W5100_S0_CR),S_CR_OPEN);/*打开socketO*/if(Read_W5100(W5100_S0_SSR)!=S_SSR_INIT)Write_W5100(W5100_S0_CR),S_CR_CLOSE);/*打开不成功,关闭Socket,然后返回*/returnFALSE;/*检查网关及获取网关的物理地址*/for(i=0;i4;i+)Write_W5100(W5100_S0_DIPR+i),IP_Addr+l);/*向目的地址寄存器写入与本机IP不同的IP值*/Write_W5100(W5100_S0_CR),S_CR_CONNECT);/*打开socket。的TCP连接*/Delay(20);/*延时20ms*/i=Read_W5100(W5100_S0_DHAR);/*读取目的主机的物理地址,该地址就是网关地址*/Write_W5100(W5100_S0_CR),S_CR_CLOSE);/*关闭socketO*/if(i=0xff)/*

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号