📄 main.lis
字号:
00BE 2224 clr R2
00C0 25BE out 0x35,R2
00C2 .dbline 125
00C2 ; RAMPZ = 0x00;
00C2 2BBE out 0x3b,R2
00C4 .dbline 126
00C4 ; asm("jmp 0x0000\n");
00C4 0C940000 jmp 0x0000
00C8
00C8 .dbline -2
00C8 L16:
00C8 .dbline 0 ; func end
00C8 0895 ret
00CA .dbend
00CA .dbfunc e Flow_Control _Flow_Control fc
00CA ; CRC_Value -> R10,R11
00CA ; Wrong_Cnt -> R12
00CA ; Rec_Len -> R14
00CA ; bPiont -> y+4
.even
00CA _Flow_Control::
00CA 0E940000 xcall push_gset5
00CE 2697 sbiw R28,6
00D0 .dbline -1
00D0 .dbline 140
00D0 ; }
00D0 ;
00D0 ; //============================================================
00D0 ; //函 数:unsigned char Flow_Control(void)
00D0 ; //功 能:下载函数控制
00D0 ; //入口参数:ReceiveBuf接收数据,data写入Flash数据
00D0 ; //返 回 值:0成功,否则失败
00D0 ; //设 计 者:覃道堂
00D0 ; //创作时间:2006-03-16
00D0 ; //修改时间:
00D0 ; //修改目的:
00D0 ; //============================================================
00D0 ; unsigned char Flow_Control(void)
00D0 ; {
00D0 .dbline 141
00D0 ; int bPiont = 0;
00D0 0024 clr R0
00D2 1124 clr R1
00D4 1D82 std y+5,R1
00D6 0C82 std y+4,R0
00D8 .dbline 143
00D8 ; unsigned char Rec_Len;
00D8 ; unsigned char Wrong_Cnt = 0;
00D8 CC24 clr R12
00DA 98C0 xjmp L19
00DC L18:
00DC .dbline 147
00DC ; unsigned short CRC_Value;
00DC ;
00DC ; while(Wrong_Cnt < 3)
00DC ; {
00DC .dbline 148
00DC ; Rec_Len = Uart_Receive_Frame(ReceiveBuf, 10);
00DC 2AE0 ldi R18,10
00DE 30E0 ldi R19,0
00E0 00E0 ldi R16,<_ReceiveBuf
00E2 10E0 ldi R17,>_ReceiveBuf
00E4 0E940000 xcall _Uart_Receive_Frame
00E8 E02E mov R14,R16
00EA .dbline 149
00EA ; if(Rec_Len)//收到数据吗?没有等待数据
00EA 0023 tst R16
00EC 09F4 brne X4
00EE 8EC0 xjmp L21
00F0 X4:
00F0 .dbline 150
00F0 ; {
00F0 .dbline 151
00F0 ; if((ReceiveBuf[3] == 'E')&&(ReceiveBuf[4] == 'N')&&(ReceiveBuf[5] == 'D'))
00F0 80910301 lds R24,_ReceiveBuf+3
00F4 8534 cpi R24,69
00F6 49F4 brne L23
00F8 80910401 lds R24,_ReceiveBuf+4
00FC 8E34 cpi R24,78
00FE 29F4 brne L23
0100 80910501 lds R24,_ReceiveBuf+5
0104 8434 cpi R24,68
0106 09F4 brne L23
0108 .dbline 152
0108 ; {
0108 .dbline 153
0108 ; break; //如果收到END终止
0108 85C0 xjmp L20
010A L23:
010A .dbline 156
010A ; }
010A ; else
010A ; {
010A .dbline 157
010A ; CRC_Value = Verify_Command(ReceiveBuf,Rec_Len);
010A 2E2D mov R18,R14
010C 3327 clr R19
010E 00E0 ldi R16,<_ReceiveBuf
0110 10E0 ldi R17,>_ReceiveBuf
0112 0E940000 xcall _Verify_Command
0116 A02E mov R10,R16
0118 BB24 clr R11
011A .dbline 158
011A ; if(CRC_Value == 0)
011A AA20 tst R10
011C 09F0 breq X5
011E 6BC0 xjmp L28
0120 X5:
0120 BB20 tst R11
0122 09F0 breq X6
0124 68C0 xjmp L28
0126 X6:
0126 X1:
0126 .dbline 159
0126 ; {
0126 .dbline 160
0126 ; if(bPiont == 0)
0126 0C80 ldd R0,y+4
0128 1D80 ldd R1,y+5
012A 0020 tst R0
012C F1F4 brne L30
012E 1120 tst R1
0130 E1F4 brne L30
0132 X2:
0132 .dbline 161
0132 ; {
0132 .dbline 162
0132 ; for(bPiont = 0; bPiont < 128; bPiont ++)
0132 0024 clr R0
0134 1124 clr R1
0136 1D82 std y+5,R1
0138 0C82 std y+4,R0
013A L32:
013A .dbline 163
013A 80E0 ldi R24,<_ReceiveBuf+5
013C 90E0 ldi R25,>_ReceiveBuf+5
013E EC81 ldd R30,y+4
0140 FD81 ldd R31,y+5
0142 E80F add R30,R24
0144 F91F adc R31,R25
0146 2080 ldd R2,z+0
0148 80E0 ldi R24,<_data
014A 90E0 ldi R25,>_data
014C EC81 ldd R30,y+4
014E FD81 ldd R31,y+5
0150 E80F add R30,R24
0152 F91F adc R31,R25
0154 2082 std z+0,R2
0156 L33:
0156 .dbline 162
0156 8C81 ldd R24,y+4
0158 9D81 ldd R25,y+5
015A 0196 adiw R24,1
015C 9D83 std y+5,R25
015E 8C83 std y+4,R24
0160 .dbline 162
0160 8038 cpi R24,128
0162 E0E0 ldi R30,0
0164 9E07 cpc R25,R30
0166 4CF3 brlt L32
0168 .dbline 164
0168 ; data[bPiont] = ReceiveBuf[bPiont+5];
0168 ; }
0168 38C0 xjmp L31
016A L30:
016A .dbline 166
016A ; else
016A ; {
016A .dbline 167
016A ; for(bPiont = 128; bPiont < 256; bPiont ++)
016A 80E8 ldi R24,128
016C 90E0 ldi R25,0
016E 9D83 std y+5,R25
0170 8C83 std y+4,R24
0172 L37:
0172 .dbline 168
0172 80E0 ldi R24,<_ReceiveBuf+5-128
0174 90E0 ldi R25,>_ReceiveBuf+5-128
0176 EC81 ldd R30,y+4
0178 FD81 ldd R31,y+5
017A E80F add R30,R24
017C F91F adc R31,R25
017E 2080 ldd R2,z+0
0180 80E0 ldi R24,<_data
0182 90E0 ldi R25,>_data
0184 EC81 ldd R30,y+4
0186 FD81 ldd R31,y+5
0188 E80F add R30,R24
018A F91F adc R31,R25
018C 2082 std z+0,R2
018E L38:
018E .dbline 167
018E 8C81 ldd R24,y+4
0190 9D81 ldd R25,y+5
0192 0196 adiw R24,1
0194 9D83 std y+5,R25
0196 8C83 std y+4,R24
0198 .dbline 167
0198 8030 cpi R24,0
019A E1E0 ldi R30,1
019C 9E07 cpc R25,R30
019E 4CF3 brlt L37
01A0 .dbline 169
01A0 ; data[bPiont] = ReceiveBuf[bPiont-128+5];
01A0 ; write_one_page();
01A0 51DF xcall _write_one_page
01A2 .dbline 170
01A2 ; address += SPM_PAGESIZE;
01A2 40E0 ldi R20,0
01A4 51E0 ldi R21,1
01A6 60E0 ldi R22,0
01A8 70E0 ldi R23,0
01AA 40900400 lds R4,_address+2
01AE 50900500 lds R5,_address+2+1
01B2 20900200 lds R2,_address
01B6 30900300 lds R3,_address+1
01BA 240E add R2,R20
01BC 351E adc R3,R21
01BE 461E adc R4,R22
01C0 571E adc R5,R23
01C2 30920300 sts _address+1,R3
01C6 20920200 sts _address,R2
01CA 50920500 sts _address+2+1,R5
01CE 40920400 sts _address+2,R4
01D2 .dbline 171
01D2 ; bPiont = 0;
01D2 0024 clr R0
01D4 1124 clr R1
01D6 1D82 std y+5,R1
01D8 0C82 std y+4,R0
01DA .dbline 172
01DA ; }
01DA L31:
01DA .dbline 173
01DA ; PC_Send_Ok(SendData,0x00,SendBuf,0); //请求下一包命令
01DA 2224 clr R2
01DC 3324 clr R3
01DE 3B82 std y+3,R3
01E0 2A82 std y+2,R2
01E2 80E0 ldi R24,<_SendBuf
01E4 90E0 ldi R25,>_SendBuf
01E6 9983 std y+1,R25
01E8 8883 std y+0,R24
01EA 2227 clr R18
01EC 00E0 ldi R16,<_SendData
01EE 10E0 ldi R17,>_SendData
01F0 0E940000 xcall _PC_Send_Ok
01F4 .dbline 174
01F4 ; }
01F4 0BC0 xjmp L29
01F6 L28:
01F6 .dbline 176
01F6 ; else
01F6 ; {
01F6 .dbline 177
01F6 ; Wrong_Cnt++;
01F6 C394 inc R12
01F8 .dbline 178
01F8 ; if(Wrong_Cnt == 3)
01F8 8C2D mov R24,R12
01FA 8330 cpi R24,3
01FC 11F4 brne L43
01FE .dbline 179
01FE ; return ERR_OVERTIME;
01FE 03E1 ldi R16,19
0200 1EC0 xjmp L17
0202 L43:
0202 .dbline 180
0202 ; PC_Send_Err(ERR_DATACRC,SendBuf); //接收数据错误,需重发
0202 20E0 ldi R18,<_SendBuf
0204 30E0 ldi R19,>_SendBuf
0206 02E1 ldi R16,18
0208 0E940000 xcall _PC_Send_Err
020C .dbline 181
020C ; }
020C L29:
020C .dbline 182
020C ; }
020C .dbline 183
020C ; }
020C L21:
020C .dbline 184
020C L19:
020C .dbline 146
020C 8C2D mov R24,R12
020E 8330 cpi R24,3
0210 08F4 brsh X7
0212 64CF xjmp L18
0214 X7:
0214 L20:
0214 .dbline 185
0214 ; }
0214 ; if(bPiont)
0214 0C80 ldd R0,y+4
0216 1D80 ldd R1,y+5
0218 0020 tst R0
021A 11F4 brne X3
021C 1120 tst R1
021E 09F0 breq L45
0220 X3:
0220 .dbline 186
0220 ; write_one_page();
0220 11DF xcall _write_one_page
0222 L45:
0222 .dbline 187
0222 ; PC_Send_Ok(SendData,0x00,SendBuf,0); //向上位机发送下载成功命令
0222 2224 clr R2
0224 3324 clr R3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -