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

📄 avr-bootloader.lis

📁 ATMEG128在线升级程序,运行稳定可靠
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 01FE 80E0              ldi R24,<_startupString
 0200 90E0              ldi R25,>_startupString
 0202 F501              movw R30,R10
 0204 E80F              add R30,R24
 0206 F91F              adc R31,R25
 0208 2690              elpm R2,Z
 020A 2220              tst R2
 020C 71F7              brne L43
 020E           X11:
 020E                   .dbline 166
 020E           ;       TCCR0 = 0x07; //start timer
 020E 87E0              ldi R24,7
 0210 83BF              out 0x33,R24
 0212 15C0              xjmp L47
 0214           L46:
 0214                   .dbline 169
 0214           ;       //////3秒等待PC机发'd',否则退出Bootloader程序,从0x0000处执行应用程序
 0214           ;       while(1)
 0214           ;       {
 0214                   .dbline 170
 0214           ;               if(uart_getchar()=='d')break;
 0214 71DF              xcall _uart_getchar
 0216 0436              cpi R16,100
 0218 E0E0              ldi R30,0
 021A 1E07              cpc R17,R30
 021C 09F4              brne L49
 021E           X12:
 021E                   .dbline 170
 021E 20C0              xjmp L56
 0220           L49:
 0220                   .dbline 171
 0220           ;               if(TIFR&0x02)
 0220 26B6              in R2,0x36
 0222 21FE              sbrs R2,1
 0224 0CC0              rjmp L51
 0226           X13:
 0226                   .dbline 172
 0226           ;               {
 0226                   .dbline 173
 0226           ;                       if(++timercount>200) quit();    //3秒
 0226 8C2D              mov R24,R12
 0228 8F5F              subi R24,255    ; addi 1
 022A C82E              mov R12,R24
 022C 88EC              ldi R24,200
 022E 8C15              cp R24,R12
 0230 08F4              brsh L53
 0232           X14:
 0232                   .dbline 173
 0232 A6DF              xcall _quit
 0234           L53:
 0234                   .dbline 176
 0234           ;       //              if(++timercount>20) quit();             //1秒 林树亮 2007-6-25改
 0234           ; 
 0234           ;                       TCNT0 = 0x29; //set count
 0234 89E2              ldi R24,41
 0236 82BF              out 0x32,R24
 0238                   .dbline 177
 0238           ;                       TIFR=TIFR|0x02;
 0238 86B7              in R24,0x36
 023A 8260              ori R24,2
 023C 86BF              out 0x36,R24
 023E                   .dbline 178
 023E           ;               }
 023E           L51:
 023E                   .dbline 179
 023E           ;       }
 023E           L47:
 023E                   .dbline 168
 023E EACF              xjmp L46
 0240           L55:
 0240                   .dbline 183
 0240           ;   
 0240           ;  ////每秒向PC机发送一个控制字符C,等待控制字
 0240           ;  while(uart_getchar()!=XMODEM_SOH)
 0240           ;  {
 0240                   .dbline 184
 0240           ;       if(TIFR&0x02)
 0240 26B6              in R2,0x36
 0242 21FE              sbrs R2,1
 0244 0DC0              rjmp L58
 0246           X15:
 0246                   .dbline 185
 0246           ;       {
 0246                   .dbline 186
 0246           ;               if(++timercount>67)
 0246 8C2D              mov R24,R12
 0248 8F5F              subi R24,255    ; addi 1
 024A E82E              mov R14,R24
 024C C82E              mov R12,R24
 024E 83E4              ldi R24,67
 0250 8C15              cp R24,R12
 0252 18F4              brsh L60
 0254           X16:
 0254                   .dbline 187
 0254           ;               {
 0254                   .dbline 188
 0254           ;                       uart_putchar(XMODEM_RECIEVING_WAIT_CHAR);
 0254 03E4              ldi R16,67
 0256 4CDF              xcall _uart_putchar
 0258                   .dbline 189
 0258           ;                       timercount=0;
 0258 CC24              clr R12
 025A                   .dbline 190
 025A           ;               }
 025A           L60:
 025A                   .dbline 191
 025A           ;               TIFR=TIFR|0x02;
 025A 86B7              in R24,0x36
 025C 8260              ori R24,2
 025E 86BF              out 0x36,R24
 0260                   .dbline 192
 0260           ;       }
 0260           L58:
 0260                   .dbline 193
 0260           ;  }
 0260           L56:
 0260                   .dbline 182
 0260 4BDF              xcall _uart_getchar
 0262 7801              movw R14,R16
 0264 0130              cpi R16,1
 0266 E0E0              ldi R30,0
 0268 1E07              cpc R17,R30
 026A 51F7              brne L55
 026C           X17:
 026C           L62:
 026C                   .dbline 196
 026C           ;  //////开始接收数据块
 026C           ;  do
 026C           ;  {
 026C                   .dbline 197
 026C           ;       if((packNO==uart_waitchar())&&(packNO==(~uart_waitchar())))     
 026C 54DF              xcall _uart_waitchar
 026E C02E              mov R12,R16
 0270 6017              cp R22,R16
 0272 09F0              breq X25
 0274 5AC0              xjmp L65
 0276           X25:
 0276           X18:
 0276 4FDF              xcall _uart_waitchar
 0278 C02E              mov R12,R16
 027A 2C2C              mov R2,R12
 027C 2094              com R2
 027E 6215              cp R22,R2
 0280 09F0              breq X26
 0282 53C0              xjmp L65
 0284           X26:
 0284           X19:
 0284                   .dbline 198
 0284           ;       {
 0284                   .dbline 199
 0284           ;               for(i=0;i<128;i++)
 0284 AA24              clr R10
 0286 BB24              clr R11
 0288           L67:
 0288                   .dbline 200
 0288           ;               {
 0288                   .dbline 201
 0288           ;                       data[bufferPoint]=uart_waitchar();
 0288 46DF              xcall _uart_waitchar
 028A C02E              mov R12,R16
 028C 80E0              ldi R24,<_data
 028E 90E0              ldi R25,>_data
 0290 FA01              movw R30,R20
 0292 E80F              add R30,R24
 0294 F91F              adc R31,R25
 0296 C082              std z+0,R12
 0298                   .dbline 202
 0298           ;                       bufferPoint++;
 0298 4F5F              subi R20,255  ; offset = 1
 029A 5F4F              sbci R21,255
 029C                   .dbline 203
 029C           ;               }
 029C           L68:
 029C                   .dbline 199
 029C C501              movw R24,R10
 029E 0196              adiw R24,1
 02A0 5C01              movw R10,R24
 02A2                   .dbline 199
 02A2 8038              cpi R24,128
 02A4 E0E0              ldi R30,0
 02A6 9E07              cpc R25,R30
 02A8 7CF3              brlt L67
 02AA           X20:
 02AA                   .dbline 204
 02AA           ;               crc=uart_waitchar()<<8; //修改处
 02AA 35DF              xcall _uart_waitchar
 02AC A02E              mov R10,R16
 02AE 2A2C              mov R2,R10
 02B0 3324              clr R3
 02B2 322C              mov R3,R2
 02B4 2224              clr R2
 02B6 5101              movw R10,R2
 02B8                   .dbline 205
 02B8           ;               crc+=uart_waitchar();  //修改处
 02B8 2EDF              xcall _uart_waitchar
 02BA C02E              mov R12,R16
 02BC 2C2C              mov R2,R12
 02BE 3324              clr R3
 02C0 A20C              add R10,R2
 02C2 B31C              adc R11,R3
 02C4                   .dbline 206
 02C4           ;               if(calcrc(&data[bufferPoint-128],128)==crc)
 02C4 20E8              ldi R18,128
 02C6 30E0              ldi R19,0
 02C8 80E0              ldi R24,<_data-128
 02CA 90E0              ldi R25,>_data-128
 02CC 8A01              movw R16,R20
 02CE 080F              add R16,R24
 02D0 191F              adc R17,R25
 02D2 2CDF              xcall _calcrc
 02D4 6801              movw R12,R16
 02D6 0A15              cp R16,R10
 02D8 1B05              cpc R17,R11
 02DA 21F5              brne L71
 02DC           X21:
 02DC                   .dbline 207
 02DC           ;               {
 02DC 1BC0              xjmp L75
 02DE           L74:
 02DE                   .dbline 209
 02DE           ;                       while(bufferPoint>=SPM_PAGESIZE)
 02DE           ;                       {
 02DE                   .dbline 210
 02DE           ;                               write_one_page();
 02DE CEDE              xcall _write_one_page
 02E0                   .dbline 211
 02E0           ;                               address+=SPM_PAGESIZE;
 02E0 80E0              ldi R24,0
 02E2 91E0              ldi R25,1
 02E4 A0E0              ldi R26,0
 02E6 B0E0              ldi R27,0
 02E8 40900200          lds R4,_address+2
 02EC 50900300          lds R5,_address+2+1
 02F0 20900000          lds R2,_address
 02F4 30900100          lds R3,_address+1
 02F8 280E              add R2,R24
 02FA 391E              adc R3,R25
 02FC 4A1E              adc R4,R26
 02FE 5B1E              adc R5,R27
 0300 30920100          sts _address+1,R3
 0304 20920000          sts _address,R2
 0308 50920300          sts _address+2+1,R5
 030C 40920200          sts _address+2,R4
 0310                   .dbline 212
 0310           ;                               bufferPoint=0;
 0310 4427              clr R20
 0312 5527              clr R21
 0314                   .dbline 213
 0314           ;                       } 
 0314           L75:
 0314                   .dbline 208
 0314 4030              cpi R20,0
 0316 E1E0              ldi R30,1
 0318 5E07              cpc R21,R30
 031A 0CF7              brge L74
 031C           X22:
 031C                   .dbline 214
 031C           ;                       uart_putchar(XMODEM_ACK);
 031C 06E0              ldi R16,6
 031E E8DE              xcall _uart_putchar
 0320                   .dbline 215
 0320           ;                       packNO++;
 0320 6395              inc R22
 0322                   .dbline 216
 0322           ;               }
 0322 05C0              xjmp L66
 0324           L71:
 0324                   .dbline 218
 0324           ;               else
 0324           ;               {
 0324                   .dbline 219
 0324           ;                       uart_putchar(XMODEM_NAK);
 0324 05E1              ldi R16,21
 0326 E4DE              xcall _uart_putchar
 0328                   .dbline 220
 0328           ;               }
 0328                   .dbline 221
 0328           ;       }
 0328 02C0              xjmp L66
 032A           L65:
 032A                   .dbline 223
 032A           ;       else
 032A           ;       {
 032A                   .dbline 224
 032A           ;               uart_putchar(XMODEM_NAK);
 032A 05E1              ldi R16,21
 032C E1DE              xcall _uart_putchar
 032E                   .dbline 225
 032E           ;       }
 032E           L66:
 032E                   .dbline 226
 032E           ;  }
 032E           L63:
 032E                   .dbline 227
 032E           ;  while(uart_waitchar()!=XMODEM_EOT);
 032E F3DE              xcall _uart_waitchar
 0330 A02E              mov R10,R16
 0332 0430              cpi R16,4
 0334 09F0              breq X27
 0336 9ACF              xjmp L62
 0338           X27:
 0338           X23:
 0338                   .dbline 228
 0338           ;  uart_putchar(XMODEM_ACK);
 0338 06E0              ldi R16,6
 033A DADE              xcall _uart_putchar
 033C                   .dbline 229
 033C           ;  if(bufferPoint)
 033C 4030              cpi R20,0
 033E 4507              cpc R20,R21
 0340 09F0              breq L77
 0342           X24:
 0342                   .dbline 230
 0342           ;        write_one_page();
 0342 9CDE              xcall _write_one_page
 0344           L77:
 0344                   .dbline 231
 0344           ;  quit();
 0344 1DDF              xcall _quit
 0346                   .dbline -2
 0346           L42:
 0346                   .dbline 0 ; func end
 0346 0895              ret
 0348                   .dbsym r timercount 12 c
 0348                   .dbsym r crc 10 i
 0348                   .dbsym r packNO 22 c
 0348                   .dbsym r i 10 I
 0348                   .dbsym r bufferPoint 20 I
 0348                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile E:\项目\程序\Bootloader程序\AVR-Bootloader\AVR-Bootloader.c
 0000           _data::
 0000                   .blkb 256
 0100                   .dbsym e data _data A[256:256]c
 0100           ; 
 0100           ;  }

⌨️ 快捷键说明

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