標(biāo)題: W5500以太網(wǎng)模塊的51單片機控制源碼 [打印本頁]

作者: w-g    時間: 2018-6-29 08:36
標(biāo)題: W5500以太網(wǎng)模塊的51單片機控制源碼
51單片機搭載以太網(wǎng)模塊,實現(xiàn)UDP模式,服務(wù)器模式,客戶端模式,源碼分享,有需要的伙伴可以下載參考
全部資料51hei下載地址:
W5500模塊-客戶端模式例程(51單片機).zip (86.63 KB, 下載次數(shù): 179)
W5500模塊-服務(wù)端模式例程(51單片機).zip (86.31 KB, 下載次數(shù): 119)
W5500模塊-UDP模式例程(51單片機).zip (86.78 KB, 下載次數(shù): 130)


單片機源程序如下:
  1. /***************************************************************************************
  2. * 工程名  :W5500模塊-UDP模式例程
  3. * 描述    :W5500的端口0工作在UDP模式,端口通信不需要建立連接即可接收其它UDP模式端口發(fā)來的數(shù)據(jù),
  4. *                         數(shù)據(jù)的前4個字節(jié)為對方端口IP地址,第5、6個字節(jié)為端口號,獲得對方IP和端口號后W5500端口0
  5. *                         將定時給對應(yīng)端口發(fā)送字符串"\r\nWelcome To ChuangWeiElec!\r\n",同時將接收
  6. *                         到的數(shù)據(jù)回發(fā)給對應(yīng)端口。
  7. * 實驗平臺:51單片機開發(fā)板 + W5500以太網(wǎng)(TCP/IP)模塊
  8. * 硬件連接:  P3^2 -> W5500_RST   
  9. *             P3^3 -> W5500_INT(本例程沒有用到中斷,此引腳可以不接)     
  10. *             P3^6 -> W5500_SCS      
  11. *             P3^7 -> W5500_SCK   
  12. *             P3^4 -> W5500_MISO   
  13. *             P3^5 -> W5500_MOSI   
  14. * 庫版本  :ST_v3.5
  15. ***************************************************************************************/

  16. /*例程網(wǎng)絡(luò)參數(shù)*/
  17. //網(wǎng)關(guān):192.168.1.1
  18. //掩碼:        255.255.255.0
  19. //物理地址:0C 29 AB 7C 00 01
  20. //本機IP地址:192.168.1.199
  21. //端口0的端口號:5000
  22. //端口0的目的IP地址:192.168.1.190
  23. //端口0的目的端口號:6000

  24. #include <reg51.h>
  25. #include "W5500.h"                               
  26. #include <string.h>

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

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

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

  56.         Sub_Mask[0]=255;//加載子網(wǎng)掩碼
  57.         Sub_Mask[1]=255;
  58.         Sub_Mask[2]=255;
  59.         Sub_Mask[3]=0;

  60.         Phy_Addr[0]=0x0c;//加載物理地址
  61.         Phy_Addr[1]=0x29;
  62.         Phy_Addr[2]=0xab;
  63.         Phy_Addr[3]=0x7c;
  64.         Phy_Addr[4]=0x00;
  65.         Phy_Addr[5]=0x01;

  66.         IP_Addr[0]=192;//加載本機IP地址
  67.         IP_Addr[1]=168;
  68.         IP_Addr[2]=1;
  69.         IP_Addr[3]=199;

  70.         S0_Port[0] = 0x13;//加載端口0的端口號5000
  71.         S0_Port[1] = 0x88;

  72. //        S0_DIP[0]=192;//加載端口0的目的IP地址
  73. //        S0_DIP[1]=168;
  74. //        S0_DIP[2]=1;
  75. //        S0_DIP[3]=190;
  76. //       
  77. //        S0_DPort[0] = 0x17;//加載端口0的目的端口號6000
  78. //        S0_DPort[1] = 0x70;

  79. //        UDP_DIPR[0] = 192;        //UDP(廣播)模式,目的主機IP地址
  80. //        UDP_DIPR[1] = 168;
  81. //        UDP_DIPR[2] = 1;
  82. //        UDP_DIPR[3] = 190;
  83. //
  84. //        UDP_DPORT[0] = 0x17;        //UDP(廣播)模式,目的主機端口號
  85. //        UDP_DPORT[1] = 0x70;

  86.         S0_Mode=UDP_MODE;//加載端口0的工作模式,UDP模式
  87. }

  88. /*******************************************************************************
  89. * 函數(shù)名  : W5500_Socket_Set
  90. * 描述    : W5500端口初始化配置
  91. * 輸入    : 無
  92. * 輸出    : 無
  93. * 返回值  : 無
  94. * 說明    : 分別設(shè)置4個端口,根據(jù)端口工作模式,將端口置于TCP服務(wù)器、TCP客戶端或UDP模式.
  95. *                        從端口狀態(tài)字節(jié)Socket_State可以判斷端口的工作情況
  96. *******************************************************************************/
  97. void W5500_Socket_Set(void)
  98. {
  99.         if(S0_State==0)//端口0初始化配置
  100.         {
  101.                 if(S0_Mode==TCP_SERVER)//TCP服務(wù)器模式
  102.                 {
  103.                         if(Socket_Listen(0)==TRUE)
  104.                                 S0_State=S_INIT;
  105.                         else
  106.                                 S0_State=0;
  107.                 }
  108.                 else if(S0_Mode==TCP_CLIENT)//TCP客戶端模式
  109.                 {
  110.                         if(Socket_Connect(0)==TRUE)
  111.                                 S0_State=S_INIT;
  112.                         else
  113.                                 S0_State=0;
  114.                 }
  115.                 else//UDP模式
  116.                 {
  117.                         if(Socket_UDP(0)==TRUE)
  118.                                 S0_State=S_INIT|S_CONN;
  119.                         else
  120.                                 S0_State=0;
  121.                 }
  122.         }
  123. }

  124. /*******************************************************************************
  125. * 函數(shù)名  : Process_Socket_Data
  126. * 描述    : W5500接收并發(fā)送接收到的數(shù)據(jù)
  127. * 輸入    : s:端口號
  128. * 輸出    : 無
  129. * 返回值  : 無
  130. * 說明    : 本過程先調(diào)用S_rx_process()從W5500的端口接收數(shù)據(jù)緩沖區(qū)讀取數(shù)據(jù),
  131. *                        然后將讀取的數(shù)據(jù)從Rx_Buffer拷貝到Temp_Buffer緩沖區(qū)進行處理。
  132. *                        處理完畢,將數(shù)據(jù)從Temp_Buffer拷貝到Tx_Buffer緩沖區(qū)。調(diào)用S_tx_process()
  133. *                        發(fā)送數(shù)據(jù)。
  134. *******************************************************************************/
  135. void Process_Socket_Data(SOCKET s)
  136. {
  137.         unsigned short size;
  138.         size=Read_SOCK_Data_Buffer(s, Rx_Buffer);
  139.         UDP_DIPR[0] = Rx_Buffer[0];
  140.         UDP_DIPR[1] = Rx_Buffer[1];
  141.         UDP_DIPR[2] = Rx_Buffer[2];
  142.         UDP_DIPR[3] = Rx_Buffer[3];

  143.         UDP_DPORT[0] = Rx_Buffer[4];
  144.         UDP_DPORT[1] = Rx_Buffer[5];
  145.         memcpy(Tx_Buffer, Rx_Buffer+8, size-8);                       
  146.         Write_SOCK_Data_Buffer(s, Tx_Buffer, size);
  147. }

  148. /*******************************************************************************
  149. * 函數(shù)名  : main
  150. * 描述    : 主函數(shù),用戶程序從main函數(shù)開始運行
  151. * 輸入    : 無
  152. * 輸出    : 無
  153. * 返回值  : int:返回值為一個16位整形數(shù)
  154. * 說明    : 無
  155. *******************************************************************************/
  156. int main(void)
  157. {
  158.         unsigned int W5500_Send_Delay_Counter =0;

  159.         Load_Net_Parameters();                //裝載網(wǎng)絡(luò)參數(shù)       
  160.         W5500_Hardware_Reset();                //硬件復(fù)位W5500
  161.         W5500_Initialization();                //W5500初始貨配置
  162.         while (1)
  163.         {
  164.                 W5500_Socket_Set();//W5500端口初始化配置
  165.                
  166.                 W5500_Interrupt_Process();//W5500中斷處理程序框架

  167.                 if((S0_Data & S_RECEIVE) == S_RECEIVE)//如果Socket0接收到數(shù)據(jù)
  168.                 {
  169.                         S0_Data&=~S_RECEIVE;
  170.                         Process_Socket_Data(0);//W5500接收并發(fā)送接收到的數(shù)據(jù)
  171.                 }
  172.                 else if(W5500_Send_Delay_Counter >= 3000)//定時發(fā)送字符串
  173.                 {
  174.                         if(S0_State == (S_INIT|S_CONN))
  175.                         {
  176.                                 S0_Data&=~S_TRANSMITOK;
  177. ……………………

  178. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼


作者: liangjing    時間: 2019-1-12 21:30
感謝這么重要的學(xué)習(xí)資料,不過是不是用ch9121的方案更方便呢
作者: @zhs    時間: 2019-7-14 09:30
我試了這個例程不能用啊,在STC89C51單片機用不了
作者: jemery1030    時間: 2019-8-9 20:29
感謝分享
作者: jemery1030    時間: 2019-8-12 23:10
STC89C52RC程式碼編譯沒問題
但是無法連線
ping不到

我用arduino uno連接w5500測試沒問題
表示硬件是ok的

不知版主是否能指導(dǎo)一下
作者: mpquest    時間: 2019-8-13 14:14

感謝分享
作者: mynameishugang    時間: 2019-10-19 18:03
是的,我使用STC12C5A60S2,亦不能用,ping不通,有沒有什么秘訣?
作者: wdliming    時間: 2019-11-22 20:51
謝謝分享
作者: hmily1818    時間: 2019-12-10 11:12
謝謝分享

作者: jjingwer    時間: 2020-4-6 14:57
十分感謝
作者: liqicdu    時間: 2020-5-2 17:16
感謝分享
作者: melin    時間: 2021-2-1 16:09
可以用的嗎,我來測試一下
作者: dzxqyt    時間: 2022-3-2 22:44

感謝這么重要的學(xué)習(xí)資料,不過是不是用ch9121的方案更方便呢
作者: 子非魚001    時間: 2022-3-3 11:58
dzxqyt 發(fā)表于 2022-3-2 22:44
感謝這么重要的學(xué)習(xí)資料,不過是不是用ch9121的方案更方便呢

ch9121用的開源廣場技小新PCB文件打板的,焊接了3塊,一塊都不行,用不了
作者: huogq    時間: 2022-3-3 13:08
我也遇到同樣的問題
作者: huogq    時間: 2022-3-3 13:10
dzxqyt 發(fā)表于 2022-3-2 22:44
感謝這么重要的學(xué)習(xí)資料,不過是不是用ch9121的方案更方便呢

你們用的怎么樣,我是用的聯(lián)不上
作者: nuomistudio    時間: 2022-3-3 14:48
好用又不貴!
作者: huogq    時間: 2022-5-3 23:44
huogq 發(fā)表于 2022-3-3 13:10
你們用的怎么樣,我是用的聯(lián)不上

可以用,我都聯(lián)上了。
作者: kckj    時間: 2022-5-23 09:33
我也是用ch9121方案的

222.png (569.34 KB, 下載次數(shù): 112)

222.png

9121.png (568.61 KB, 下載次數(shù): 127)

9121.png

22222.png (496.05 KB, 下載次數(shù): 113)

22222.png

作者: 廉頗老矣    時間: 2023-6-13 10:22
DHCP的有嗎?
作者: cnfloatleaf    時間: 2023-6-30 20:45
W5500剛調(diào)通,收發(fā)數(shù)據(jù)都可以,我用的單片機是STC8C2K64S4
作者: paladina    時間: 2023-6-30 21:49
好東西,手頭正好有W5500以太網(wǎng)模塊,借鑒程序來試試
作者: cnfloatleaf    時間: 2023-7-1 00:18
liangjing 發(fā)表于 2019-1-12 21:30
感謝這么重要的學(xué)習(xí)資料,不過是不是用ch9121的方案更方便呢

剛才看了一下CH9121,感覺比W5500簡單,準(zhǔn)備試試CH9121
作者: jihji    時間: 2023-7-1 08:54
太好了。剛才看了一下CH9121,感覺比W5500簡單,準(zhǔn)備試試CH9121
作者: cnfloatleaf    時間: 2023-7-2 01:48
如果不需要多個socket,可以用CH9120,更簡單一些,價格也便宜一些。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1