📄 main.lis
字号:
00AC 11F4 brne L18
00AE X6:
00AE .dbline 152
00AE 01E0 ldi R16,1
00B0 01C0 rjmp 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 00C0 rjmp pop_xgset30FC
00B6 .dbsym r CheckSum 12 c
00B6 .dbsym r AddL 14 c
00B6 .dbsym r AddH 20 c
00B6 .dbsym r LocalCheckSum 10 c
00B6 .dbsym r i 20 c
00B6 .dbend
00B6 .dbfunc e WriteFlash _WriteFlash fV
00B6 ; TempInt -> R10,R11
00B6 ; i -> R20,R21
.even
00B6 _WriteFlash::
00B6 00D0 rcall push_xgset300C
00B8 .dbline -1
00B8 .dbline 158
00B8 ; }
00B8 ;
00B8 ; /*****************************************************************************/
00B8 ; void WriteFlash(void)
00B8 ; {
00B8 .dbline 162
00B8 ; unsigned int i;
00B8 ; unsigned int TempInt;
00B8 ;
00B8 ; for (i=0;i<PageByte;i+=2)
00B8 4427 clr R20
00BA 5527 clr R21
00BC 16C0 rjmp L24
00BE L21:
00BE .dbline 163
00BE ; {
00BE .dbline 164
00BE ; TempInt=PageBuffer[i]+(PageBuffer[i+1]<<8);
00BE 80E0 ldi R24,<_PageBuffer
00C0 90E0 ldi R25,>_PageBuffer
00C2 FA01 movw R30,R20
00C4 3196 adiw R30,1
00C6 E80F add R30,R24
00C8 F91F adc R31,R25
00CA 2080 ldd R2,z+0
00CC 3324 clr R3
00CE 322C mov R3,R2
00D0 2224 clr R2
00D2 FA01 movw R30,R20
00D4 E80F add R30,R24
00D6 F91F adc R31,R25
00D8 A080 ldd R10,z+0
00DA BB24 clr R11
00DC A20C add R10,R2
00DE B31C adc R11,R3
00E0 .dbline 165
00E0 ; fill_temp_buffer(TempInt,i); //call asm routine.
00E0 9A01 movw R18,R20
00E2 8501 movw R16,R10
00E4 00D0 rcall _fill_temp_buffer
00E6 .dbline 166
00E6 ; }
00E6 L22:
00E6 .dbline 162
00E6 4E5F subi R20,254 ; offset = 2
00E8 5F4F sbci R21,255
00EA L24:
00EA .dbline 162
00EA 4034 cpi R20,64
00EC E0E0 ldi R30,0
00EE 5E07 cpc R21,R30
00F0 30F3 brlo L21
00F2 X7:
00F2 .dbline 168
00F2 ;
00F2 ; write_page(PageAddress,0x03); //擦除页
00F2 23E0 ldi R18,3
00F4 00910000 lds R16,_PageAddress
00F8 10910100 lds R17,_PageAddress+1
00FC 00D0 rcall _write_page
00FE .dbline 169
00FE ; write_page(PageAddress,0x05); //写页数据
00FE 25E0 ldi R18,5
0100 00910000 lds R16,_PageAddress
0104 10910100 lds R17,_PageAddress+1
0108 00D0 rcall _write_page
010A .dbline 171
010A ;
010A ; enableRWW();
010A 00D0 rcall _enableRWW
010C .dbline -2
010C L20:
010C .dbline 0 ; func end
010C 00C0 rjmp pop_xgset300C
010E .dbsym r TempInt 10 i
010E .dbsym r i 20 i
010E .dbend
010E .dbfunc e CheckFlash _CheckFlash fc
010E ; TempInt2 -> R12,R13
010E ; TempInt -> R10,R11
010E ; i -> R20
.even
010E _CheckFlash::
010E 00D0 rcall push_xgset303C
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 4427 clr R20
0112 25C0 rjmp L29
0114 L26:
0114 .dbline 183
0114 ; {
0114 .dbline 184
0114 ; TempInt = read_program_memory(PageAddress + i,0x00);
0114 2227 clr R18
0116 242E mov R2,R20
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 5801 movw R10,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 E42F mov R30,R20
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 E42F mov R30,R20
0144 FF27 clr R31
0146 E80F add R30,R24
0148 F91F adc R31,R25
014A C080 ldd R12,z+0
014C DD24 clr R13
014E C20C add R12,R2
0150 D31C adc R13,R3
0152 .dbline 186
0152 ; if (TempInt != TempInt2) return 0;
0152 0C15 cp R16,R12
0154 1D05 cpc R17,R13
0156 11F0 breq L31
0158 X8:
0158 .dbline 186
0158 0027 clr R16
015A 04C0 rjmp L25
015C L31:
015C .dbline 187
015C ; }
015C L27:
015C .dbline 182
015C 4E5F subi R20,254 ; addi 2
015E L29:
015E .dbline 182
015E 4034 cpi R20,64
0160 C8F2 brlo L26
0162 X9:
0162 .dbline 188
0162 ; return 1;
0162 01E0 ldi R16,1
0164 .dbline -2
0164 L25:
0164 .dbline 0 ; func end
0164 00C0 rjmp pop_xgset303C
0166 .dbsym r TempInt2 12 i
0166 .dbsym r TempInt 10 i
0166 .dbsym r i 20 c
0166 .dbend
0166 .dbfunc e RecChar _RecChar fc
.even
0166 _RecChar::
0166 .dbline -1
0166 .dbline 194
0166 ; }
0166 ;
0166 ; /*****************************************************************************/
0166 ; /* 字符输入函数 */
0166 ; unsigned char RecChar(void)
0166 ; {
0166 L34:
0166 .dbline 195
0166 ; while(!(UCSRA & 0x80));
0166 L35:
0166 .dbline 195
0166 5F9B sbis 0xb,7
0168 FECF rjmp L34
016A X10:
016A .dbline 196
016A ; return UDR;
016A 0CB1 in R16,0xc
016C .dbline -2
016C L33:
016C .dbline 0 ; func end
016C 0895 ret
016E .dbend
016E .dbfunc e SendChar _SendChar fV
016E ; c -> R16
.even
016E _SendChar::
016E .dbline -1
016E .dbline 200
016E ; }
016E ; /*****************************************************************************/
016E ; void SendChar(unsigned char c)
016E ; {
016E L38:
016E .dbline 201
016E ; while (!(UCSRA&(1<<UDRE)));
016E L39:
016E .dbline 201
016E 5D9B sbis 0xb,5
0170 FECF rjmp L38
0172 X11:
0172 .dbline 202
0172 ; UDR=c;
0172 0CB9 out 0xc,R16
0174 .dbline -2
0174 L37:
0174 .dbline 0 ; func end
0174 0895 ret
0176 .dbsym r c 16 c
0176 .dbend
0176 .dbfunc e delay _delay fV
0176 ; i -> R16,R17
.even
0176 _delay::
0176 .dbline -1
0176 .dbline 205
0176 ; }
0176 ; void delay(void)
0176 ; {
0176 .dbline 207
0176 ; unsigned int i;
0176 ; for (i=0;i<65530;i++);
0176 0027 clr R16
0178 1127 clr R17
017A 02C0 rjmp L45
017C L42:
017C .dbline 207
017C L43:
017C .dbline 207
017C 0F5F subi R16,255 ; offset = 1
017E 1F4F sbci R17,255
0180 L45:
0180 .dbline 207
0180 8AEF ldi R24,250
0182 9FEF ldi R25,255
0184 A0E0 ldi R26,0
0186 B0E0 ldi R27,0
0188 1801 movw R2,R16
018A 4424 clr R4
018C 5524 clr R5
018E 2816 cp R2,R24
0190 3906 cpc R3,R25
0192 4A06 cpc R4,R26
0194 5B06 cpc R5,R27
0196 94F3 brlt L42
0198 X12:
0198 .dbline -2
0198 L41:
0198 .dbline 0 ; func end
0198 0895 ret
019A .dbsym r i 16 i
019A .dbend
019A .dbfunc e ExecCode _ExecCode fV
.even
019A _ExecCode::
019A .dbline -1
019A .dbline 212
019A ; }
019A ;
019A ; /*****************************************************************************/
019A ; void ExecCode(void)
019A ; {
019A .dbline 213
019A ; GICR=0X01; //中断向量表移位允许
019A 81E0 ldi R24,1
019C 8BBF out 0x3b,R24
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -