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

📄 main.lis

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