📄 udp.lis
字号:
016C 30900100 lds R3,_udpdatalen+1
0170 A214 cp R10,R2
0172 B304 cpc R11,R3
0174 50F3 brlo L15
0176 .dbline 54
0176 ; {
0176 ; udpbuffer_ex[i]=*(udpbegin+8+i);
0176 ; }
0176 ; udp_ok=1;
0176 41E0 ldi R20,1
0178 .dbline 55
0178 ; break;
0178 04C0 xjmp L4
017A L19:
017A .dbline 58
017A ;
017A ; case localport_udp_port02: //端口2
017A ; led_cont(*(udpbegin+8));
017A FB01 movw R30,R22
017C 0085 ldd R16,z+8
017E 0E940000 xcall _led_cont
0182 .dbline 59
0182 ; break;
0182 .dbline 63
0182 ;
0182 ; case localport_udp_port03: //端口3
0182 ;
0182 ; break;
0182 L3:
0182 L4:
0182 .dbline 66
0182 ; }
0182 ;
0182 ; return udp_ok;
0182 042F mov R16,R20
0184 .dbline -2
0184 L2:
0184 0E940000 xcall pop_gset4
0188 .dbline 0 ; func end
0188 0895 ret
018A .dbsym r udp_ok 20 c
018A .dbsym r des_port 12 i
018A .dbsym r i 10 i
018A .dbsym r udplen 10 i
018A .dbsym r udpbegin 22 pc
018A .dbend
018A .dbfunc e udp_readdata _udp_readdata fi
018A ; data -> R16,R17
.even
018A _udp_readdata::
018A .dbline -1
018A .dbline 70
018A ; }
018A ;
018A ; unsigned int udp_readdata(void)
018A ; {
018A .dbline 71
018A ; unsigned int data=0;
018A 0027 clr R16
018C 1127 clr R17
018E .dbline 73
018E ;
018E ; if(udpbuffer_in_p==udpbuffer_in_rp){return 0;} //没有新数据则返回0
018E 20900000 lds R2,_udpbuffer_in_rp
0192 30900100 lds R3,_udpbuffer_in_rp+1
0196 40900000 lds R4,_udpbuffer_in_p
019A 50900100 lds R5,_udpbuffer_in_p+1
019E 4214 cp R4,R2
01A0 5304 cpc R5,R3
01A2 09F4 brne L22
01A4 .dbline 73
01A4 .dbline 73
01A4 1FC0 xjmp L21
01A6 L22:
01A6 .dbline 74
01A6 ; data=(udpbuffer_in[udpbuffer_in_rp]&0xFF);
01A6 80E0 ldi R24,<_udpbuffer_in
01A8 90E0 ldi R25,>_udpbuffer_in
01AA E0910000 lds R30,_udpbuffer_in_rp
01AE F0910100 lds R31,_udpbuffer_in_rp+1
01B2 E80F add R30,R24
01B4 F91F adc R31,R25
01B6 0081 ldd R16,z+0
01B8 1127 clr R17
01BA 1070 andi R17,0
01BC .dbline 75
01BC ; data|=0x8000; //有新数据则置位最高位作为标记
01BC 1068 ori R17,128
01BE .dbline 76
01BE ; udpbuffer_in_rp++;
01BE 80910000 lds R24,_udpbuffer_in_rp
01C2 90910100 lds R25,_udpbuffer_in_rp+1
01C6 0196 adiw R24,1
01C8 90930100 sts _udpbuffer_in_rp+1,R25
01CC 80930000 sts _udpbuffer_in_rp,R24
01D0 .dbline 77
01D0 ; if(udpbuffer_in_rp>=1024){udpbuffer_in_rp=0;}
01D0 8030 cpi R24,0
01D2 E4E0 ldi R30,4
01D4 9E07 cpc R25,R30
01D6 30F0 brlo L24
01D8 .dbline 77
01D8 .dbline 77
01D8 2224 clr R2
01DA 3324 clr R3
01DC 30920100 sts _udpbuffer_in_rp+1,R3
01E0 20920000 sts _udpbuffer_in_rp,R2
01E4 .dbline 77
01E4 L24:
01E4 .dbline 78
01E4 ; return data;
01E4 .dbline -2
01E4 L21:
01E4 .dbline 0 ; func end
01E4 0895 ret
01E6 .dbsym r data 16 i
01E6 .dbend
01E6 .dbfunc e udp_buildpack _udp_buildpack fV
01E6 ; remoteport -> y+2
01E6 ; localport -> y+0
01E6 ; len -> R18,R19
01E6 ; udpsendbuffer -> R16,R17
.even
01E6 _udp_buildpack::
01E6 .dbline -1
01E6 .dbline 85
01E6 ; }
01E6 ;
01E6 ; void udp_buildpack(unsigned char *udpsendbuffer,
01E6 ; unsigned int len,
01E6 ; unsigned int localport,
01E6 ; unsigned int remoteport)
01E6 ; {
01E6 .dbline 86
01E6 ; *udpsendbuffer=(localport>>8); //源端口
01E6 2880 ldd R2,y+0
01E8 3980 ldd R3,y+1
01EA 232C mov R2,R3
01EC 3324 clr R3
01EE F801 movw R30,R16
01F0 2082 std z+0,R2
01F2 .dbline 87
01F2 ; *(udpsendbuffer+1)=(localport&0xFF);
01F2 8881 ldd R24,y+0
01F4 9981 ldd R25,y+1
01F6 9070 andi R25,0
01F8 8183 std z+1,R24
01FA .dbline 89
01FA ;
01FA ; *(udpsendbuffer+2)=(remoteport>>8); //目的端口
01FA 2A80 ldd R2,y+2
01FC 3B80 ldd R3,y+3
01FE 232C mov R2,R3
0200 3324 clr R3
0202 F801 movw R30,R16
0204 2282 std z+2,R2
0206 .dbline 90
0206 ; *(udpsendbuffer+3)=(remoteport&0xFF);
0206 8A81 ldd R24,y+2
0208 9B81 ldd R25,y+3
020A 9070 andi R25,0
020C F801 movw R30,R16
020E 8383 std z+3,R24
0210 .dbline 97
0210 ;
0210 ; //if(len&0x01) //如果长度为奇数字节则填充一字节
0210 ; //{
0210 ; // len++;
0210 ; // *(udpsendbuffer+8+len)=0xFF;
0210 ; //}
0210 ; *(udpsendbuffer+4)=(len>>8);
0210 1901 movw R2,R18
0212 232C mov R2,R3
0214 3324 clr R3
0216 F801 movw R30,R16
0218 2482 std z+4,R2
021A .dbline 98
021A ; *(udpsendbuffer+5)=(len&0xFF);
021A C901 movw R24,R18
021C 9070 andi R25,0
021E F801 movw R30,R16
0220 8583 std z+5,R24
0222 .dbline 100
0222 ;
0222 ; *(udpsendbuffer+6)=0x00; //不进行校验
0222 2224 clr R2
0224 F801 movw R30,R16
0226 2682 std z+6,R2
0228 .dbline 101
0228 ; *(udpsendbuffer+7)=0x00;
0228 F801 movw R30,R16
022A 2782 std z+7,R2
022C .dbline -2
022C L26:
022C .dbline 0 ; func end
022C 0895 ret
022E .dbsym l remoteport 2 i
022E .dbsym l localport 0 i
022E .dbsym r len 18 i
022E .dbsym r udpsendbuffer 16 pc
022E .dbend
022E .dbfunc e udp_builddata _udp_builddata fV
022E ; i_d -> R20,R21
022E ; i -> R22,R23
022E ; len -> R10,R11
022E ; udpsenddata -> R18,R19
022E ; udpsendbuffer -> R16,R17
.even
022E _udp_builddata::
022E 0E940000 xcall push_gset3
0232 AE80 ldd R10,y+6
0234 BF80 ldd R11,y+7
0236 .dbline -1
0236 .dbline 106
0236 ;
0236 ; }
0236 ;
0236 ; void udp_builddata(unsigned char *udpsendbuffer,unsigned char *udpsenddata,unsigned int len)
0236 ; {
0236 .dbline 107
0236 ; unsigned int i=8;
0236 68E0 ldi R22,8
0238 70E0 ldi R23,0
023A .dbline 108
023A ; unsigned int i_d=0;
023A 4427 clr R20
023C 5527 clr R21
023E .dbline 110
023E ;
023E ; len+=8;
023E C501 movw R24,R10
0240 0896 adiw R24,8
0242 5C01 movw R10,R24
0244 .dbline 111
0244 ; for(;i<len;i++)
0244 0CC0 xjmp L31
0246 L28:
0246 .dbline 112
0246 .dbline 113
0246 FA01 movw R30,R20
0248 E20F add R30,R18
024A F31F adc R31,R19
024C 2080 ldd R2,z+0
024E FB01 movw R30,R22
0250 E00F add R30,R16
0252 F11F adc R31,R17
0254 2082 std z+0,R2
0256 .dbline 114
0256 4F5F subi R20,255 ; offset = 1
0258 5F4F sbci R21,255
025A .dbline 115
025A L29:
025A .dbline 111
025A 6F5F subi R22,255 ; offset = 1
025C 7F4F sbci R23,255
025E L31:
025E .dbline 111
025E 6A15 cp R22,R10
0260 7B05 cpc R23,R11
0262 88F3 brlo L28
0264 .dbline -2
0264 L27:
0264 0E940000 xcall pop_gset3
0268 .dbline 0 ; func end
0268 0895 ret
026A .dbsym r i_d 20 i
026A .dbsym r i 22 i
026A .dbsym r len 10 i
026A .dbsym r udpsenddata 18 pc
026A .dbsym r udpsendbuffer 16 pc
026A .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -