📄 main.lis
字号:
00A2 .dbline 178
00A2 L16:
00A2 .dbline 173
00A2 A394 inc R10
00A4 L18:
00A4 .dbline 173
00A4 8A2D mov R24,R10
00A6 8038 cpi R24,128
00A8 58F3 brlo L20
00AA .dbline 179
00AA ; while(!IsChar());
00AA ; PageBuffer[i]=RecChar();
00AA ; LocalCheckSum ^= PageBuffer[i];
00AA ; }
00AA ; for (i=0;i<PageByte/2;i++)
00AA AA24 clr R10
00AC 12C0 xjmp L25
00AE X2:
00AE .dbline 180
00AE ; {
00AE L26:
00AE .dbline 181
00AE L27:
00AE .dbline 181
00AE 84D0 xcall _IsChar
00B0 0023 tst R16
00B2 E9F3 breq L26
00B4 .dbline 182
00B4 89D0 xcall _RecChar
00B6 80E0 ldi R24,<_PageBuffer+128
00B8 90E0 ldi R25,>_PageBuffer+128
00BA EA2D mov R30,R10
00BC FF27 clr R31
00BE E80F add R30,R24
00C0 F91F adc R31,R25
00C2 0083 std z+0,R16
00C4 .dbline 183
00C4 EA2D mov R30,R10
00C6 FF27 clr R31
00C8 E80F add R30,R24
00CA F91F adc R31,R25
00CC 2080 ldd R2,z+0
00CE 6225 eor R22,R2
00D0 .dbline 184
00D0 L23:
00D0 .dbline 179
00D0 A394 inc R10
00D2 L25:
00D2 .dbline 179
00D2 8A2D mov R24,R10
00D4 8038 cpi R24,128
00D6 58F3 brlo L27
00D8 .dbline 185
00D8 ; while(!IsChar());
00D8 ; PageBuffer[i+PageByte/2]=RecChar();
00D8 ; LocalCheckSum ^= PageBuffer[i+PageByte/2];
00D8 ; }
00D8 ; CheckSum = RecChar();
00D8 77D0 xcall _RecChar
00DA 402F mov R20,R16
00DC .dbline 187
00DC ;
00DC ; if (LocalCheckSum == CheckSum)
00DC 6017 cp R22,R16
00DE 11F4 brne L31
00E0 .dbline 188
00E0 ; return 1;
00E0 01E0 ldi R16,1
00E2 01C0 xjmp L14
00E4 L31:
00E4 .dbline 190
00E4 ; else
00E4 ; return 0;
00E4 0027 clr R16
00E6 .dbline -2
00E6 L14:
00E6 0E940000 xcall pop_gset3
00EA .dbline 0 ; func end
00EA 0895 ret
00EC .dbsym r CheckSum 20 c
00EC .dbsym r LocalCheckSum 22 c
00EC .dbsym r i 10 c
00EC .dbend
00EC .dbfunc e WriteFlash _WriteFlash fV
00EC ; TempInt -> R20,R21
00EC ; i -> R22,R23
.even
00EC _WriteFlash::
00EC 0E940000 xcall push_gset2
00F0 .dbline -1
00F0 .dbline 195
00F0 ; }
00F0 ;
00F0 ; /*****************************************************************************/
00F0 ; void WriteFlash(void)
00F0 ; {
00F0 .dbline 198
00F0 ; unsigned int i;
00F0 ; unsigned int TempInt;
00F0 ; for (i=0;i<PageByte;i+=2)
00F0 6627 clr R22
00F2 7727 clr R23
00F4 17C0 xjmp L37
00F6 L34:
00F6 .dbline 199
00F6 .dbline 200
00F6 80E0 ldi R24,<_PageBuffer
00F8 90E0 ldi R25,>_PageBuffer
00FA FB01 movw R30,R22
00FC 3196 adiw R30,1
00FE E80F add R30,R24
0100 F91F adc R31,R25
0102 2080 ldd R2,z+0
0104 3324 clr R3
0106 322C mov R3,R2
0108 2224 clr R2
010A FB01 movw R30,R22
010C E80F add R30,R24
010E F91F adc R31,R25
0110 4081 ldd R20,z+0
0112 5527 clr R21
0114 420D add R20,R2
0116 531D adc R21,R3
0118 .dbline 201
0118 9B01 movw R18,R22
011A 8A01 movw R16,R20
011C 0E940000 xcall _fill_temp_buffer
0120 .dbline 202
0120 L35:
0120 .dbline 198
0120 6E5F subi R22,254 ; offset = 2
0122 7F4F sbci R23,255
0124 L37:
0124 .dbline 198
0124 6030 cpi R22,0
0126 E1E0 ldi R30,1
0128 7E07 cpc R23,R30
012A 28F3 brlo L34
012C .dbline 203
012C ; {
012C ; TempInt=PageBuffer[i]+(PageBuffer[i+1]<<8);
012C ; fill_temp_buffer(TempInt,i); //call asm routine.
012C ; }
012C ; write_page(PageAddress,0x03); //擦除页
012C 23E0 ldi R18,3
012E 00910000 lds R16,_PageAddress
0132 10910100 lds R17,_PageAddress+1
0136 0E940000 xcall _write_page
013A .dbline 204
013A ; write_page(PageAddress,0x05); //写页数据
013A 25E0 ldi R18,5
013C 00910000 lds R16,_PageAddress
0140 10910100 lds R17,_PageAddress+1
0144 0E940000 xcall _write_page
0148 .dbline 206
0148 ;
0148 ; enableRWW();
0148 0E940000 xcall _enableRWW
014C .dbline -2
014C .dbline 207
014C ; }
014C L33:
014C 0E940000 xcall pop_gset2
0150 .dbline 0 ; func end
0150 0895 ret
0152 .dbsym r TempInt 20 i
0152 .dbsym r i 22 i
0152 .dbend
0152 .dbfunc e CheckFlash _CheckFlash fc
0152 ; TempInt2 -> R20,R21
0152 ; TempInt -> R22,R23
0152 ; i -> R10
.even
0152 _CheckFlash::
0152 0E940000 xcall push_gset3
0156 .dbline -1
0156 .dbline 212
0156 ;
0156 ; /*****************************************************************************/
0156 ;
0156 ; char CheckFlash(void)
0156 ; {
0156 .dbline 217
0156 ; unsigned char i;
0156 ; unsigned int TempInt;
0156 ; unsigned int TempInt2;
0156 ;
0156 ; for (i=0;i<PageByte;i+=2)
0156 AA24 clr R10
0158 28C0 xjmp L42
015A L39:
015A .dbline 218
015A ; {
015A .dbline 219
015A ; TempInt = read_program_memory(PageAddress + i,0x00);
015A 2227 clr R18
015C 2A2C mov R2,R10
015E 3324 clr R3
0160 00910000 lds R16,_PageAddress
0164 10910100 lds R17,_PageAddress+1
0168 020D add R16,R2
016A 131D adc R17,R3
016C 0E940000 xcall _read_program_memory
0170 B801 movw R22,R16
0172 .dbline 220
0172 ; TempInt2 = PageBuffer[i] +(PageBuffer[i+1]<<8);
0172 80E0 ldi R24,<_PageBuffer+1
0174 90E0 ldi R25,>_PageBuffer+1
0176 EA2D mov R30,R10
0178 FF27 clr R31
017A E80F add R30,R24
017C F91F adc R31,R25
017E 2080 ldd R2,z+0
0180 3324 clr R3
0182 322C mov R3,R2
0184 2224 clr R2
0186 80E0 ldi R24,<_PageBuffer
0188 90E0 ldi R25,>_PageBuffer
018A EA2D mov R30,R10
018C FF27 clr R31
018E E80F add R30,R24
0190 F91F adc R31,R25
0192 4081 ldd R20,z+0
0194 5527 clr R21
0196 420D add R20,R2
0198 531D adc R21,R3
019A .dbline 221
019A ; if (TempInt != TempInt2)
019A 0417 cp R16,R20
019C 1507 cpc R17,R21
019E 11F0 breq L44
01A0 .dbline 222
01A0 ; return 0;
01A0 0027 clr R16
01A2 07C0 xjmp L38
01A4 L44:
01A4 .dbline 223
01A4 L40:
01A4 .dbline 217
01A4 8A2D mov R24,R10
01A6 8E5F subi R24,254 ; addi 2
01A8 A82E mov R10,R24
01AA L42:
01AA .dbline 217
01AA 8A2D mov R24,R10
01AC 8030 cpi R24,0
01AE ACF2 brlt L39
01B0 .dbline 224
01B0 ; }
01B0 ; return 1;
01B0 01E0 ldi R16,1
01B2 .dbline -2
01B2 L38:
01B2 0E940000 xcall pop_gset3
01B6 .dbline 0 ; func end
01B6 0895 ret
01B8 .dbsym r TempInt2 20 i
01B8 .dbsym r TempInt 22 i
01B8 .dbsym r i 10 c
01B8 .dbend
01B8 .dbfunc e IsChar _IsChar fc
.even
01B8 _IsChar::
01B8 .dbline -1
01B8 .dbline 230
01B8 ; }
01B8 ; /*****************************************************************************/
01B8 ; /* Serial Port Code */
01B8 ; /*****************************************************************************/
01B8 ; unsigned char IsChar(void)
01B8 ; {
01B8 .dbline 235
01B8 ; #if (ChipType == Atmega8)||(ChipType == Atmega16)||(ChipType == Atmega32)
01B8 ; if(UCSRA & 0x80)
01B8 ; #endif
01B8 ; #if (ChipType == Atmega64)||(ChipType == Atmega128)
01B8 ; if(UCSR1A & 0x80)
01B8 20909B00 lds R2,155
01BC 27FE sbrs R2,7
01BE 02C0 rjmp L47
01C0 .dbline 237
01C0 ; #endif
01C0 ; return 1;
01C0 01E0 ldi R16,1
01C2 01C0 xjmp L46
01C4 L47:
01C4 .dbline 239
01C4 ; else
01C4 ; return 0;
01C4 0027 clr R16
01C6 .dbline -2
01C6 L46:
01C6 .dbline 0 ; func end
01C6 0895 ret
01C8 .dbend
01C8 .dbfunc e RecChar _RecChar fc
.even
01C8 _RecChar::
01C8 .dbline -1
01C8 .dbline 244
01C8 ; }
01C8 ; /*****************************************************************************/
01C8 ; /* 字符输入函数 */
01C8 ; unsigned char RecChar(void)
01C8 ; {
01C8 L50:
01C8 .dbline 250
01C8 L51:
01C8 .dbline 250
01C8 ; #if (ChipType == Atmega8)||(ChipType == Atmega16)||(ChipType == Atmega32)
01C8 ; while(!(UCSRA & 0x80));
01C8 ; return UDR;
01C8 ; #endif
01C8 ; #if (ChipType == Atmega64)||(ChipType == Atmega128)
01C8 ; while(!(UCSR1A & 0x80));
01C8 20909B00 lds R2,155
01CC 27FE sbrs R2,7
01CE FCCF rjmp L50
01D0 .dbline 251
01D0 ; return UDR1;
01D0 00919C00 lds R16,156
01D4 .dbline -2
01D4 L49:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -