udp.lst
来自「CP2201和51单片机实现ARP ICMP IP UDP协议」· LST 代码 · 共 90 行
LST
90 行
C51 COMPILER V7.06 UDP 12/04/2007 13:46:19 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE UDP
OBJECT MODULE PLACED IN udp.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE udp.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include "ne2000.h"
2 #include "ip.h"
3 #include "netcomm.h"
4 #include <stdio.h>
5
6 extern union NetNode xdata myNode;
7 extern union ip_address_type xdata pc_ip_addr;
8 void udp_send(INT8U xdata *inbuf,union ip_address_type sender_ipaddr,INT16U source_port,INT16U dest_port,
-INT16U len)
9 {
10 1 udp_head xdata *udp;
11 1 ip_head xdata *ip;
12 1 INT16U idata i;
13 1 INT32U idata sum;
14 1 INT16U idata result;
15 1 INT8U xdata outbuf[342];
16 1 if(len>300)
17 1 return;
18 1 for(i=42;i<len+42;i++)
19 1 outbuf[i]=*inbuf++;
20 1 ip=(ip_head xdata *)(outbuf+14);
21 1 udp=(udp_head xdata *)(outbuf+34); //将数据放入UDP数据区
22 1 udp->destport =dest_port; //sender_udpport; //
23 1 udp->sourceport = source_port; //
24 1 udp->length=8+len; //
25 1 udp->crc=0; //
26 1 for(i=0;i<4;i++) //
27 1 {
28 2 ip->sourceip[i]=myNode.nodebytes.ipbytes[i];
29 2 ip->destip[i]=sender_ipaddr.bytes[i];
30 2 }
31 1 sum = (INT32U)chksum((outbuf+26), udp->length+8);
32 1 sum += (INT32U)0x0011;
33 1 sum += (INT32U)udp->length;
34 1 result = (INT16U)(sum + (sum >> 16));
35 1 udp->crc=~result;
36 1 ip_send(outbuf,sender_ipaddr,17,udp->length );
37 1
38 1 }
39 void udp_rcve(INT8U xdata *inbuf,INT16U len)
40 {
41 1 INT8U i;
42 1 udp_head xdata *udp;
43 1 ip_head xdata *ip;
44 1 INT32U idata sum;
45 1 INT16U idata result;
46 1 udp=(udp_head xdata *)(inbuf+34);
47 1 ip=(ip_head xdata *)(inbuf+14);
48 1 sum = (INT32U)chksum(inbuf+26, 8+len);
49 1 sum += (INT32U)0x0011;
50 1 sum += (INT32U)udp->length;
51 1 result = (INT16U)(sum + (sum >> 16));
52 1 if(result==0xffff)
53 1 {
54 2
C51 COMPILER V7.06 UDP 12/04/2007 13:46:19 PAGE 2
55 2 for(i=42;i<len+34;i++)
56 2 printf ("%.2x", (unsigned int)inbuf[i]);
57 2 udp_send(&inbuf[42],pc_ip_addr, 0x05dc, 1500,len-8);
58 2
59 2 }
60 1 else return;
61 1 }
62
63
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 713 ----
CONSTANT SIZE = 5 ----
XDATA SIZE = ---- 342
PDATA SIZE = ---- ----
DATA SIZE = ---- 23
IDATA SIZE = ---- 14
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?