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

📄 main.lis

📁 ATmal mega88 芯片的bootload源程序
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 0092                   .dbline 148
 0092           ;       LocalCheckSum += PageBuffer[i];
 0092 E42F              mov R30,R20
 0094 FF27              clr R31
 0096 E80F              add R30,R24
 0098 F91F              adc R31,R25
 009A 2080              ldd R2,z+0
 009C A20C              add R10,R2
 009E                   .dbline 149
 009E           ;       }
 009E           L15:
 009E                   .dbline 145
 009E 4395              inc R20
 00A0           L17:
 00A0                   .dbline 145
 00A0 4038              cpi R20,128
 00A2 70F3              brlo L14
 00A4           X5:
 00A4                   .dbline 151
 00A4           ;                  
 00A4           ;     CheckSum = RecChar(); 
 00A4 6AD0              xcall _RecChar
 00A6 E02E              mov R14,R16
 00A8 CE2C              mov R12,R14
 00AA                   .dbline 152
 00AA           ;     if (LocalCheckSum == CheckSum) return 1;
 00AA A016              cp R10,R16
 00AC 11F4              brne L18
 00AE           X6:
 00AE                   .dbline 152
 00AE 01E0              ldi R16,1
 00B0 01C0              xjmp L11
 00B2           L18:
 00B2                   .dbline 153
 00B2           ;     else return 0;
 00B2 0027              clr R16
 00B4                   .dbline -2
 00B4           L11:
 00B4                   .dbline 0 ; func end
 00B4 0C940000          xjmp pop_xgset30FC
 00B8                   .dbsym r AddL 20 c
 00B8                   .dbsym r AddH 14 c
 00B8                   .dbsym r CheckSum 12 c
 00B8                   .dbsym r LocalCheckSum 10 c
 00B8                   .dbsym r i 20 c
 00B8                   .dbend
 00B8                   .dbfunc e WriteFlash _WriteFlash fV
 00B8           ;        TempInt -> R10,R11
 00B8           ;              i -> R20,R21
                        .even
 00B8           _WriteFlash::
 00B8 0E940000          xcall push_xgset300C
 00BC                   .dbline -1
 00BC                   .dbline 158
 00BC           ;   }
 00BC           ; 
 00BC           ; /*****************************************************************************/
 00BC           ; void WriteFlash(void)
 00BC           ;   {
 00BC                   .dbline 162
 00BC           ;     unsigned int i;
 00BC           ;     unsigned int TempInt;
 00BC           ; 
 00BC           ;     for (i=0;i<PageByte;i+=2)
 00BC 4427              clr R20
 00BE 5527              clr R21
 00C0 17C0              xjmp L24
 00C2           L21:
 00C2                   .dbline 163
 00C2           ;       {
 00C2                   .dbline 164
 00C2           ;       TempInt=PageBuffer[i]+(PageBuffer[i+1]<<8);
 00C2 80E0              ldi R24,<_PageBuffer
 00C4 90E0              ldi R25,>_PageBuffer
 00C6 FA01              movw R30,R20
 00C8 3196              adiw R30,1
 00CA E80F              add R30,R24
 00CC F91F              adc R31,R25
 00CE 2080              ldd R2,z+0
 00D0 3324              clr R3
 00D2 322C              mov R3,R2
 00D4 2224              clr R2
 00D6 FA01              movw R30,R20
 00D8 E80F              add R30,R24
 00DA F91F              adc R31,R25
 00DC A080              ldd R10,z+0
 00DE BB24              clr R11
 00E0 A20C              add R10,R2
 00E2 B31C              adc R11,R3
 00E4                   .dbline 165
 00E4           ;       fill_temp_buffer(TempInt,i);    //call asm routine.
 00E4 9A01              movw R18,R20
 00E6 8501              movw R16,R10
 00E8 0E940000          xcall _fill_temp_buffer
 00EC                   .dbline 166
 00EC           ;       }
 00EC           L22:
 00EC                   .dbline 162
 00EC 4E5F              subi R20,254  ; offset = 2
 00EE 5F4F              sbci R21,255
 00F0           L24:
 00F0                   .dbline 162
 00F0 4038              cpi R20,128
 00F2 E0E0              ldi R30,0
 00F4 5E07              cpc R21,R30
 00F6 28F3              brlo L21
 00F8           X7:
 00F8                   .dbline 168
 00F8           ;       
 00F8           ;     write_page(PageAddress,0x03);       //擦除页
 00F8 23E0              ldi R18,3
 00FA 00910000          lds R16,_PageAddress
 00FE 10910100          lds R17,_PageAddress+1
 0102 0E940000          xcall _write_page
 0106                   .dbline 169
 0106           ;     write_page(PageAddress,0x05);       //写页数据
 0106 25E0              ldi R18,5
 0108 00910000          lds R16,_PageAddress
 010C 10910100          lds R17,_PageAddress+1
 0110 0E940000          xcall _write_page
 0114                   .dbline 171
 0114           ;    
 0114           ;     enableRWW();
 0114 0E940000          xcall _enableRWW
 0118                   .dbline -2
 0118           L20:
 0118                   .dbline 0 ; func end
 0118 0C940000          xjmp pop_xgset300C
 011C                   .dbsym r TempInt 10 i
 011C                   .dbsym r i 20 i
 011C                   .dbend
 011C                   .dbfunc e CheckFlash _CheckFlash fc
 011C           ;       TempInt2 -> R12,R13
 011C           ;        TempInt -> R10,R11
 011C           ;              i -> R20
                        .even
 011C           _CheckFlash::
 011C 0E940000          xcall push_xgset303C
 0120                   .dbline -1
 0120                   .dbline 177
 0120           ;   }
 0120           ; 
 0120           ; /*****************************************************************************/
 0120           ; 
 0120           ; char CheckFlash(void)
 0120           ;   {
 0120                   .dbline 182
 0120           ;     unsigned char i;                                                  
 0120           ;     unsigned int TempInt;
 0120           ;     unsigned int TempInt2;
 0120           ; 
 0120           ;     for (i=0;i<PageByte;i+=2)
 0120 4427              clr R20
 0122 26C0              xjmp L29
 0124           L26:
 0124                   .dbline 183
 0124           ;       {
 0124                   .dbline 184
 0124           ;       TempInt = read_program_memory(PageAddress + i,0x00);
 0124 2227              clr R18
 0126 242E              mov R2,R20
 0128 3324              clr R3
 012A 00910000          lds R16,_PageAddress
 012E 10910100          lds R17,_PageAddress+1
 0132 020D              add R16,R2
 0134 131D              adc R17,R3
 0136 0E940000          xcall _read_program_memory
 013A 5801              movw R10,R16
 013C                   .dbline 185
 013C           ;       TempInt2 = PageBuffer[i] +(PageBuffer[i+1]<<8);
 013C 80E0              ldi R24,<_PageBuffer+1
 013E 90E0              ldi R25,>_PageBuffer+1
 0140 E42F              mov R30,R20
 0142 FF27              clr R31
 0144 E80F              add R30,R24
 0146 F91F              adc R31,R25
 0148 2080              ldd R2,z+0
 014A 3324              clr R3
 014C 322C              mov R3,R2
 014E 2224              clr R2
 0150 80E0              ldi R24,<_PageBuffer
 0152 90E0              ldi R25,>_PageBuffer
 0154 E42F              mov R30,R20
 0156 FF27              clr R31
 0158 E80F              add R30,R24
 015A F91F              adc R31,R25
 015C C080              ldd R12,z+0
 015E DD24              clr R13
 0160 C20C              add R12,R2
 0162 D31C              adc R13,R3
 0164                   .dbline 186
 0164           ;       if (TempInt != TempInt2) return 0;
 0164 0C15              cp R16,R12
 0166 1D05              cpc R17,R13
 0168 11F0              breq L31
 016A           X8:
 016A                   .dbline 186
 016A 0027              clr R16
 016C 04C0              xjmp L25
 016E           L31:
 016E                   .dbline 187
 016E           ;       }
 016E           L27:
 016E                   .dbline 182
 016E 4E5F              subi R20,254    ; addi 2
 0170           L29:
 0170                   .dbline 182
 0170 4038              cpi R20,128
 0172 C0F2              brlo L26
 0174           X9:
 0174                   .dbline 188
 0174           ;     return 1;
 0174 01E0              ldi R16,1
 0176                   .dbline -2
 0176           L25:
 0176                   .dbline 0 ; func end
 0176 0C940000          xjmp pop_xgset303C
 017A                   .dbsym r TempInt2 12 i
 017A                   .dbsym r TempInt 10 i
 017A                   .dbsym r i 20 c
 017A                   .dbend
 017A                   .dbfunc e RecChar _RecChar fc
                        .even
 017A           _RecChar::
 017A                   .dbline -1
 017A                   .dbline 194
 017A           ;   }
 017A           ; 
 017A           ; /*****************************************************************************/
 017A           ; /*            字符输入函数             */     
 017A           ; unsigned char RecChar(void)
 017A           ;   {
 017A           L34:
 017A                   .dbline 195
 017A           ;      while(!(UCSR0A & 0x80));
 017A           L35:
 017A                   .dbline 195
 017A 2090C000          lds R2,192
 017E 27FE              sbrs R2,7
 0180 FCCF              rjmp L34
 0182           X10:
 0182                   .dbline 196
 0182           ;      return UDR0;
 0182 0091C600          lds R16,198
 0186                   .dbline -2
 0186           L33:
 0186                   .dbline 0 ; func end
 0186 0895              ret
 0188                   .dbend
 0188                   .dbfunc e SendChar _SendChar fV
 0188           ;              c -> R16
                        .even
 0188           _SendChar::
 0188                   .dbline -1
 0188                   .dbline 200
 0188           ;   }           
 0188           ; /*****************************************************************************/
 0188           ; void SendChar(unsigned char c)
 0188           ;   {    
 0188           L38:
 0188                   .dbline 201
 0188           ;     while (!(UCSR0A&(1<<UDRE0)));
 0188           L39:
 0188                   .dbline 201
 0188 2090C000          lds R2,192
 018C 25FE              sbrs R2,5
 018E FCCF              rjmp L38
 0190           X11:
 0190                   .dbline 202
 0190           ;     UDR0=c;
 0190 0093C600          sts 198,R16
 0194                   .dbline -2
 0194           L37:
 0194                   .dbline 0 ; func end

⌨️ 快捷键说明

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