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

📄 ntp.lis

📁 AVR单片机系统开发经典实例部分源程序
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 00AC 09F4              brne L5
 00AE           X0:
 00AE                   .dbline 92
 00AE 1EC1              xjmp L4
 00B0           L5:
 00B0                   .dbline 94
 00B0           ;                                                                                                       //
 00B0           ;       NTP->Xmit1 = ntohl(NTP->Xmit1);                                 //
 00B0 C501              movw R24,R10
 00B2 8896              adiw R24,40
 00B4 FC01              movw R30,R24
 00B6 0081              ldd R16,z+0
 00B8 1181              ldd R17,z+1
 00BA 2281              ldd R18,z+2
 00BC 3381              ldd R19,z+3
 00BE 8F93              push R24
 00C0 9F93              push R25
 00C2 0E940000          xcall _ntohl
 00C6 FF91              pop R31
 00C8 EF91              pop R30
 00CA 0083              std z+0,R16
 00CC 1183              std z+1,R17
 00CE 2283              std z+2,R18
 00D0 3383              std z+3,R19
 00D2                   .dbline 95
 00D2           ;       NTP->Xmit2 = ntohl(NTP->Xmit2);                                 //
 00D2 C501              movw R24,R10
 00D4 8C96              adiw R24,44
 00D6 FC01              movw R30,R24
 00D8 0081              ldd R16,z+0
 00DA 1181              ldd R17,z+1
 00DC 2281              ldd R18,z+2
 00DE 3381              ldd R19,z+3
 00E0 8F93              push R24
 00E2 9F93              push R25
 00E4 0E940000          xcall _ntohl
 00E8 FF91              pop R31
 00EA EF91              pop R30
 00EC 0083              std z+0,R16
 00EE 1183              std z+1,R17
 00F0 2283              std z+2,R18
 00F2 3383              std z+3,R19
 00F4                   .dbline 98
 00F4           ;                                                                                                       //
 00F4           ;       #ifdef Debug
 00F4           ;               sprintf((char*)ScratchPad, "\nXmit1:%lu\nXmit2:%lu\n", NTP->Xmit1, NTP->Xmit2);
 00F4 F501              movw R30,R10
 00F6 24A4              ldd R2,z+44
 00F8 35A4              ldd R3,z+45
 00FA 46A4              ldd R4,z+46
 00FC 57A4              ldd R5,z+47
 00FE 2C82              std y+4,R2
 0100 3D82              std y+5,R3
 0102 4E82              std y+6,R4
 0104 5F82              std y+7,R5
 0106 F501              movw R30,R10
 0108 20A4              ldd R2,z+40
 010A 31A4              ldd R3,z+41
 010C 42A4              ldd R4,z+42
 010E 53A4              ldd R5,z+43
 0110 2882              std y+0,R2
 0112 3982              std y+1,R3
 0114 4A82              std y+2,R4
 0116 5B82              std y+3,R5
 0118 20E0              ldi R18,<L7
 011A 30E0              ldi R19,>L7
 011C 00E0              ldi R16,<_ScratchPad
 011E 10E0              ldi R17,>_ScratchPad
 0120 0E940000          xcall _sprintf
 0124                   .dbline 99
 0124           ;               SendDebugStr((char*)ScratchPad);
 0124 00E0              ldi R16,<_ScratchPad
 0126 10E0              ldi R17,>_ScratchPad
 0128 0E940000          xcall _SendDebugStr
 012C                   .dbline 110
 012C           ;       #endif
 012C           ; 
 012C           ; //    Nsec = (double)NTP->Xmit1;                                              // MS-Byte 1st ... shit ... the zilog s32 to double is inaccurate :( .. unless it's the sprintf function that is bad
 012C           ; //    Nfrac = (double)NTP->Xmit2;                                             // as above
 012C           ; //    Nfrac /= 4294967295.0;                                                  //
 012C           ; //    FNTPTime = Nsec;                                                                //
 012C           ; //    FNTPTime += Nfrac;                                                              //
 012C           ; //    FNTPTime /= SecsPerDay;                                                 //
 012C           ; //    FNTPTime += 2;                                                                  // add 2 days
 012C           ;                                                                                                       //
 012C           ;       lag = u16_Get(&NTP_Timer);                                              // how long it took to get the reply back (ms)
 012C 00E0              ldi R16,<_NTP_Timer
 012E 10E0              ldi R17,>_NTP_Timer
 0130 0E940000          xcall _u16_Get
 0134 1D87              std y+13,R17
 0136 0C87              std y+12,R16
 0138                   .dbline 111
 0138           ;       lag >>= 1;                                                                              //
 0138 1801              movw R2,R16
 013A 3694              lsr R3
 013C 2794              ror R2
 013E 3D86              std y+13,R3
 0140 2C86              std y+12,R2
 0142                   .dbline 112
 0142           ;       dw = (u32)(lag / 1000);                                                 // now in seconds
 0142 28EE              ldi R18,1000
 0144 33E0              ldi R19,3
 0146 8101              movw R16,R2
 0148 0E940000          xcall div16u
 014C 1801              movw R2,R16
 014E 4424              clr R4
 0150 5524              clr R5
 0152 FE01              movw R30,R28
 0154 2086              std z+8,R2
 0156 3186              std z+9,R3
 0158 4286              std z+10,R4
 015A 5386              std z+11,R5
 015C                   .dbline 113
 015C           ;       NTP->Xmit1 += dw;                                                               // take the network lag/response time into account
 015C C501              movw R24,R10
 015E 8896              adiw R24,40
 0160 FE01              movw R30,R28
 0162 4084              ldd R4,z+8
 0164 5184              ldd R5,z+9
 0166 6284              ldd R6,z+10
 0168 7384              ldd R7,z+11
 016A FC01              movw R30,R24
 016C 4081              ldd R20,z+0
 016E 5181              ldd R21,z+1
 0170 6281              ldd R22,z+2
 0172 7381              ldd R23,z+3
 0174 440D              add R20,R4
 0176 551D              adc R21,R5
 0178 661D              adc R22,R6
 017A 771D              adc R23,R7
 017C 4083              std z+0,R20
 017E 5183              std z+1,R21
 0180 6283              std z+2,R22
 0182 7383              std z+3,R23
 0184                   .dbline 116
 0184           ;                                                                                                       //
 0184           ;                                                                                                       // NTP->Xmit1 is the number of seconds since "1st Jan 1900 00:00:00" .. NTP->Xmit2 is the fractional part
 0184           ;       dw = NTP->Xmit1 % SecsPerDay;                                   // dw = seconds thru the current day
 0184 40E8              ldi R20,128
 0186 51E5              ldi R21,81
 0188 61E0              ldi R22,1
 018A 70E0              ldi R23,0
 018C F501              movw R30,R10
 018E 20A4              ldd R2,z+40
 0190 31A4              ldd R3,z+41
 0192 42A4              ldd R4,z+42
 0194 53A4              ldd R5,z+43
 0196 7A93              st -y,R23
 0198 6A93              st -y,R22
 019A 5A93              st -y,R21
 019C 4A93              st -y,R20
 019E 8101              movw R16,R2
 01A0 9201              movw R18,R4
 01A2 0E940000          xcall mod32u
 01A6 FE01              movw R30,R28
 01A8 0087              std z+8,R16
 01AA 1187              std z+9,R17
 01AC 2287              std z+10,R18
 01AE 3387              std z+11,R19
 01B0                   .dbline 117
 01B0           ;       NTP->Xmit1 /= SecsPerDay;                                               // now left with the number of days since "1st Jan 1900 00:00:00"
 01B0 C501              movw R24,R10
 01B2 8896              adiw R24,40
 01B4 1C01              movw R2,R24
 01B6 40E8              ldi R20,128
 01B8 51E5              ldi R21,81
 01BA 61E0              ldi R22,1
 01BC 70E0              ldi R23,0
 01BE FC01              movw R30,R24
 01C0 4080              ldd R4,z+0
 01C2 5180              ldd R5,z+1
 01C4 6280              ldd R6,z+2
 01C6 7380              ldd R7,z+3
 01C8 7A93              st -y,R23
 01CA 6A93              st -y,R22
 01CC 5A93              st -y,R21
 01CE 4A93              st -y,R20
 01D0 8201              movw R16,R4
 01D2 9301              movw R18,R6
 01D4 0E940000          xcall div32u
 01D8 F101              movw R30,R2
 01DA 0083              std z+0,R16
 01DC 1183              std z+1,R17
 01DE 2283              std z+2,R18
 01E0 3383              std z+3,R19
 01E2                   .dbline 119
 01E2           ;                                                                                                       //
 01E2           ;       sec = dw % 60;                                                                  //
 01E2 4CE3              ldi R20,60
 01E4 50E0              ldi R21,0
 01E6 60E0              ldi R22,0
 01E8 70E0              ldi R23,0
 01EA FE01              movw R30,R28
 01EC 2084              ldd R2,z+8
 01EE 3184              ldd R3,z+9
 01F0 4284              ldd R4,z+10
 01F2 5384              ldd R5,z+11
 01F4 7A93              st -y,R23
 01F6 6A93              st -y,R22
 01F8 5A93              st -y,R21
 01FA 4A93              st -y,R20
 01FC 8101              movw R16,R2
 01FE 9201              movw R18,R4
 0200 0E940000          xcall mod32u
 0204 7801              movw R14,R16
 0206                   .dbline 120
 0206           ;       dw /= 60;                                                                               //
 0206 4CE3              ldi R20,60
 0208 50E0              ldi R21,0
 020A 60E0              ldi R22,0
 020C 70E0              ldi R23,0
 020E FE01              movw R30,R28
 0210 2084              ldd R2,z+8
 0212 3184              ldd R3,z+9
 0214 4284              ldd R4,z+10
 0216 5384              ldd R5,z+11
 0218 7A93              st -y,R23
 021A 6A93              st -y,R22

⌨️ 快捷键说明

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