找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 10491|回復(fù): 9
收起左側(cè)

W5500客戶端模式例程(51單片機(jī)源碼)

  [復(fù)制鏈接]
ID:265916 發(fā)表于 2018-5-18 01:15 | 顯示全部樓層 |閱讀模式
單片機(jī)源程序如下:
  1. /***************************************************************************************
  2. * 描述    :W5500的端口0工作在客戶端模式,主動(dòng)與《TCP&UDP測試工具》上創(chuàng)建的服務(wù)端連接,
  3. *                         并且定時(shí)給服務(wù)端發(fā)送字符串"\r\nWelcome To YiXinElec!\r\n",同時(shí)將接
  4. *                         收到服務(wù)端發(fā)來的數(shù)據(jù)回發(fā)給服務(wù)端。
  5. * 實(shí)驗(yàn)平臺(tái):用戶51單片機(jī)開發(fā)板 + YIXIN_W5500以太網(wǎng)(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. /*例程網(wǎng)絡(luò)參數(shù)*/
  14. //網(wǎng)關(guān):192.168.1.1
  15. //掩碼:        255.255.255.0
  16. //物理地址:  30 9C 23 62 56 D1
  17. //本機(jī)IP地址:192.168.1.115
  18. //端口0的端口號(hào):5000
  19. //端口0的目的IP地址:192.168.1.115
  20. //端口0的目的端口號(hào):6000

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

  24. void Delay(unsigned int d);                        //延時(shí)函數(shù)(ms)

  25. /*******************************************************************************
  26. * 函數(shù)名  : W5500_Initialization
  27. * 描述    : W5500初始貨配置
  28. * 輸入    : 無
  29. * 輸出    : 無
  30. * 返回值  : 無
  31. * 說明    : 無
  32. *******************************************************************************/
  33. void W5500_Initialization(void)
  34. {
  35.         W5500_Init();                //初始化W5500寄存器函數(shù)
  36.         Detect_Gateway();        //檢查網(wǎng)關(guān)服務(wù)器
  37.         Socket_Init(0);                //指定Socket(0~7)初始化,初始化端口0
  38. }

  39. /*******************************************************************************
  40. * 函數(shù)名  : Load_Net_Parameters
  41. * 描述    : 裝載網(wǎng)絡(luò)參數(shù)
  42. * 輸入    : 無
  43. * 輸出    : 無
  44. * 返回值  : 無
  45. * 說明    : 網(wǎng)關(guān)、掩碼、物理地址、本機(jī)IP地址、端口號(hào)、目的IP地址、目的端口號(hào)、端口工作模式
  46. *******************************************************************************/
  47. void Load_Net_Parameters(void)
  48. {
  49.         Gateway_IP[0] = 192;//加載網(wǎng)關(guān)參數(shù)
  50.         Gateway_IP[1] = 168;
  51.         Gateway_IP[2] = 1;
  52.         Gateway_IP[3] = 1;

  53.         Sub_Mask[0]=255;//加載子網(wǎng)掩碼
  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;//加載本機(jī)IP地址
  70.         IP_Addr[1]=168;
  71.         IP_Addr[2]=1;
  72.         IP_Addr[3]=120;

  73.         S0_Port[0] = 0x13;//加載端口0的端口號(hào)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的目的端口號(hào)6000
  81.         S0_DPort[1] = 0x70;

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

  84. /*******************************************************************************
  85. * 函數(shù)名  : W5500_Socket_Set
  86. * 描述    : W5500端口初始化配置
  87. * 輸入    : 無
  88. * 輸出    : 無
  89. * 返回值  : 無
  90. * 說明    : 分別設(shè)置4個(gè)端口,根據(jù)端口工作模式,將端口置于TCP服務(wù)器、TCP客戶端或UDP模式.
  91. *                        從端口狀態(tài)字節(jié)Socket_State可以判斷端口的工作情況
  92. *******************************************************************************/
  93. void W5500_Socket_Set(void)
  94. {
  95.         if(S0_State==0)//端口0初始化配置
  96.         {
  97.                 if(S0_Mode==TCP_SERVER)//TCP服務(wù)器模式
  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. * 函數(shù)名  : Process_Socket_Data
  123. * 描述    : W5500接收并發(fā)送接收到的數(shù)據(jù)
  124. * 輸入    : s:端口號(hào)
  125. * 輸出    : 無
  126. * 返回值  : 無
  127. * 說明    : 本過程先調(diào)用S_rx_process()從W5500的端口接收數(shù)據(jù)緩沖區(qū)讀取數(shù)據(jù),
  128. *                        然后將讀取的數(shù)據(jù)從Rx_Buffer拷貝到Temp_Buffer緩沖區(qū)進(jìn)行處理。
  129. *                        處理完畢,將數(shù)據(jù)從Temp_Buffer拷貝到Tx_Buffer緩沖區(qū)。調(diào)用S_tx_process()
  130. *                        發(fā)送數(shù)據(jù)。
  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里面的數(shù)據(jù)寫入到SD卡里面的test.txt中
  138.                        
  139.         Write_SOCK_Data_Buffer(s, Tx_Buffer, size);
  140. }

  141. /*******************************************************************************
  142. * 函數(shù)名  : main
  143. * 描述    : 主函數(shù),用戶程序從main函數(shù)開始運(yùn)行
  144. * 輸入    : 無
  145. * 輸出    : 無
  146. * 返回值  : int:返回值為一個(gè)16位整形數(shù)
  147. * 說明    : 無
  148. *******************************************************************************/
  149. int main(void)
  150. {
  151.         unsigned int W5500_Send_Delay_Counter =0;

  152.         Load_Net_Parameters();                //裝載網(wǎng)絡(luò)參數(shù)      
  153.         W5500_Hardware_Reset();                //硬件復(fù)位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接收到數(shù)據(jù)
  161.                 {
  162.                         S0_Data&=~S_RECEIVE;
  163.                         Process_Socket_Data(0);//W5500接收并發(fā)送接收到的數(shù)據(jù)
  164.                 }
  165.                 else if(W5500_Send_Delay_Counter >= 3000)//定時(shí)發(fā)送字符串
  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)發(fā)送數(shù)據(jù)處理,端口0發(fā)送23字節(jié)數(shù)據(jù)         
  172.                         }
  173.                         W5500_Send_Delay_Counter=0;
  174.                 }
  175.                 W5500_Send_Delay_Counter++;
  176.         }
  177. }

  178. /*******************************************************************************
  179. * 函數(shù)名  : Delay
  180. * 描述    : 延時(shí)函數(shù)(ms)
  181. * 輸入    : d:延時(shí)系數(shù),單位為毫秒
  182. * 輸出    : 無
  183. * 返回    : 無
  184. * 說明    : 延時(shí)是利用Timer2定時(shí)器產(chǎn)生的1毫秒的計(jì)數(shù)來實(shí)現(xiàn)的
  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. }
復(fù)制代碼
0.jpg

所有資料51hei提供下載:
YIXIN_W5500模塊-客戶端模式例程(51單片機(jī)).zip (90.42 KB, 下載次數(shù): 212)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:20672 發(fā)表于 2019-11-22 20:51 | 顯示全部樓層
謝謝分享
回復(fù)

使用道具 舉報(bào)

ID:585455 發(fā)表于 2019-8-15 11:07 | 顯示全部樓層
本帖最后由 jemery1030 于 2019-8-15 11:40 編輯

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




回復(fù)

使用道具 舉報(bào)

ID:585455 發(fā)表于 2019-8-10 18:05 | 顯示全部樓層
剛剛測試 目前是ping不到
努力中
回復(fù)

使用道具 舉報(bào)

ID:387915 發(fā)表于 2019-7-14 09:31 | 顯示全部樓層
兄弟,你們都測了嗎?能用嗎
回復(fù)

使用道具 舉報(bào)

ID:321992 發(fā)表于 2018-12-26 19:33 | 顯示全部樓層
學(xué)習(xí), 眾里尋她千百度
回復(fù)

使用道具 舉報(bào)

ID:392843 發(fā)表于 2018-9-3 10:20 | 顯示全部樓層
不錯(cuò)!
回復(fù)

使用道具 舉報(bào)

ID:246774 發(fā)表于 2018-8-12 14:55 | 顯示全部樓層
非常感謝,學(xué)習(xí)下W5500的代碼
回復(fù)

使用道具 舉報(bào)

ID:183392 發(fā)表于 2018-6-11 14:59 | 顯示全部樓層
眾里尋她千百度
回復(fù)

使用道具 舉報(bào)

ID:183392 發(fā)表于 2018-6-11 13:22 | 顯示全部樓層
尋她千百度
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表