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

📄 newmain.lis

📁 单片机MEGA128的BOOTLOADER程序。
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 034A 7BDF              xcall _RecChar
 034C 80E0              ldi R24,<_data
 034E 90E0              ldi R25,>_data
 0350 FB01              movw R30,R22
 0352 E80F              add R30,R24
 0354 F91F              adc R31,R25
 0356 0083              std z+0,R16
 0358           L86:
 0358                   .dbline 267
 0358 6F5F              subi R22,255  ; offset = 1
 035A 7F4F              sbci R23,255
 035C                   .dbline 267
 035C 6030              cpi R22,0
 035E E1E0              ldi R30,1
 0360 7E07              cpc R23,R30
 0362 9CF3              brlt L85
 0364                   .dbline 269
 0364           ;       data[i]=RecChar();                
 0364           ;         jym=RecChar();           
 0364 6EDF              xcall _RecChar
 0366 C02E              mov R12,R16
 0368                   .dbline 270
 0368           ;         jym1=0;         
 0368 AA24              clr R10
 036A                   .dbline 271
 036A 6627              clr R22
 036C 7727              clr R23
 036E           L89:
 036E                   .dbline 271
 036E 80E0              ldi R24,<_data
 0370 90E0              ldi R25,>_data
 0372 FB01              movw R30,R22
 0374 E80F              add R30,R24
 0376 F91F              adc R31,R25
 0378 2080              ldd R2,z+0
 037A A224              eor R10,R2
 037C           L90:
 037C                   .dbline 271
 037C           ;         for(i=0;i<256;i++)jym1=jym1^data[i];
 037C 6F5F              subi R22,255  ; offset = 1
 037E 7F4F              sbci R23,255
 0380                   .dbline 271
 0380 6030              cpi R22,0
 0382 E1E0              ldi R30,1
 0384 7E07              cpc R23,R30
 0386 9CF3              brlt L89
 0388                   .dbline 272
 0388           ;         if(jym!=jym1)
 0388 CA14              cp R12,R10
 038A 11F0              breq L93
 038C                   .dbline 273
 038C           ;         senderror();  
 038C AFDF              xcall _senderror
 038E 28C0              xjmp L94
 0390           L93:
 0390                   .dbline 274
 0390           ;         else if((lengthbak1==Senddata[3])&&(lengthbak2==Senddata[4]))sendok(); 
 0390 20901500          lds R2,_Senddata+3
 0394 30900900          lds R3,_lengthbak1
 0398 3214              cp R3,R2
 039A 41F4              brne L95
 039C 20901600          lds R2,_Senddata+4
 03A0 30900800          lds R3,_lengthbak2
 03A4 3214              cp R3,R2
 03A6 11F4              brne L95
 03A8                   .dbline 274
 03A8 8BDF              xcall _sendok
 03AA 1AC0              xjmp L96
 03AC           L95:
 03AC                   .dbline 275
 03AC           ;         else if((Senddata[1]==Senddata[3])&&(Senddata[2]==Senddata[4]))
 03AC 20901500          lds R2,_Senddata+3
 03B0 30901300          lds R3,_Senddata+1
 03B4 3214              cp R3,R2
 03B6 59F4              brne L99
 03B8 20901600          lds R2,_Senddata+4
 03BC 30901400          lds R3,_Senddata+2
 03C0 3214              cp R3,R2
 03C2 29F4              brne L99
 03C4                   .dbline 276
 03C4           ;         {
 03C4                   .dbline 277
 03C4           ;         ROK_flag=1;
 03C4 81E0              ldi R24,1
 03C6 80930100          sts _ROK_flag,R24
 03CA                   .dbline 278
 03CA           ;         flag=1;
 03CA 41E0              ldi R20,1
 03CC                   .dbline 279
 03CC           ;         }
 03CC 09C0              xjmp L100
 03CE           L99:
 03CE                   .dbline 280
 03CE           ;         else  {lengthbak1=Senddata[3];lengthbak2=Senddata[4];flag=1;}   
 03CE                   .dbline 280
 03CE 20901500          lds R2,_Senddata+3
 03D2 20920900          sts _lengthbak1,R2
 03D6                   .dbline 280
 03D6 20901600          lds R2,_Senddata+4
 03DA 20920800          sts _lengthbak2,R2
 03DE                   .dbline 280
 03DE 41E0              ldi R20,1
 03E0                   .dbline 280
 03E0           L100:
 03E0           L96:
 03E0           L94:
 03E0                   .dbline 281
 03E0           ;        }
 03E0           L80:
 03E0                   .dbline 283
 03E0           L77:
 03E0                   .dbline 283
 03E0           ;  // else senderror();
 03E0           ;   }while(flag==0); 
 03E0 4423              tst R20
 03E2 09F4              brne X4
 03E4 9CCF              xjmp L76
 03E6           X4:
 03E6                   .dbline -2
 03E6           L75:
 03E6 0E940000          xcall pop_gset4
 03EA                   .dbline 0 ; func end
 03EA 0895              ret
 03EC                   .dbsym r jym 12 c
 03EC                   .dbsym r flag 20 c
 03EC                   .dbsym r jym1 10 c
 03EC                   .dbsym r i 22 I
 03EC                   .dbend
 03EC                   .dbfunc e main _main fV
 03EC           ;       byte_num -> R10,R11
 03EC           ;       page_num -> R12,R13
 03EC           ;       BootFlag -> y+2
 03EC           ;              i -> R10
                        .even
 03EC           _main::
 03EC 2397              sbiw R28,3
 03EE                   .dbline -1
 03EE                   .dbline 287
 03EE           ; }      
 03EE           ; //主程序 
 03EE           ; void main(void)
 03EE           ;   {
 03EE                   .dbline 290
 03EE           ;     unsigned char BootFlag,i; 
 03EE           ;       int page_num,byte_num;  
 03EE           ;     Init_mag128();
 03EE 73DE              xcall _Init_mag128
 03F0                   .dbline 291
 03F0           ;       uart1_init();
 03F0 17DF              xcall _uart1_init
 03F2                   .dbline 293
 03F2           ;       //PORTD&=~(1<<7);//GSM关机
 03F2           ;       PORTD|=(1<<7);
 03F2 979A              sbi 0x12,7
 03F4                   .dbline 294
 03F4           ;       Init_SPI();     
 03F4 89DE              xcall _Init_SPI
 03F6                   .dbline 295
 03F6           ;       df_reset();
 03F6 ABDE              xcall _df_reset
 03F8                   .dbline 297
 03F8           ;       
 03F8           ;       delay_ms(1000);
 03F8 08EE              ldi R16,1000
 03FA 13E0              ldi R17,3
 03FC 8ADE              xcall _delay_ms
 03FE                   .dbline 298
 03FE           ;       EEPROM_READ(0x7ff,BootFlag);    
 03FE 81E0              ldi R24,1
 0400 90E0              ldi R25,0
 0402 9983              std y+1,R25
 0404 8883              std y+0,R24
 0406 9E01              movw R18,R28
 0408 2E5F              subi R18,254  ; offset = 2
 040A 3F4F              sbci R19,255
 040C 0FEF              ldi R16,2047
 040E 17E0              ldi R17,7
 0410 0E940000          xcall _EEPROMReadBytes
 0414                   .dbline 299
 0414           ;       delay_ms(2);
 0414 02E0              ldi R16,2
 0416 10E0              ldi R17,0
 0418 7CDE              xcall _delay_ms
 041A                   .dbline 300
 041A           ;       if(BootFlag==0)quit();
 041A 2A80              ldd R2,y+2
 041C 2220              tst R2
 041E 11F4              brne L108
 0420                   .dbline 300
 0420 52DE              xcall _quit
 0422 75C1              xjmp L109
 0424           L108:
 0424                   .dbline 301
 0424           ;       else if(BootFlag!=1)
 0424 8A81              ldd R24,y+2
 0426 8130              cpi R24,1
 0428 09F4              brne X5
 042A 55C0              xjmp L110
 042C           X5:
 042C                   .dbline 302
 042C           ;          {     
 042C                   .dbline 303
 042C           ;                for(i=0;i<12;i++)
 042C AA24              clr R10
 042E 09C0              xjmp L115
 0430           L112:
 0430                   .dbline 304
 0430 08DF              xcall _RecChar
 0432 80E0              ldi R24,<_data
 0434 90E0              ldi R25,>_data
 0436 EA2D              mov R30,R10
 0438 FF27              clr R31
 043A E80F              add R30,R24
 043C F91F              adc R31,R25
 043E 0083              std z+0,R16
 0440           L113:
 0440                   .dbline 303
 0440 A394              inc R10
 0442           L115:
 0442                   .dbline 303
 0442 8A2D              mov R24,R10
 0444 8C30              cpi R24,12
 0446 A0F3              brlo L112
 0448                   .dbline 305
 0448           ;              data[i]=RecChar();                
 0448           ;                        if((data[0]=='B')&&(data[1]=='o'))
 0448 80913000          lds R24,_data
 044C 8234              cpi R24,66
 044E 09F0              breq X6
 0450 40C0              xjmp L116
 0452           X6:
 0452 80913100          lds R24,_data+1
 0456 8F36              cpi R24,111
 0458 09F0              breq X7
 045A 3BC0              xjmp L116
 045C           X7:
 045C                   .dbline 306
 045C           ;                        {
 045C                   .dbline 307
 045C           ;                         delay_ms(200);
 045C 08EC              ldi R16,200
 045E 10E0              ldi R17,0
 0460 58DE              xcall _delay_ms
 0462                   .dbline 308
 0462           ;                         sendok();
 0462 2EDF              xcall _sendok
 0464           L119:
 0464                   .dbline 309
 0464           ;                do{ 
 0464                   .dbline 310
 0464           ;                          uart0_rx();  
 0464 59DF              xcall _uart0_rx
 0466                   .dbline 311
 0466           ;                  write_one_page();            //收到256字节写入一页Flash中 
 0466 F4DD              xcall _write_one_page
 0468                   .dbline 312
 0468           ;                  address += SPM_PAGESIZE;     //Flash页加1    
 0468 40E0              ldi R20,0
 046A 51E0              ldi R21,1
 046C 60E0              ldi R22,0
 046E 70E0              ldi R23,0
 0470 40900200          lds R4,_address+2
 0474 50900300          lds R5,_address+2+1
 0478 20900000          lds R2,_address
 047C 30900100          lds R3,_address+1
 0480 240E              add R2,R20
 0482 351E              adc R3,R21
 0484 461E              adc R4,R22
 0486 571E              adc R5,R23
 0488 30920100          sts _address+1,R3
 048C 20920000          sts _address,R2
 0490 50920300          sts _address+2+1,R5
 0494 40920200          sts _address+2,R4
 0498                   .dbline 313
 0498           ;                          sendok();
 0498 13DF              xcall _sendok
 049A                   .dbline 314
 049A           ;                          delay_ms(1);    
 049A 01E0              ldi R16,1
 049C 10E0              ldi R17,0
 049E 39DE              xcall _delay_ms
 04A0                   .dbline 315
 04A0           L120:
 04A0                   .dbline 315
 04A0           ;                          }while(ROK_flag==0);          
 04A0 20900100          lds R2,_ROK_flag
 04A4 2220              tst R2
 04A6 F1F2              breq L119
 04A8                   .dbline 316
 04A8           ;                     delay_ms(20);
 04A8 04E1              ldi R16,20
 04AA 10E0              ldi R17,0
 04AC 32DE              xcall _delay_ms
 04AE                   .dbline 317
 04AE           ;                         BootFlag=0;
 04AE 2224              clr R2
 04B0 2A82              std y+2,R2
 04B2                   .dbline 318
 04B2           ;                         EEPROM_WRITE(0x7ff,BootFlag); 
 04B2 81E0              ldi R24,1
 04B4 90E0              ldi R25,0
 04B6 9983              std y+1,R25
 04B8 8883              std y+0,R24
 04BA 9E01              movw R18,R28
 04BC 2E5F              subi R18,254  ; offset = 2
 04BE 3F4F              sbci R19,255
 04C0 0FEF              ldi R16,2047
 04C2 17E0              ldi R17,7
 04C4 0E940000          xcall _EEPROMWriteBytes
 04C8                   .dbline 319
 04C8           ;                         delay_ms(2000);
 04C8 00ED              ldi R16,2000
 04CA 17E0              ldi R17,7
 04CC 22DE              xcall _delay_ms
 04CE                   .dbline 320
 04CE           ;                         quit();
 04CE FBDD              xcall _quit
 04D0                   .dbline 321
 04D0           ;                         }
 04D0 1EC1              xjmp L111
 04D2           L116:
 04D2                   .dbline 322
 04D2           ;                       else quit();
 04D2 F9DD              xcall _quit
 04D4                   .dbline 323
 04D4           ;          }
 04D4 1CC1              xjmp L111
 04D6           L110:
 04D6                   .dbline 325
 04D6           ;       else 
 04D6           ;       {  
 04D6                   .dbline 326
 04D6           ;          page_counter_rd=3849;//128k;
 04D6 89E0              ldi R24,3849
 04D8 9FE0              ldi R25,15
 04DA 90930D00          sts _page_counter_rd+1,R25
 04DE 80930C00          sts _page_counter_rd,R24
 04E2                   .dbline 327

⌨️ 快捷键说明

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