📄 main.lis
字号:
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 + -