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