⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 icmp.lis

📁 AVR单片机系统开发经典实例部分源程序
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 0484 E0910000          lds R30,_ICMP_Header
 0488 F0910100          lds R31,_ICMP_Header+1
 048C 8083              std z+0,R24
 048E                   .dbline 237
 048E           ;       ICMP_Header->Code = 0;                                                                                                                  //
 048E 2224              clr R2
 0490 E0910000          lds R30,_ICMP_Header
 0494 F0910100          lds R31,_ICMP_Header+1
 0498 2182              std z+1,R2
 049A                   .dbline 238
 049A           ;       ICMP_Header->ID = htons(IP_ID++);                                                                                               // use the IP ID - for now
 049A 20900000          lds R2,_IP_ID
 049E 30900100          lds R3,_IP_ID+1
 04A2 C101              movw R24,R2
 04A4 0196              adiw R24,1
 04A6 90930100          sts _IP_ID+1,R25
 04AA 80930000          sts _IP_ID,R24
 04AE 8101              movw R16,R2
 04B0 0E940000          xcall _htons
 04B4 E0910000          lds R30,_ICMP_Header
 04B8 F0910100          lds R31,_ICMP_Header+1
 04BC 1583              std z+5,R17
 04BE 0483              std z+4,R16
 04C0                   .dbline 239
 04C0           ;       ICMP_Header->SeqNum = htons(RandNum);                                                                                   // sequence number
 04C0 8601              movw R16,R12
 04C2 0E940000          xcall _htons
 04C6 E0910000          lds R30,_ICMP_Header
 04CA F0910100          lds R31,_ICMP_Header+1
 04CE 1783              std z+7,R17
 04D0 0683              std z+6,R16
 04D2                   .dbline 240
 04D2           ;       MainBufferWr_Tx += sizeof(T_ICMP_Header);                                                                               // update index
 04D2 80910000          lds R24,_MainBufferWr_Tx
 04D6 90910100          lds R25,_MainBufferWr_Tx+1
 04DA 0896              adiw R24,8
 04DC 90930100          sts _MainBufferWr_Tx+1,R25
 04E0 80930000          sts _MainBufferWr_Tx,R24
 04E4                   .dbline 243
 04E4 AA24              clr R10
 04E6 BB24              clr R11
 04E8 13C0              xjmp L60
 04EA           L57:
 04EA                   .dbline 243
 04EA 20900000          lds R2,_MainBufferWr_Tx
 04EE 30900100          lds R3,_MainBufferWr_Tx+1
 04F2 C101              movw R24,R2
 04F4 0196              adiw R24,1
 04F6 90930100          sts _MainBufferWr_Tx+1,R25
 04FA 80930000          sts _MainBufferWr_Tx,R24
 04FE 80E0              ldi R24,<_MainBuffer
 0500 90E0              ldi R25,>_MainBuffer
 0502 F101              movw R30,R2
 0504 E80F              add R30,R24
 0506 F91F              adc R31,R25
 0508 A082              std z+0,R10
 050A           L58:
 050A                   .dbline 243
 050A C501              movw R24,R10
 050C 0196              adiw R24,1
 050E 5C01              movw R10,R24
 0510           L60:
 0510                   .dbline 243
 0510           ;                                                                                                                                                                       //
 0510           ;       // add the ICMP data                                                                                                                    //
 0510           ;       for (w = 0; w < 47; w++) MainBuffer[MainBufferWr_Tx++] = (u8)w;                                 // add some data - any data
 0510 C501              movw R24,R10
 0512 8F32              cpi R24,47
 0514 E0E0              ldi R30,0
 0516 9E07              cpc R25,R30
 0518 40F3              brlo L57
 051A                   .dbline 245
 051A           ;                                                                                                                                                                       //
 051A           ;       len = MainBufferWr_Tx - len;                                                                                                    //
 051A 20900000          lds R2,_MainBufferWr_Tx
 051E 30900100          lds R3,_MainBufferWr_Tx+1
 0522 2E18              sub R2,R14
 0524 3F08              sbc R3,R15
 0526 7101              movw R14,R2
 0528                   .dbline 247
 0528           ;                                                                                                                                                                       //
 0528           ;       w2 = MainBufferWr_Tx;                                                                                                                   //
 0528 20900000          lds R2,_MainBufferWr_Tx
 052C 30900100          lds R3,_MainBufferWr_Tx+1
 0530 3B82              std y+3,R3
 0532 2A82              std y+2,R2
 0534                   .dbline 249
 0534           ;                                                                                                                                                                       //
 0534           ;       w = IP_Checksum1((char*)ICMP_Header, len);                                                                              // update the ICMP header checksum
 0534 9701              movw R18,R14
 0536 00910000          lds R16,_ICMP_Header
 053A 10910100          lds R17,_ICMP_Header+1
 053E 0E940000          xcall _IP_Checksum1
 0542 5801              movw R10,R16
 0544                   .dbline 251
 0544           ; //    if (!w) w = 0xffff;                                                                                                                             //
 0544           ;       ICMP_Header->Checksum = htons(w);                                                                                               //
 0544 0E940000          xcall _htons
 0548 E0910000          lds R30,_ICMP_Header
 054C F0910100          lds R31,_ICMP_Header+1
 0550 1383              std z+3,R17
 0552 0283              std z+2,R16
 0554                   .dbline 253
 0554           ;                                                                                                                                                                       //
 0554           ;       IP_Header->TotalLength += len;                                                                                                  // update the IP header
 0554 80910000          lds R24,_IP_Header
 0558 90910100          lds R25,_IP_Header+1
 055C 0296              adiw R24,2
 055E FC01              movw R30,R24
 0560 4080              ldd R4,z+0
 0562 5180              ldd R5,z+1
 0564 4E0C              add R4,R14
 0566 5F1C              adc R5,R15
 0568 5182              std z+1,R5
 056A 4082              std z+0,R4
 056C                   .dbline 255
 056C           ;                                                                                                                                                                       //
 056C           ;       IP_EndPacket();                                                                                                                                 //
 056C 0E940000          xcall _IP_EndPacket
 0570                   .dbline 257
 0570           ;                                                                                                                                                                       //
 0570           ;       if (!PPP_SendPacket(false)) return false;                                                                               // send it
 0570 0027              clr R16
 0572 0E940000          xcall _PPP_SendPacket
 0576 0023              tst R16
 0578 11F4              brne L61
 057A                   .dbline 257
 057A 0027              clr R16
 057C 28C0              xjmp L46
 057E           L61:
 057E                   .dbline 259
 057E           ;                                                                                                                                                                       //
 057E           ;       ICMP_Timer = 0;                                                                                                                                 // reset the timer
 057E 2224              clr R2
 0580 3324              clr R3
 0582 30920700          sts _ICMP_Timer+1,R3
 0586 20920600          sts _ICMP_Timer,R2
 058A                   .dbline 260
 058A           ;       ICMP_SeqNum = RandNum;                                                                                                                  // remember the sequence number
 058A D0920500          sts _ICMP_SeqNum+1,R13
 058E C0920400          sts _ICMP_SeqNum,R12
 0592                   .dbline 261
 0592           ;       ICMP_IP.ip32 = IP;                                                                                                                              // and the ip
 0592 FE01              movw R30,R28
 0594 2684              ldd R2,z+14
 0596 3784              ldd R3,z+15
 0598 4088              ldd R4,z+16
 059A 5188              ldd R5,z+17
 059C 30920100          sts _ICMP_IP+1,R3
 05A0 20920000          sts _ICMP_IP,R2
 05A4 50920300          sts _ICMP_IP+2+1,R5
 05A8 40920200          sts _ICMP_IP+2,R4
 05AC                   .dbline 264
 05AC           ; 
 05AC           ;       #ifdef Debug
 05AC           ;               IP_DisplayProtocol(true, (int)w2);                                                                                      //
 05AC 2A81              ldd R18,y+2
 05AE 3B81              ldd R19,y+3
 05B0 01E0              ldi R16,1
 05B2 0E940000          xcall _IP_DisplayProtocol
 05B6                   .dbline 265
 05B6           ;               IP_DisplayHeader(4, (int)w2);                                                                                           //
 05B6 2A81              ldd R18,y+2
 05B8 3B81              ldd R19,y+3
 05BA 04E0              ldi R16,4
 05BC 10E0              ldi R17,0
 05BE 0E940000          xcall _IP_DisplayHeader
 05C2                   .dbline 266
 05C2           ;               ICMP_DisplayHeader(4 + sizeof(T_IP_Header), (int)w2);                                           //
 05C2 2A81              ldd R18,y+2
 05C4 3B81              ldd R19,y+3
 05C6 08E1              ldi R16,24
 05C8 10E0              ldi R17,0
 05CA 1ADD              xcall _ICMP_DisplayHeader
 05CC                   .dbline 269
 05CC           ;       #endif
 05CC           ; 
 05CC           ;       return true;
 05CC 01E0              ldi R16,1
 05CE                   .dbline -2
 05CE           L46:
 05CE 2496              adiw R28,4
 05D0 0E940000          xcall pop_gset5
 05D4 2496              adiw R28,4
 05D6                   .dbline 0 ; func end
 05D6 0895              ret
 05D8                   .dbsym l w2 2 s
 05D8                   .dbsym r len 14 s
 05D8                   .dbsym r RandNum 12 s
 05D8                   .dbsym r w 10 s
 05D8                   .dbsym l IP 14 l
 05D8                   .dbend
 05D8                   .dbfunc e ICMP_10ms_Timer _ICMP_10ms_Timer fV
                        .even
 05D8           _ICMP_10ms_Timer::
 05D8 0E940000          xcall push_gset2
 05DC                   .dbline -1
 05DC                   .dbline 276
 05DC           ; }
 05DC           ; 
 05DC           ; // **************************************************************************
 05DC           ; // this is called from the ip module - every 10ms
 05DC           ; 
 05DC           ; void ICMP_10ms_Timer(void)
 05DC           ; {
 05DC                   .dbline 277
 05DC           ;       if (ICMP_Timer < 5000)                                                                          //
 05DC 80910600          lds R24,_ICMP_Timer
 05E0 90910700          lds R25,_ICMP_Timer+1
 05E4 8838              cpi R24,136
 05E6 E3E1              ldi R30,19
 05E8 9E07              cpc R25,R30
 05EA 50F4              brsh L64
 05EC                   .dbline 278
 05EC           ;               ICMP_Timer += 10;                                                                               // update the timer
 05EC 80910600          lds R24,_ICMP_Timer
 05F0 90910700          lds R25,_ICMP_Timer+1
 05F4 0A96              adiw R24,10
 05F6 90930700          sts _ICMP_Timer+1,R25
 05FA 80930600          sts _ICMP_Timer,R24
 05FE 12C0              xjmp L65
 0600           L64:
 0600                   .dbline 280
 0600                   .dbline 281
 0600 2224              clr R2
 0602 3324              clr R3
 0604 30920500          sts _ICMP_SeqNum+1,R3
 0608 20920400          sts _ICMP_SeqNum,R2
 060C                   .dbline 282
 060C 40E0              ldi R20,0
 060E 50E0              ldi R21,0
 0610 60E0              ldi R22,0
 0612 70E0              ldi R23,0
 0614 50930100          sts _ICMP_IP+1,R21
 0618 40930000          sts _ICMP_IP,R20
 061C 70930300          sts _ICMP_IP+2+1,R23
 0620 60930200          sts _ICMP_IP+2,R22
 0624                   .dbline 283
 0624           L65:
 0624                   .dbline -2
 0624           L63:
 0624 0E940000          xcall pop_gset2
 0628                   .dbline 0 ; func end
 0628 0895              ret
 062A                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile C:\AVR\AT-Modem__PPP__UDP__IC\icmp.c
 0000           _ICMP_IP::
 0000                   .blkb 4
 0004                   .dbunion 0 4 TIPAddr
 0004                   .dbfield 0 ip8 A[4:4]c
 0004                   .dbfield 0 ip32 l
 0004                   .dbend
 0004                   .dbsym e ICMP_IP _ICMP_IP S[TIPAddr]
 0004           _ICMP_SeqNum::
 0004                   .blkb 2
 0006                   .dbsym e ICMP_SeqNum _ICMP_SeqNum s
 0006           _ICMP_Timer::
 0006                   .blkb 2
 0008                   .dbsym e ICMP_Timer _ICMP_Timer s
                        .area data(ram, con, rel)
 0002                   .dbfile C:\AVR\AT-Modem__PPP__UDP__IC\icmp.c
 0002           L45:
 0002                   .blkb 15
                        .area idata
 0002 202020706F6E673A2025756D730A00    .byte 32,32,32,'p,'o,'n,'g,58,32,37,'u,'m,'s,10,0
                        .area data(ram, con, rel)
 0011                   .dbfile C:\AVR\AT-Modem__PPP__UDP__IC\icmp.c
 0011           L42:
 0011                   .blkb 2
                        .area idata
 0011 0A00              .byte 10,0
                        .area data(ram, con, rel)
 0013                   .dbfile C:\AVR\AT-Modem__PPP__UDP__IC\icmp.c
 0013           L26:
 0013                   .blkb 4
                        .area idata
 0013 25750A00          .byte 37,'u,10,0
                        .area data(ram, con, rel)
 0017                   .dbfile C:\AVR\AT-Modem__PPP__UDP__IC\icmp.c
 0017           L13:
 0017                   .blkb 5
                        .area idata
 0017 2530345800        .byte 37,48,52,'X,0
                        .area data(ram, con, rel)
 001C                   .dbfile C:\AVR\AT-Modem__PPP__UDP__IC\icmp.c
 001C           L4:
 001C                   .blkb 3
                        .area idata
 001C 257500            .byte 37,'u,0
                        .area data(ram, con, rel)
 001F                   .dbfile C:\AVR\AT-Modem__PPP__UDP__IC\icmp.c

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -