📄 main.lis
字号:
0374 0E940000 xcall _PC_Send_Ok
0378 .dbline 278
0378 ;
0378 ; Rec_Len = Uart_Receive_Frame(ReceiveBuf, 100); //等待接收握手信号
0378 24E6 ldi R18,100
037A 30E0 ldi R19,0
037C 00E0 ldi R16,<_ReceiveBuf
037E 10E0 ldi R17,>_ReceiveBuf
0380 0E940000 xcall _Uart_Receive_Frame
0384 402F mov R20,R16
0386 5527 clr R21
0388 .dbline 279
0388 ; if(Rec_Len) //如果没收到数据,跳到0x00处运行程序
0388 4030 cpi R20,0
038A 4507 cpc R20,R21
038C C9F0 breq L55
038E X8:
038E .dbline 280
038E ; {
038E .dbline 281
038E ; if(Verify_Command(ReceiveBuf,Rec_Len))
038E 9A01 movw R18,R20
0390 00E0 ldi R16,<_ReceiveBuf
0392 10E0 ldi R17,>_ReceiveBuf
0394 0E940000 xcall _Verify_Command
0398 0023 tst R16
039A 31F0 breq L57
039C .dbline 282
039C ; {
039C .dbline 283
039C ; PC_Send_Err(ERR_COMMANDCRC,SendBuf); //命令CRC校验错误
039C 20E0 ldi R18,<_SendBuf
039E 30E0 ldi R19,>_SendBuf
03A0 01E1 ldi R16,17
03A2 0E940000 xcall _PC_Send_Err
03A6 .dbline 284
03A6 ; quit();
03A6 89DE xcall _quit
03A8 .dbline 285
03A8 ; }
03A8 L57:
03A8 .dbline 286
03A8 ; if((ReceiveBuf[2] != 0x00)) //不是联机命令
03A8 20900201 lds R2,_ReceiveBuf+2
03AC 2220 tst R2
03AE 09F4 brne X12
03B0 84C0 xjmp L63
03B2 X12:
03B2 .dbline 287
03B2 ; {
03B2 .dbline 288
03B2 ; PC_Send_Err(ERR_CONNECT,SendBuf);
03B2 20E0 ldi R18,<_SendBuf
03B4 30E0 ldi R19,>_SendBuf
03B6 00E1 ldi R16,16
03B8 0E940000 xcall _PC_Send_Err
03BC .dbline 289
03BC ; quit(); //验证错误
03BC 7EDE xcall _quit
03BE .dbline 290
03BE ; }
03BE .dbline 291
03BE ; }
03BE 7DC0 xjmp L63
03C0 L55:
03C0 .dbline 293
03C0 ; else
03C0 ; quit();
03C0 7CDE xcall _quit
03C2 7BC0 xjmp L63
03C4 L62:
03C4 .dbline 296
03C4 ;
03C4 ; while(1)
03C4 ; {
03C4 .dbline 297
03C4 ; Rec_Len = 0;
03C4 4427 clr R20
03C6 5527 clr R21
03C8 .dbline 298
03C8 ; Rec_Len = Uart_Receive_Frame(ReceiveBuf,10);
03C8 2AE0 ldi R18,10
03CA 30E0 ldi R19,0
03CC 00E0 ldi R16,<_ReceiveBuf
03CE 10E0 ldi R17,>_ReceiveBuf
03D0 0E940000 xcall _Uart_Receive_Frame
03D4 402F mov R20,R16
03D6 5527 clr R21
03D8 .dbline 299
03D8 ; if(Rec_Len)//接收命令信号
03D8 4030 cpi R20,0
03DA 4507 cpc R20,R21
03DC 09F4 brne X13
03DE 6DC0 xjmp L65
03E0 X13:
03E0 X9:
03E0 .dbline 300
03E0 ; {
03E0 .dbline 301
03E0 ; if(Verify_Command(ReceiveBuf,Rec_Len))
03E0 9A01 movw R18,R20
03E2 00E0 ldi R16,<_ReceiveBuf
03E4 10E0 ldi R17,>_ReceiveBuf
03E6 0E940000 xcall _Verify_Command
03EA 0023 tst R16
03EC 11F0 breq L67
03EE .dbline 302
03EE ; Ret_Value = ERR_COMMANDCRC;
03EE 61E1 ldi R22,17
03F0 5DC0 xjmp L68
03F2 L67:
03F2 .dbline 304
03F2 ; else
03F2 ; {
03F2 .dbline 305
03F2 ; switch(ReceiveBuf[2]) //根据不同指令执行不同的操作
03F2 A0900201 lds R10,_ReceiveBuf+2
03F6 BB24 clr R11
03F8 C501 movw R24,R10
03FA 8130 cpi R24,1
03FC E0E0 ldi R30,0
03FE 9E07 cpc R25,R30
0400 B1F0 breq L73
0402 8230 cpi R24,2
0404 E0E0 ldi R30,0
0406 9E07 cpc R25,R30
0408 A9F0 breq L74
040A 8330 cpi R24,3
040C E0E0 ldi R30,0
040E 9E07 cpc R25,R30
0410 B1F0 breq L75
0412 8430 cpi R24,4
0414 E0E0 ldi R30,0
0416 9E07 cpc R25,R30
0418 B9F0 breq L76
041A 8530 cpi R24,5
041C E0E0 ldi R30,0
041E 9E07 cpc R25,R30
0420 81F1 breq L81
0422 8630 cpi R24,6
0424 E0E0 ldi R30,0
0426 9E07 cpc R25,R30
0428 09F4 brne X14
042A 3AC0 xjmp L82
042C X14:
042C 3EC0 xjmp L69
042E X10:
042E .dbline 306
042E ; {
042E L73:
042E .dbline 308
042E ; case 0x01: //程序下载
042E ; Ret_Value = Flow_Control();
042E 4DDE xcall _Flow_Control
0430 602F mov R22,R16
0432 .dbline 309
0432 ; break;
0432 3CC0 xjmp L70
0434 L74:
0434 .dbline 311
0434 ; case 0x02: //设置组地址,接点地址 //Read_Eeprom(POINT,data,14);
0434 ; Ret_Value = Setting_Param(ReceiveBuf);
0434 00E0 ldi R16,<_ReceiveBuf
0436 10E0 ldi R17,>_ReceiveBuf
0438 06DF xcall _Setting_Param
043A 602F mov R22,R16
043C .dbline 312
043C ; break;
043C 37C0 xjmp L70
043E L75:
043E .dbline 314
043E ; case 0x03: //上传表具信息
043E ; Ret_Value = Read_Param(SendData);
043E 00E0 ldi R16,<_SendData
0440 10E0 ldi R17,>_SendData
0442 3BDF xcall _Read_Param
0444 602F mov R22,R16
0446 .dbline 315
0446 ; break;
0446 32C0 xjmp L70
0448 L76:
0448 .dbline 317
0448 ; case 0x04: //硬件检测
0448 ; SendData[0] = 'R';
0448 82E5 ldi R24,82
044A 8093FA01 sts _SendData,R24
044E .dbline 318
044E ; SendData[1] = 'T';
044E 84E5 ldi R24,84
0450 8093FB01 sts _SendData+1,R24
0454 .dbline 319
0454 ; SendData[2] = 'C';
0454 83E4 ldi R24,67
0456 8093FC01 sts _SendData+2,R24
045A .dbline 320
045A ; SendData[3] = 'O';
045A 8FE4 ldi R24,79
045C 8093FD01 sts _SendData+3,R24
0460 .dbline 321
0460 ; SendData[4] = 'K';
0460 8BE4 ldi R24,75
0462 8093FE01 sts _SendData+4,R24
0466 .dbline 322
0466 ; PC_Send_Ok(SendData,0x00,SendBuf,5); //向上位机发送硬件检测情况
0466 85E0 ldi R24,5
0468 90E0 ldi R25,0
046A 9B83 std y+3,R25
046C 8A83 std y+2,R24
046E 80E0 ldi R24,<_SendBuf
0470 90E0 ldi R25,>_SendBuf
0472 9983 std y+1,R25
0474 8883 std y+0,R24
0476 2227 clr R18
0478 00E0 ldi R16,<_SendData
047A 10E0 ldi R17,>_SendData
047C 0E940000 xcall _PC_Send_Ok
0480 .dbline 323
0480 ; break;
0480 15C0 xjmp L70
0482 L81:
0482 .dbline 325
0482 ; case 0x05: //复位命令
0482 ; PC_Send_Ok(SendData,0x00,SendBuf,0); //向上位机发送复位成功命令
0482 2224 clr R2
0484 3324 clr R3
0486 3B82 std y+3,R3
0488 2A82 std y+2,R2
048A 80E0 ldi R24,<_SendBuf
048C 90E0 ldi R25,>_SendBuf
048E 9983 std y+1,R25
0490 8883 std y+0,R24
0492 2227 clr R18
0494 00E0 ldi R16,<_SendData
0496 10E0 ldi R17,>_SendData
0498 0E940000 xcall _PC_Send_Ok
049C .dbline 326
049C ; quit();
049C 0EDE xcall _quit
049E .dbline 327
049E ; break;
049E 06C0 xjmp L70
04A0 L82:
04A0 .dbline 329
04A0 ; case 0x06: //读取系统时钟
04A0 ; Ret_Value = Read_SystemTime(SendData);
04A0 00E0 ldi R16,<_SendData
04A2 10E0 ldi R17,>_SendData
04A4 31DF xcall _Read_SystemTime
04A6 602F mov R22,R16
04A8 .dbline 330
04A8 ; break;
04A8 01C0 xjmp L70
04AA L69:
04AA .dbline 332
04AA ; default: //没有找到相应的指令,返回指令错误
04AA ; Ret_Value = ERR_NOCOMMAND;
04AA 64E1 ldi R22,20
04AC .dbline 333
04AC ; break;
04AC L70:
04AC .dbline 335
04AC ; }
04AC ; }
04AC L68:
04AC .dbline 336
04AC ; if(Ret_Value) //执行的子程返回0时表示,成功执行命令
04AC 6623 tst R22
04AE 29F0 breq L83
04B0 .dbline 337
04B0 ; PC_Send_Err(Ret_Value,SendBuf);
04B0 20E0 ldi R18,<_SendBuf
04B2 30E0 ldi R19,>_SendBuf
04B4 062F mov R16,R22
04B6 0E940000 xcall _PC_Send_Err
04BA L83:
04BA .dbline 338
04BA ; }
04BA L65:
04BA .dbline 339
04BA L63:
04BA .dbline 295
04BA 84CF xjmp L62
04BC X11:
04BC .dbline -2
04BC L54:
04BC 2496 adiw R28,4
04BE .dbline 0 ; func end
04BE 0895 ret
04C0 .dbsym l Crc_Value 5 s
04C0 .dbsym r Ret_Value 22 c
04C0 .dbsym r Rec_Len 20 I
04C0 .dbend
.area bss(ram, con, rel)
0000 .dbfile E:\程序\AVR程序\BOOTLoadICC\main.c
0000 _data::
0000 .blkb 256
0100 .dbsym e data _data A[256:256]c
0100 _ReceiveBuf::
0100 .blkb 150
0196 .dbsym e ReceiveBuf _ReceiveBuf A[150:150]c
0196 _SendBuf::
0196 .blkb 100
01FA .dbsym e SendBuf _SendBuf A[100:100]c
01FA _SendData::
01FA .blkb 100
025E .dbsym e SendData _SendData A[100:100]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -