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

📄 main.lis

📁 Atmega系列单片机 BootLoader程序
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 01C4           ;   }           
 01C4           ; /*****************************************************************************/
 01C4           ; void SendChar(unsigned char c)
 01C4           ;   {    
 01C4           L52:
 01C4                   .dbline 196
 01C4           L53:
 01C4                   .dbline 196
 01C4           ;     while (!(UCSRA&(1<<UDRE)));
 01C4 5D9B              sbis 0xb,5
 01C6 FECF              rjmp L52
 01C8                   .dbline 197
 01C8           ;     UDR=c;
 01C8 0CB9              out 0xc,R16
 01CA                   .dbline -2
 01CA           L51:
 01CA                   .dbline 0 ; func end
 01CA 0895              ret
 01CC                   .dbsym r c 16 c
 01CC                   .dbend
 01CC                   .dbfunc e delay _delay fV
 01CC           ;              i -> R16,R17
                        .even
 01CC           _delay::
 01CC                   .dbline -1
 01CC                   .dbline 200
 01CC           ;   }
 01CC           ; void delay(void)  
 01CC           ;   {
 01CC                   .dbline 202
 01CC 0027              clr R16
 01CE 1127              clr R17
 01D0 02C0              xjmp L59
 01D2           L56:
 01D2                   .dbline 202
 01D2           L57:
 01D2                   .dbline 202
 01D2 0F5F              subi R16,255  ; offset = 1
 01D4 1F4F              sbci R17,255
 01D6           L59:
 01D6                   .dbline 202
 01D6           ;     unsigned int i;
 01D6           ;     for (i=0;i<65530;i++);
 01D6 0A3F              cpi R16,250
 01D8 EFEF              ldi R30,255
 01DA 1E07              cpc R17,R30
 01DC D0F3              brlo L56
 01DE                   .dbline -2
 01DE           L55:
 01DE                   .dbline 0 ; func end
 01DE 0895              ret
 01E0                   .dbsym r i 16 i
 01E0                   .dbend
 01E0                   .dbfunc e ExecCode _ExecCode fV
                        .even
 01E0           _ExecCode::
 01E0                   .dbline -1
 01E0                   .dbline 207
 01E0           ;   }
 01E0           ; 
 01E0           ; /*****************************************************************************/
 01E0           ; void ExecCode(void)
 01E0           ;   {
 01E0                   .dbline 211
 01E0           ; #ifdef RAMPZ_FLAG 
 01E0           ;     RAMPZ = 0;
 01E0           ; #endif
 01E0           ;     INTVECREG=0x01;           //中断向量表移位允许
 01E0 81E0              ldi R24,1
 01E2 8BBF              out 0x3b,R24
 01E4                   .dbline 212
 01E4           ;     INTVECREG=0x00;           //中断向量指向应用程序区
 01E4 2224              clr R2
 01E6 2BBE              out 0x3b,R2
 01E8                   .dbline 213
 01E8           ;     asm("jmp 0x0000");              
 01E8 0C940000          jmp 0x0000
 01EC                   .dbline -2
 01EC           L60:
 01EC                   .dbline 0 ; func end
 01EC 0895              ret
 01EE                   .dbend
 01EE                   .dbfunc e main _main fV
 01EE           ;       BootFlag -> R20
                        .even
 01EE           _main::
 01EE                   .dbline -1
 01EE                   .dbline 217
 01EE           ;   }
 01EE           ;               
 01EE           ; void main(void)
 01EE           ;   {
 01EE                   .dbline 221
 01EE           ;     unsigned char BootFlag;
 01EE           ;     
 01EE           ; #ifdef InteClk                //如果使用内部时钟,读取时钟校准值
 01EE           ;        OSCCAL=read_flash(OscAddress);
 01EE 0FEF              ldi R16,8191
 01F0 1FE1              ldi R17,31
 01F2 0E940000          xcall _read_flash
 01F6 01BF              out 0x31,R16
 01F8                   .dbline 224
 01F8           ; #endif
 01F8           ;  
 01F8           ;     UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //8位数据+1位停止
 01F8 86E8              ldi R24,134
 01FA 80BD              out 0x20,R24
 01FC                   .dbline 225
 01FC           ;     UCSRB = (1<<RXEN)|(1<<TXEN);       //允许串口发送和接收
 01FC 88E1              ldi R24,24
 01FE 8AB9              out 0xa,R24
 0200                   .dbline 226
 0200           ;     UBRR = BAU;
 0200 87E1              ldi R24,23
 0202 89B9              out 0x9,R24
 0204                   .dbline 229
 0204           ; 
 0204           ;  
 0204           ;     SendChar('>');              //通知PC机,BOOT下载准备就绪
 0204 0EE3              ldi R16,62
 0206 DEDF              xcall _SendChar
 0208                   .dbline 230
 0208           ;     delay();                    //延时等待PC机响应
 0208 E1DF              xcall _delay
 020A                   .dbline 231
 020A           ;       delay();
 020A E0DF              xcall _delay
 020C                   .dbline 232
 020C           ;       delay();
 020C DFDF              xcall _delay
 020E                   .dbline 233
 020E           ;       delay();
 020E DEDF              xcall _delay
 0210                   .dbline 234
 0210           ;       delay();
 0210 DDDF              xcall _delay
 0212                   .dbline 235
 0212           ;       delay();
 0212 DCDF              xcall _delay
 0214                   .dbline 236
 0214           ;       delay();
 0214 DBDF              xcall _delay
 0216                   .dbline 237
 0216           ;       delay();
 0216 DADF              xcall _delay
 0218                   .dbline 239
 0218           ;       
 0218           ;     BootFlag=UDR;             
 0218 4CB1              in R20,0xc
 021A                   .dbline 240
 021A           ;     if (BootFlag == '<') 
 021A 4C33              cpi R20,60
 021C 31F5              brne L62
 021E                   .dbline 241
 021E           ;       {
 021E                   .dbline 242
 021E           ;          SendChar(ChipType);
 021E 01E3              ldi R16,49
 0220 D1DF              xcall _SendChar
 0222           L64:
 0222                   .dbline 243
 0222           L65:
 0222                   .dbline 243
 0222           ;          while (RecChar()!='N');
 0222 CCDF              xcall _RecChar
 0224 0E34              cpi R16,78
 0226 E9F7              brne L64
 0228                   .dbline 244
 0228           ;          SendChar(BootSize);
 0228 04E6              ldi R16,100
 022A CCDF              xcall _SendChar
 022C           L67:
 022C                   .dbline 245
 022C           L68:
 022C                   .dbline 245
 022C           ;          while (RecChar()!='N');       
 022C C7DF              xcall _RecChar
 022E 0E34              cpi R16,78
 0230 E9F7              brne L67
 0232                   .dbline 246
 0232           ;          SendChar(BootVer);
 0232 06E6              ldi R16,102
 0234 C7DF              xcall _SendChar
 0236 18C0              xjmp L71
 0238           L70:
 0238                   .dbline 248
 0238           ;        while (1)
 0238           ;          {
 0238                   .dbline 249
 0238           ;            switch (RecChar())
 0238 C1DF              xcall _RecChar
 023A 402F              mov R20,R16
 023C 5527              clr R21
 023E 4534              cpi R20,69
 0240 E0E0              ldi R30,0
 0242 5E07              cpc R21,R30
 0244 59F0              breq L77
 0246 4534              cpi R20,69
 0248 E0E0              ldi R30,0
 024A 5E07              cpc R21,R30
 024C 6CF0              brlt L74
 024E           L81:
 024E 4735              cpi R20,87
 0250 E0E0              ldi R30,0
 0252 5E07              cpc R21,R30
 0254 09F0              breq L76
 0256 08C0              xjmp L74
 0258           X3:
 0258                   .dbline 250
 0258           ;              {
 0258           L76:
 0258                   .dbline 251
 0258           ;                case 'W': FlashLoad(); break;
 0258 D3DE              xcall _FlashLoad
 025A                   .dbline 251
 025A 06C0              xjmp L74
 025C           L77:
 025C                   .dbline 252
 025C           ;                case 'E': { 
 025C                   .dbline 253
 025C           ;                            SendChar('E');  //通知PC机,进入运用程序区
 025C 05E4              ldi R16,69
 025E B2DF              xcall _SendChar
 0260           L78:
 0260                   .dbline 254
 0260           L79:
 0260                   .dbline 254
 0260           ;                                        while (RecChar()!='N');
 0260 ADDF              xcall _RecChar
 0262 0E34              cpi R16,78
 0264 E9F7              brne L78
 0266                   .dbline 255
 0266           ;                            ExecCode();  
 0266 BCDF              xcall _ExecCode
 0268                   .dbline 256
 0268           ;                          } break;
 0268                   .dbline 256
 0268                   .dbline 257
 0268           ;                default : break;
 0268           L74:
 0268                   .dbline 259
 0268           L71:
 0268                   .dbline 247
 0268 E7CF              xjmp L70
 026A           X4:
 026A                   .dbline 260
 026A           ;              }
 026A           ;          }
 026A           ;       }
 026A           L62:
 026A                   .dbline 261
 026A           ;     SendChar('E');  //通知PC机,进入运用程序区
 026A 05E4              ldi R16,69
 026C ABDF              xcall _SendChar
 026E                   .dbline 263
 026E           ;       //while (RecChar()!='N');
 026E           ;     delay();
 026E AEDF              xcall _delay
 0270                   .dbline 264
 0270           ;       delay();
 0270 ADDF              xcall _delay
 0272                   .dbline 265
 0272           ;       delay();
 0272 ACDF              xcall _delay
 0274                   .dbline 266
 0274           ;       delay();
 0274 ABDF              xcall _delay
 0276                   .dbline 267
 0276           ;     ExecCode();
 0276 B4DF              xcall _ExecCode
 0278                   .dbline -2
 0278           L61:
 0278                   .dbline 0 ; func end
 0278 0895              ret
 027A                   .dbsym r BootFlag 20 c
 027A                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile D:\桌面\AVR_BO~1.2\bootloader\main.c
 0000           _PageAddress::
 0000                   .blkb 2
 0002                   .dbsym e PageAddress _PageAddress i
 0002           _RealPageAddress::
 0002                   .blkb 2
 0004                   .dbsym e RealPageAddress _RealPageAddress i
 0004           _PageBuffer::
 0004                   .blkb 128
 0084                   .dbsym e PageBuffer _PageBuffer A[128:128]c

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -