📄 main.lis
字号:
0098 2080 ldd R2,z+0
009A A20C add R10,R2
009C .dbline 149
009C L15:
009C .dbline 145
009C 6395 inc R22
009E L17:
009E .dbline 145
009E 6034 cpi R22,64
00A0 78F3 brlo L14
00A2 .dbline 151
00A2 ; {
00A2 ; PageBuffer[i]=RecChar();
00A2 ; LocalCheckSum += PageBuffer[i];
00A2 ; }
00A2 ;
00A2 ; CheckSum = RecChar();
00A2 65D0 rcall _RecChar
00A4 402F mov R20,R16
00A6 .dbline 152
00A6 ; if (LocalCheckSum == CheckSum) return 1;
00A6 A016 cp R10,R16
00A8 11F4 brne L18
00AA .dbline 152
00AA 01E0 ldi R16,1
00AC 01C0 rjmp L11
00AE L18:
00AE .dbline 153
00AE ; else return 0;
00AE 0027 clr R16
00B0 .dbline -2
00B0 L11:
00B0 00D0 rcall pop_gset4
00B2 .dbline 0 ; func end
00B2 0895 ret
00B4 .dbsym r CheckSum 20 c
00B4 .dbsym r AddL 22 c
00B4 .dbsym r AddH 12 c
00B4 .dbsym r LocalCheckSum 10 c
00B4 .dbsym r i 22 c
00B4 .dbend
00B4 .dbfunc e WriteFlash _WriteFlash fV
00B4 ; TempInt -> R20,R21
00B4 ; i -> R22,R23
.even
00B4 _WriteFlash::
00B4 00D0 rcall push_gset2
00B6 .dbline -1
00B6 .dbline 158
00B6 ; }
00B6 ;
00B6 ; /*****************************************************************************/
00B6 ; void WriteFlash(void)
00B6 ; {
00B6 .dbline 162
00B6 ; unsigned int i;
00B6 ; unsigned int TempInt;
00B6 ;
00B6 ; for (i=0;i<PageByte;i+=2)
00B6 6627 clr R22
00B8 7727 clr R23
00BA 16C0 rjmp L24
00BC L21:
00BC .dbline 163
00BC .dbline 164
00BC 80E0 ldi R24,<_PageBuffer
00BE 90E0 ldi R25,>_PageBuffer
00C0 FB01 movw R30,R22
00C2 3196 adiw R30,1
00C4 E80F add R30,R24
00C6 F91F adc R31,R25
00C8 2080 ldd R2,z+0
00CA 3324 clr R3
00CC 322C mov R3,R2
00CE 2224 clr R2
00D0 FB01 movw R30,R22
00D2 E80F add R30,R24
00D4 F91F adc R31,R25
00D6 4081 ldd R20,z+0
00D8 5527 clr R21
00DA 420D add R20,R2
00DC 531D adc R21,R3
00DE .dbline 165
00DE 9B01 movw R18,R22
00E0 8A01 movw R16,R20
00E2 00D0 rcall _fill_temp_buffer
00E4 .dbline 166
00E4 L22:
00E4 .dbline 162
00E4 6E5F subi R22,254 ; offset = 2
00E6 7F4F sbci R23,255
00E8 L24:
00E8 .dbline 162
00E8 6034 cpi R22,64
00EA E0E0 ldi R30,0
00EC 7E07 cpc R23,R30
00EE 30F3 brlo L21
00F0 .dbline 168
00F0 ; {
00F0 ; TempInt=PageBuffer[i]+(PageBuffer[i+1]<<8);
00F0 ; fill_temp_buffer(TempInt,i); //call asm routine.
00F0 ; }
00F0 ;
00F0 ; write_page(PageAddress,0x03); //擦除页
00F0 23E0 ldi R18,3
00F2 00910000 lds R16,_PageAddress
00F6 10910100 lds R17,_PageAddress+1
00FA 00D0 rcall _write_page
00FC .dbline 169
00FC ; write_page(PageAddress,0x05); //写页数据
00FC 25E0 ldi R18,5
00FE 00910000 lds R16,_PageAddress
0102 10910100 lds R17,_PageAddress+1
0106 00D0 rcall _write_page
0108 .dbline 171
0108 ;
0108 ; enableRWW();
0108 00D0 rcall _enableRWW
010A .dbline -2
010A L20:
010A 00D0 rcall pop_gset2
010C .dbline 0 ; func end
010C 0895 ret
010E .dbsym r TempInt 20 i
010E .dbsym r i 22 i
010E .dbend
010E .dbfunc e CheckFlash _CheckFlash fc
010E ; TempInt2 -> R20,R21
010E ; TempInt -> R22,R23
010E ; i -> R10
.even
010E _CheckFlash::
010E 00D0 rcall push_gset3
0110 .dbline -1
0110 .dbline 177
0110 ; }
0110 ;
0110 ; /*****************************************************************************/
0110 ;
0110 ; char CheckFlash(void)
0110 ; {
0110 .dbline 182
0110 ; unsigned char i;
0110 ; unsigned int TempInt;
0110 ; unsigned int TempInt2;
0110 ;
0110 ; for (i=0;i<PageByte;i+=2)
0110 AA24 clr R10
0112 27C0 rjmp L29
0114 L26:
0114 .dbline 183
0114 ; {
0114 .dbline 184
0114 ; TempInt = read_program_memory(PageAddress + i,0x00);
0114 2227 clr R18
0116 2A2C mov R2,R10
0118 3324 clr R3
011A 00910000 lds R16,_PageAddress
011E 10910100 lds R17,_PageAddress+1
0122 020D add R16,R2
0124 131D adc R17,R3
0126 00D0 rcall _read_program_memory
0128 B801 movw R22,R16
012A .dbline 185
012A ; TempInt2 = PageBuffer[i] +(PageBuffer[i+1]<<8);
012A 80E0 ldi R24,<_PageBuffer+1
012C 90E0 ldi R25,>_PageBuffer+1
012E EA2D mov R30,R10
0130 FF27 clr R31
0132 E80F add R30,R24
0134 F91F adc R31,R25
0136 2080 ldd R2,z+0
0138 3324 clr R3
013A 322C mov R3,R2
013C 2224 clr R2
013E 80E0 ldi R24,<_PageBuffer
0140 90E0 ldi R25,>_PageBuffer
0142 EA2D mov R30,R10
0144 FF27 clr R31
0146 E80F add R30,R24
0148 F91F adc R31,R25
014A 4081 ldd R20,z+0
014C 5527 clr R21
014E 420D add R20,R2
0150 531D adc R21,R3
0152 .dbline 186
0152 ; if (TempInt != TempInt2) return 0;
0152 0417 cp R16,R20
0154 1507 cpc R17,R21
0156 11F0 breq L31
0158 .dbline 186
0158 0027 clr R16
015A 07C0 rjmp L25
015C L31:
015C .dbline 187
015C L27:
015C .dbline 182
015C 8A2D mov R24,R10
015E 8E5F subi R24,254 ; addi 2
0160 A82E mov R10,R24
0162 L29:
0162 .dbline 182
0162 8A2D mov R24,R10
0164 8034 cpi R24,64
0166 B0F2 brlo L26
0168 .dbline 188
0168 ; }
0168 ; return 1;
0168 01E0 ldi R16,1
016A .dbline -2
016A L25:
016A 00D0 rcall pop_gset3
016C .dbline 0 ; func end
016C 0895 ret
016E .dbsym r TempInt2 20 i
016E .dbsym r TempInt 22 i
016E .dbsym r i 10 c
016E .dbend
016E .dbfunc e RecChar _RecChar fc
.even
016E _RecChar::
016E .dbline -1
016E .dbline 194
016E ; }
016E ;
016E ; /*****************************************************************************/
016E ; /* 字符输入函数 */
016E ; unsigned char RecChar(void)
016E ; {
016E L34:
016E .dbline 195
016E L35:
016E .dbline 195
016E ; while(!(UCSRA & 0x80));
016E 5F9B sbis 0xb,7
0170 FECF rjmp L34
0172 .dbline 196
0172 ; return UDR;
0172 0CB1 in R16,0xc
0174 .dbline -2
0174 L33:
0174 .dbline 0 ; func end
0174 0895 ret
0176 .dbend
0176 .dbfunc e SendChar _SendChar fV
0176 ; c -> R16
.even
0176 _SendChar::
0176 .dbline -1
0176 .dbline 200
0176 ; }
0176 ; /*****************************************************************************/
0176 ; void SendChar(unsigned char c)
0176 ; {
0176 L38:
0176 .dbline 201
0176 L39:
0176 .dbline 201
0176 ; while (!(UCSRA&(1<<UDRE)));
0176 5D9B sbis 0xb,5
0178 FECF rjmp L38
017A .dbline 202
017A ; UDR=c;
017A 0CB9 out 0xc,R16
017C .dbline -2
017C L37:
017C .dbline 0 ; func end
017C 0895 ret
017E .dbsym r c 16 c
017E .dbend
017E .dbfunc e delay _delay fV
017E ; i -> R16,R17
.even
017E _delay::
017E .dbline -1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -