找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10019|回复: 9
收起左侧

W5500客户端模式例程(51单片机源码)

  [复制链接]
ID:265916 发表于 2018-5-18 01:15 | 显示全部楼层 |阅读模式
单片机源程序如下:
  1. /***************************************************************************************
  2. * 描述    :W5500的端口0工作在客户端模式,主动与《TCP&UDP测试工具》上创建的服务端连接,
  3. *                         并且定时给服务端发送字符串"\r\nWelcome To YiXinElec!\r\n",同时将接
  4. *                         收到服务端发来的数据回发给服务端。
  5. * 实验平台:用户51单片机开发板 + YIXIN_W5500以太网(TCP/IP)模块
  6. * 硬件连接:  P3^2 -> W5500_RST   
  7. *             P3^3 -> W5500_INT(本例程没有用到中断,此引脚可以不接)     
  8. *             P3^6 -> W5500_SCS      
  9. *             P3^7 -> W5500_SCK   
  10. *             P3^4 -> W5500_MISO   
  11. *             P3^5 -> W5500_MOSI   
  12. ***************************************************************************************/

  13. /*例程网络参数*/
  14. //网关:192.168.1.1
  15. //掩码:        255.255.255.0
  16. //物理地址:  30 9C 23 62 56 D1
  17. //本机IP地址:192.168.1.115
  18. //端口0的端口号:5000
  19. //端口0的目的IP地址:192.168.1.115
  20. //端口0的目的端口号:6000

  21. #include <reg51.h>
  22. #include "W5500.h"                              
  23. #include <string.h>

  24. void Delay(unsigned int d);                        //延时函数(ms)

  25. /*******************************************************************************
  26. * 函数名  : W5500_Initialization
  27. * 描述    : W5500初始货配置
  28. * 输入    : 无
  29. * 输出    : 无
  30. * 返回值  : 无
  31. * 说明    : 无
  32. *******************************************************************************/
  33. void W5500_Initialization(void)
  34. {
  35.         W5500_Init();                //初始化W5500寄存器函数
  36.         Detect_Gateway();        //检查网关服务器
  37.         Socket_Init(0);                //指定Socket(0~7)初始化,初始化端口0
  38. }

  39. /*******************************************************************************
  40. * 函数名  : Load_Net_Parameters
  41. * 描述    : 装载网络参数
  42. * 输入    : 无
  43. * 输出    : 无
  44. * 返回值  : 无
  45. * 说明    : 网关、掩码、物理地址、本机IP地址、端口号、目的IP地址、目的端口号、端口工作模式
  46. *******************************************************************************/
  47. void Load_Net_Parameters(void)
  48. {
  49.         Gateway_IP[0] = 192;//加载网关参数
  50.         Gateway_IP[1] = 168;
  51.         Gateway_IP[2] = 1;
  52.         Gateway_IP[3] = 1;

  53.         Sub_Mask[0]=255;//加载子网掩码
  54.         Sub_Mask[1]=255;
  55.         Sub_Mask[2]=255;
  56.         Sub_Mask[3]=0;

  57. //Phy_Addr[0]=0x30;//加载物理地址
  58. //Phy_Addr[1]=0x9c;
  59. //Phy_Addr[2]=0x23;
  60. //Phy_Addr[3]=0x62;
  61. //Phy_Addr[4]=0x56;
  62. //Phy_Addr[5]=0xd1;
  63.                 Phy_Addr[0]=0x0c;//加载物理地址
  64.         Phy_Addr[1]=0x29;
  65.         Phy_Addr[2]=0xab;
  66.         Phy_Addr[3]=0x7c;
  67.         Phy_Addr[4]=0x00;
  68.         Phy_Addr[5]=0x01;

  69.         IP_Addr[0]=192;//加载本机IP地址
  70.         IP_Addr[1]=168;
  71.         IP_Addr[2]=1;
  72.         IP_Addr[3]=120;

  73.         S0_Port[0] = 0x13;//加载端口0的端口号5000
  74.         S0_Port[1] = 0x88;

  75.         S0_DIP[0]=192;//加载端口0的目的IP地址
  76.         S0_DIP[1]=168;
  77.         S0_DIP[2]=1;
  78.         S0_DIP[3]=115;
  79.       
  80.         S0_DPort[0] = 0x17;//加载端口0的目的端口号6000
  81.         S0_DPort[1] = 0x70;

  82.         S0_Mode=TCP_CLIENT;//加载端口0的工作模式,TCP客户端模式
  83. }

  84. /*******************************************************************************
  85. * 函数名  : W5500_Socket_Set
  86. * 描述    : W5500端口初始化配置
  87. * 输入    : 无
  88. * 输出    : 无
  89. * 返回值  : 无
  90. * 说明    : 分别设置4个端口,根据端口工作模式,将端口置于TCP服务器、TCP客户端或UDP模式.
  91. *                        从端口状态字节Socket_State可以判断端口的工作情况
  92. *******************************************************************************/
  93. void W5500_Socket_Set(void)
  94. {
  95.         if(S0_State==0)//端口0初始化配置
  96.         {
  97.                 if(S0_Mode==TCP_SERVER)//TCP服务器模式
  98.                 {
  99.                         if(Socket_Listen(0)==TRUE)
  100.                                 S0_State=S_INIT;
  101.                         else
  102.                                 S0_State=0;
  103.                 }
  104.                 else if(S0_Mode==TCP_CLIENT)//TCP客户端模式
  105.                 {
  106.                         if(Socket_Connect(0)==TRUE)
  107.                                 S0_State=S_INIT;
  108.                         else
  109.                                 S0_State=0;
  110.                 }
  111.                 else//UDP模式
  112.                 {
  113.                        
  114.                         if(Socket_UDP(0)==TRUE)
  115.                                 S0_State=S_INIT|S_CONN;
  116.                         else
  117.                                 S0_State=0;
  118.                 }
  119.         }
  120. }

  121. /*******************************************************************************
  122. * 函数名  : Process_Socket_Data
  123. * 描述    : W5500接收并发送接收到的数据
  124. * 输入    : s:端口号
  125. * 输出    : 无
  126. * 返回值  : 无
  127. * 说明    : 本过程先调用S_rx_process()从W5500的端口接收数据缓冲区读取数据,
  128. *                        然后将读取的数据从Rx_Buffer拷贝到Temp_Buffer缓冲区进行处理。
  129. *                        处理完毕,将数据从Temp_Buffer拷贝到Tx_Buffer缓冲区。调用S_tx_process()
  130. *                        发送数据。
  131. *******************************************************************************/
  132. void Process_Socket_Data(SOCKET s)
  133. {
  134.         unsigned short size;
  135.         size=Read_SOCK_Data_Buffer(s, Rx_Buffer);
  136.         memcpy(Tx_Buffer, Rx_Buffer, size);      
  137.         //将Tx_buffer里面的数据写入到SD卡里面的test.txt中
  138.                        
  139.         Write_SOCK_Data_Buffer(s, Tx_Buffer, size);
  140. }

  141. /*******************************************************************************
  142. * 函数名  : main
  143. * 描述    : 主函数,用户程序从main函数开始运行
  144. * 输入    : 无
  145. * 输出    : 无
  146. * 返回值  : int:返回值为一个16位整形数
  147. * 说明    : 无
  148. *******************************************************************************/
  149. int main(void)
  150. {
  151.         unsigned int W5500_Send_Delay_Counter =0;

  152.         Load_Net_Parameters();                //装载网络参数      
  153.         W5500_Hardware_Reset();                //硬件复位W5500
  154.         W5500_Initialization();                //W5500初始货配置                          
  155.         W5500_Socket_Set();                        //W5500端口初始化配置

  156.         while (1)
  157.         {
  158.                 W5500_Socket_Set();                        //W5500端口初始化配置
  159.                 W5500_Interrupt_Process();//W5500中断处理程序框架

  160.                 if((S0_Data & S_RECEIVE) == S_RECEIVE)//如果Socket0接收到数据
  161.                 {
  162.                         S0_Data&=~S_RECEIVE;
  163.                         Process_Socket_Data(0);//W5500接收并发送接收到的数据
  164.                 }
  165.                 else if(W5500_Send_Delay_Counter >= 3000)//定时发送字符串
  166.                 {
  167.                         if(S0_State == (S_INIT|S_CONN))
  168.                         {
  169.                                 S0_Data&=~S_TRANSMITOK;
  170.                                 memcpy(Tx_Buffer,"大家好,我是w5500\r\n", 23);      
  171.                                 Write_SOCK_Data_Buffer(0, Tx_Buffer, 23);//指定Socket(0~7)发送数据处理,端口0发送23字节数据         
  172.                         }
  173.                         W5500_Send_Delay_Counter=0;
  174.                 }
  175.                 W5500_Send_Delay_Counter++;
  176.         }
  177. }

  178. /*******************************************************************************
  179. * 函数名  : Delay
  180. * 描述    : 延时函数(ms)
  181. * 输入    : d:延时系数,单位为毫秒
  182. * 输出    : 无
  183. * 返回    : 无
  184. * 说明    : 延时是利用Timer2定时器产生的1毫秒的计数来实现的
  185. *******************************************************************************/
  186. void Delay(unsigned int  x)
  187. {
  188.     unsigned int i,j;

  189.     for(j=0;j<5;j++)
  190.                 for(i=0;i<x;i++);
  191. }
复制代码
0.jpg

所有资料51hei提供下载:
YIXIN_W5500模块-客户端模式例程(51单片机).zip (90.42 KB, 下载次数: 211)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:183392 发表于 2018-6-11 13:22 | 显示全部楼层
寻她千百度
回复

使用道具 举报

ID:183392 发表于 2018-6-11 14:59 | 显示全部楼层
众里寻她千百度
回复

使用道具 举报

ID:246774 发表于 2018-8-12 14:55 | 显示全部楼层
非常感谢,学习下W5500的代码
回复

使用道具 举报

ID:392843 发表于 2018-9-3 10:20 | 显示全部楼层
不错!
回复

使用道具 举报

ID:321992 发表于 2018-12-26 19:33 | 显示全部楼层
学习, 众里寻她千百度
回复

使用道具 举报

ID:387915 发表于 2019-7-14 09:31 | 显示全部楼层
兄弟,你们都测了吗?能用吗
回复

使用道具 举报

ID:585455 发表于 2019-8-10 18:05 | 显示全部楼层
剛剛測試 目前是ping不到
努力中
回复

使用道具 举报

ID:585455 发表于 2019-8-15 11:07 | 显示全部楼层
本帖最后由 jemery1030 于 2019-8-15 11:40 编辑

終於測試成功了,特來報告程式碼可用,感謝分享好物。




回复

使用道具 举报

ID:20672 发表于 2019-11-22 20:51 | 显示全部楼层
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表