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

📄 main.lis

📁 Atmega系列单片机 BootLoader程序
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 00AE 80E0              ldi R24,<_PageBuffer+64
 00B0 90E0              ldi R25,>_PageBuffer+64
 00B2 EA2D              mov R30,R10
 00B4 FF27              clr R31
 00B6 E80F              add R30,R24
 00B8 F91F              adc R31,R25
 00BA 0083              std z+0,R16
 00BC                   .dbline 133
 00BC EA2D              mov R30,R10
 00BE FF27              clr R31
 00C0 E80F              add R30,R24
 00C2 F91F              adc R31,R25
 00C4 2080              ldd R2,z+0
 00C6 6225              eor R22,R2
 00C8                   .dbline 134
 00C8           L21:
 00C8                   .dbline 129
 00C8 A394              inc R10
 00CA           L23:
 00CA                   .dbline 129
 00CA 8A2D              mov R24,R10
 00CC 8034              cpi R24,64
 00CE 58F3              brlo L25
 00D0                   .dbline 135
 00D0           ;        while(!IsChar());
 00D0           ;        PageBuffer[i+PageByte/2]=RecChar();
 00D0           ;        LocalCheckSum ^= PageBuffer[i+PageByte/2];
 00D0           ;       }          
 00D0           ;     CheckSum = RecChar(); 
 00D0 75D0              xcall _RecChar
 00D2 402F              mov R20,R16
 00D4                   .dbline 137
 00D4           ;       
 00D4           ;     if (LocalCheckSum == CheckSum) 
 00D4 6017              cp R22,R16
 00D6 11F4              brne L29
 00D8                   .dbline 138
 00D8           ;         return 1;
 00D8 01E0              ldi R16,1
 00DA 01C0              xjmp L12
 00DC           L29:
 00DC                   .dbline 140
 00DC           ;     else 
 00DC           ;         return 0;
 00DC 0027              clr R16
 00DE                   .dbline -2
 00DE           L12:
 00DE 0E940000          xcall pop_gset3
 00E2                   .dbline 0 ; func end
 00E2 0895              ret
 00E4                   .dbsym r CheckSum 20 c
 00E4                   .dbsym r LocalCheckSum 22 c
 00E4                   .dbsym r i 10 c
 00E4                   .dbend
 00E4                   .dbfunc e WriteFlash _WriteFlash fV
 00E4           ;        TempInt -> R20,R21
 00E4           ;              i -> R22,R23
                        .even
 00E4           _WriteFlash::
 00E4 0E940000          xcall push_gset2
 00E8                   .dbline -1
 00E8                   .dbline 145
 00E8           ;   }
 00E8           ; 
 00E8           ; /*****************************************************************************/
 00E8           ; void WriteFlash(void)
 00E8           ;   {
 00E8                   .dbline 148
 00E8           ;     unsigned int i;
 00E8           ;     unsigned int TempInt;
 00E8           ;     for (i=0;i<PageByte;i+=2)
 00E8 6627              clr R22
 00EA 7727              clr R23
 00EC 17C0              xjmp L35
 00EE           L32:
 00EE                   .dbline 149
 00EE                   .dbline 150
 00EE 80E0              ldi R24,<_PageBuffer
 00F0 90E0              ldi R25,>_PageBuffer
 00F2 FB01              movw R30,R22
 00F4 3196              adiw R30,1
 00F6 E80F              add R30,R24
 00F8 F91F              adc R31,R25
 00FA 2080              ldd R2,z+0
 00FC 3324              clr R3
 00FE 322C              mov R3,R2
 0100 2224              clr R2
 0102 FB01              movw R30,R22
 0104 E80F              add R30,R24
 0106 F91F              adc R31,R25
 0108 4081              ldd R20,z+0
 010A 5527              clr R21
 010C 420D              add R20,R2
 010E 531D              adc R21,R3
 0110                   .dbline 151
 0110 9B01              movw R18,R22
 0112 8A01              movw R16,R20
 0114 0E940000          xcall _fill_temp_buffer
 0118                   .dbline 152
 0118           L33:
 0118                   .dbline 148
 0118 6E5F              subi R22,254  ; offset = 2
 011A 7F4F              sbci R23,255
 011C           L35:
 011C                   .dbline 148
 011C 6038              cpi R22,128
 011E E0E0              ldi R30,0
 0120 7E07              cpc R23,R30
 0122 28F3              brlo L32
 0124                   .dbline 153
 0124           ;       {
 0124           ;          TempInt=PageBuffer[i]+(PageBuffer[i+1]<<8);
 0124           ;          fill_temp_buffer(TempInt,i);    //call asm routine.
 0124           ;       } 
 0124           ;     write_page(PageAddress,0x03);       //擦除页
 0124 23E0              ldi R18,3
 0126 00910000          lds R16,_PageAddress
 012A 10910100          lds R17,_PageAddress+1
 012E 0E940000          xcall _write_page
 0132                   .dbline 154
 0132           ;     write_page(PageAddress,0x05);       //写页数据
 0132 25E0              ldi R18,5
 0134 00910000          lds R16,_PageAddress
 0138 10910100          lds R17,_PageAddress+1
 013C 0E940000          xcall _write_page
 0140                   .dbline 156
 0140           ;    
 0140           ;     enableRWW();
 0140 0E940000          xcall _enableRWW
 0144                   .dbline -2
 0144           L31:
 0144 0E940000          xcall pop_gset2
 0148                   .dbline 0 ; func end
 0148 0895              ret
 014A                   .dbsym r TempInt 20 i
 014A                   .dbsym r i 22 i
 014A                   .dbend
 014A                   .dbfunc e CheckFlash _CheckFlash fc
 014A           ;       TempInt2 -> R20,R21
 014A           ;        TempInt -> R22,R23
 014A           ;              i -> R10
                        .even
 014A           _CheckFlash::
 014A 0E940000          xcall push_gset3
 014E                   .dbline -1
 014E                   .dbline 162
 014E           ;   }
 014E           ; 
 014E           ; /*****************************************************************************/
 014E           ; 
 014E           ; char CheckFlash(void)
 014E           ;   {
 014E                   .dbline 167
 014E           ;     unsigned char i;                                                  
 014E           ;     unsigned int TempInt;
 014E           ;     unsigned int TempInt2;
 014E           ; 
 014E           ;     for (i=0;i<PageByte;i+=2)
 014E AA24              clr R10
 0150 28C0              xjmp L40
 0152           L37:
 0152                   .dbline 168
 0152           ;       {
 0152                   .dbline 169
 0152           ;          TempInt = read_program_memory(PageAddress + i,0x00);
 0152 2227              clr R18
 0154 2A2C              mov R2,R10
 0156 3324              clr R3
 0158 00910000          lds R16,_PageAddress
 015C 10910100          lds R17,_PageAddress+1
 0160 020D              add R16,R2
 0162 131D              adc R17,R3
 0164 0E940000          xcall _read_program_memory
 0168 B801              movw R22,R16
 016A                   .dbline 170
 016A           ;          TempInt2 = PageBuffer[i] +(PageBuffer[i+1]<<8);
 016A 80E0              ldi R24,<_PageBuffer+1
 016C 90E0              ldi R25,>_PageBuffer+1
 016E EA2D              mov R30,R10
 0170 FF27              clr R31
 0172 E80F              add R30,R24
 0174 F91F              adc R31,R25
 0176 2080              ldd R2,z+0
 0178 3324              clr R3
 017A 322C              mov R3,R2
 017C 2224              clr R2
 017E 80E0              ldi R24,<_PageBuffer
 0180 90E0              ldi R25,>_PageBuffer
 0182 EA2D              mov R30,R10
 0184 FF27              clr R31
 0186 E80F              add R30,R24
 0188 F91F              adc R31,R25
 018A 4081              ldd R20,z+0
 018C 5527              clr R21
 018E 420D              add R20,R2
 0190 531D              adc R21,R3
 0192                   .dbline 171
 0192           ;          if (TempInt != TempInt2)
 0192 0417              cp R16,R20
 0194 1507              cpc R17,R21
 0196 11F0              breq L42
 0198                   .dbline 172
 0198           ;            return 0;
 0198 0027              clr R16
 019A 07C0              xjmp L36
 019C           L42:
 019C                   .dbline 173
 019C           L38:
 019C                   .dbline 167
 019C 8A2D              mov R24,R10
 019E 8E5F              subi R24,254    ; addi 2
 01A0 A82E              mov R10,R24
 01A2           L40:
 01A2                   .dbline 167
 01A2 8A2D              mov R24,R10
 01A4 8038              cpi R24,128
 01A6 A8F2              brlo L37
 01A8                   .dbline 174
 01A8           ;       } 
 01A8           ;     return 1;
 01A8 01E0              ldi R16,1
 01AA                   .dbline -2
 01AA           L36:
 01AA 0E940000          xcall pop_gset3
 01AE                   .dbline 0 ; func end
 01AE 0895              ret
 01B0                   .dbsym r TempInt2 20 i
 01B0                   .dbsym r TempInt 22 i
 01B0                   .dbsym r i 10 c
 01B0                   .dbend
 01B0                   .dbfunc e IsChar _IsChar fc
                        .even
 01B0           _IsChar::
 01B0                   .dbline -1
 01B0                   .dbline 180
 01B0           ;   }
 01B0           ; /*****************************************************************************/
 01B0           ; /* Serial Port Code                                                                                                */
 01B0           ; /*****************************************************************************/
 01B0           ; unsigned char IsChar(void)
 01B0           ; {
 01B0                   .dbline 181
 01B0           ;    if(UCSRA & 0x80)
 01B0 5F9B              sbis 0xb,7
 01B2 02C0              rjmp L45
 01B4                   .dbline 182
 01B4           ;      return 1;
 01B4 01E0              ldi R16,1
 01B6 01C0              xjmp L44
 01B8           L45:
 01B8                   .dbline 184
 01B8           ;    else 
 01B8           ;      return 0;         
 01B8 0027              clr R16
 01BA                   .dbline -2
 01BA           L44:
 01BA                   .dbline 0 ; func end
 01BA 0895              ret
 01BC                   .dbend
 01BC                   .dbfunc e RecChar _RecChar fc
                        .even
 01BC           _RecChar::
 01BC                   .dbline -1
 01BC                   .dbline 189
 01BC           ; }
 01BC           ; /*****************************************************************************/
 01BC           ; /*            字符输入函数             */     
 01BC           ; unsigned char RecChar(void)
 01BC           ;   {
 01BC           L48:
 01BC                   .dbline 190
 01BC           L49:
 01BC                   .dbline 190
 01BC           ;     while(!(UCSRA & 0x80));
 01BC 5F9B              sbis 0xb,7
 01BE FECF              rjmp L48
 01C0                   .dbline 191
 01C0           ;     return UDR;
 01C0 0CB1              in R16,0xc
 01C2                   .dbline -2
 01C2           L47:
 01C2                   .dbline 0 ; func end
 01C2 0895              ret
 01C4                   .dbend
 01C4                   .dbfunc e SendChar _SendChar fV
 01C4           ;              c -> R16
                        .even
 01C4           _SendChar::
 01C4                   .dbline -1
 01C4                   .dbline 195

⌨️ 快捷键说明

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