⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lis

📁 AVR16源代码 ICC编译器
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 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 + -