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

QQ登錄

只需一步,快速開始

搜索
查看: 11077|回復(fù): 24
打印 上一主題 下一主題
收起左側(cè)

W5500以太網(wǎng)模塊的51單片機(jī)控制源碼

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
51單片機(jī)搭載以太網(wǎng)模塊,實(shí)現(xiàn)UDP模式,服務(wù)器模式,客戶端模式,源碼分享,有需要的伙伴可以下載參考
全部資料51hei下載地址:
W5500模塊-客戶端模式例程(51單片機(jī)).zip (86.63 KB, 下載次數(shù): 179)
W5500模塊-服務(wù)端模式例程(51單片機(jī)).zip (86.31 KB, 下載次數(shù): 119)
W5500模塊-UDP模式例程(51單片機(jī)).zip (86.78 KB, 下載次數(shù): 130)


單片機(jī)源程序如下:
  1. /***************************************************************************************
  2. * 工程名  :W5500模塊-UDP模式例程
  3. * 描述    :W5500的端口0工作在UDP模式,端口通信不需要建立連接即可接收其它UDP模式端口發(fā)來的數(shù)據(jù),
  4. *                         數(shù)據(jù)的前4個(gè)字節(jié)為對(duì)方端口IP地址,第5、6個(gè)字節(jié)為端口號(hào),獲得對(duì)方IP和端口號(hào)后W5500端口0
  5. *                         將定時(shí)給對(duì)應(yīng)端口發(fā)送字符串"\r\nWelcome To ChuangWeiElec!\r\n",同時(shí)將接收
  6. *                         到的數(shù)據(jù)回發(fā)給對(duì)應(yīng)端口。
  7. * 實(shí)驗(yàn)平臺(tái):51單片機(jī)開發(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. //本機(jī)IP地址:192.168.1.199
  21. //端口0的端口號(hào):5000
  22. //端口0的目的IP地址:192.168.1.190
  23. //端口0的目的端口號(hào):6000

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

  27. void Delay(unsigned int d);                        //延時(shí)函數(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)、掩碼、物理地址、本機(jī)IP地址、端口號(hào)、目的IP地址、目的端口號(hào)、端口工作模式
  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;//加載本機(jī)IP地址
  67.         IP_Addr[1]=168;
  68.         IP_Addr[2]=1;
  69.         IP_Addr[3]=199;

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

  79. //        UDP_DIPR[0] = 192;        //UDP(廣播)模式,目的主機(jī)IP地址
  80. //        UDP_DIPR[1] = 168;
  81. //        UDP_DIPR[2] = 1;
  82. //        UDP_DIPR[3] = 190;
  83. //
  84. //        UDP_DPORT[0] = 0x17;        //UDP(廣播)模式,目的主機(jī)端口號(hào)
  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個(gè)端口,根據(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:端口號(hào)
  128. * 輸出    : 無
  129. * 返回值  : 無
  130. * 說明    : 本過程先調(diào)用S_rx_process()從W5500的端口接收數(shù)據(jù)緩沖區(qū)讀取數(shù)據(jù),
  131. *                        然后將讀取的數(shù)據(jù)從Rx_Buffer拷貝到Temp_Buffer緩沖區(qū)進(jìn)行處理。
  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ù)開始運(yùn)行
  151. * 輸入    : 無
  152. * 輸出    : 無
  153. * 返回值  : int:返回值為一個(gè)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)//定時(shí)發(fā)送字符串
  173.                 {
  174.                         if(S0_State == (S_INIT|S_CONN))
  175.                         {
  176.                                 S0_Data&=~S_TRANSMITOK;
  177. ……………………

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

評(píng)分

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

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏7 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:456878 發(fā)表于 2019-1-12 21:30 | 只看該作者
感謝這么重要的學(xué)習(xí)資料,不過是不是用ch9121的方案更方便呢

評(píng)分

參與人數(shù) 1黑幣 +15 收起 理由
凌凈清河 + 15 贊一個(gè)!還有這種芯片,了解了

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

板凳
ID:387915 發(fā)表于 2019-7-14 09:30 | 只看該作者
我試了這個(gè)例程不能用啊,在STC89C51單片機(jī)用不了
回復(fù)

使用道具 舉報(bào)

地板
ID:585455 發(fā)表于 2019-8-9 20:29 | 只看該作者
感謝分享
回復(fù)

使用道具 舉報(bào)

5#
ID:585455 發(fā)表于 2019-8-12 23:10 | 只看該作者
STC89C52RC程式碼編譯沒問題
但是無法連線
ping不到

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

不知版主是否能指導(dǎo)一下
回復(fù)

使用道具 舉報(bào)

6#
ID:599723 發(fā)表于 2019-8-13 14:14 | 只看該作者

感謝分享
回復(fù)

使用道具 舉報(bào)

7#
ID:614124 發(fā)表于 2019-10-19 18:03 | 只看該作者
是的,我使用STC12C5A60S2,亦不能用,ping不通,有沒有什么秘訣?
回復(fù)

使用道具 舉報(bào)

8#
ID:20672 發(fā)表于 2019-11-22 20:51 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

9#
ID:660412 發(fā)表于 2019-12-10 11:12 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

10#
ID:314228 發(fā)表于 2020-4-6 14:57 | 只看該作者
十分感謝
回復(fù)

使用道具 舉報(bào)

11#
ID:742898 發(fā)表于 2020-5-2 17:16 | 只看該作者
感謝分享
回復(fù)

使用道具 舉報(bào)

12#
ID:382220 發(fā)表于 2021-2-1 16:09 | 只看該作者
可以用的嗎,我來測(cè)試一下
回復(fù)

使用道具 舉報(bào)

13#
ID:153777 發(fā)表于 2022-3-2 22:44 | 只看該作者

感謝這么重要的學(xué)習(xí)資料,不過是不是用ch9121的方案更方便呢
回復(fù)

使用道具 舉報(bào)

14#
ID:603160 發(fā)表于 2022-3-3 11:58 | 只看該作者
dzxqyt 發(fā)表于 2022-3-2 22:44
感謝這么重要的學(xué)習(xí)資料,不過是不是用ch9121的方案更方便呢

ch9121用的開源廣場(chǎng)技小新PCB文件打板的,焊接了3塊,一塊都不行,用不了
回復(fù)

使用道具 舉報(bào)

15#
ID:688893 發(fā)表于 2022-3-3 13:08 來自觸屏版 | 只看該作者
我也遇到同樣的問題
回復(fù)

使用道具 舉報(bào)

16#
ID:688893 發(fā)表于 2022-3-3 13:10 來自觸屏版 | 只看該作者
dzxqyt 發(fā)表于 2022-3-2 22:44
感謝這么重要的學(xué)習(xí)資料,不過是不是用ch9121的方案更方便呢

你們用的怎么樣,我是用的聯(lián)不上
回復(fù)

使用道具 舉報(bào)

17#
ID:688008 發(fā)表于 2022-3-3 14:48 | 只看該作者
好用又不貴!
回復(fù)

使用道具 舉報(bào)

18#
ID:688893 發(fā)表于 2022-5-3 23:44 來自觸屏版 | 只看該作者
huogq 發(fā)表于 2022-3-3 13:10
你們用的怎么樣,我是用的聯(lián)不上

可以用,我都聯(lián)上了。
回復(fù)

使用道具 舉報(bào)

19#
ID:307719 發(fā)表于 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
回復(fù)

使用道具 舉報(bào)

20#
ID:932719 發(fā)表于 2023-6-13 10:22 | 只看該作者
DHCP的有嗎?
回復(fù)

使用道具 舉報(bào)

21#
ID:1085441 發(fā)表于 2023-6-30 20:45 | 只看該作者
W5500剛調(diào)通,收發(fā)數(shù)據(jù)都可以,我用的單片機(jī)是STC8C2K64S4
回復(fù)

使用道具 舉報(bào)

22#
ID:796531 發(fā)表于 2023-6-30 21:49 | 只看該作者
好東西,手頭正好有W5500以太網(wǎng)模塊,借鑒程序來試試
回復(fù)

使用道具 舉報(bào)

23#
ID:1085441 發(fā)表于 2023-7-1 00:18 | 只看該作者
liangjing 發(fā)表于 2019-1-12 21:30
感謝這么重要的學(xué)習(xí)資料,不過是不是用ch9121的方案更方便呢

剛才看了一下CH9121,感覺比W5500簡單,準(zhǔn)備試試CH9121
回復(fù)

使用道具 舉報(bào)

24#
ID:1086732 發(fā)表于 2023-7-1 08:54 | 只看該作者
太好了。剛才看了一下CH9121,感覺比W5500簡單,準(zhǔn)備試試CH9121
回復(fù)

使用道具 舉報(bào)

25#
ID:1085441 發(fā)表于 2023-7-2 01:48 | 只看該作者
如果不需要多個(gè)socket,可以用CH9120,更簡單一些,價(jià)格也便宜一些。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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