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

📄 main.lis

📁 BootLoad_Pei&Ecirc &Ccedil ICC&micro &Auml &Ocirc &acute &acute ú&Acirc &euml &pound &not MegaLoad
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 017E                   .dbline 205
 017E           ;   }
 017E           ; void delay(void)  
 017E           ;   {
 017E                   .dbline 207
 017E 0027              clr R16
 0180 1127              clr R17
 0182 02C0              rjmp L45
 0184           L42:
 0184                   .dbline 207
 0184           L43:
 0184                   .dbline 207
 0184 0F5F              subi R16,255  ; offset = 1
 0186 1F4F              sbci R17,255
 0188           L45:
 0188                   .dbline 207
 0188           ;     unsigned int i;
 0188           ;     for (i=0;i<65530;i++);
 0188 0A3F              cpi R16,250
 018A EFEF              ldi R30,255
 018C 1E07              cpc R17,R30
 018E D0F3              brlo L42
 0190                   .dbline -2
 0190           L41:
 0190                   .dbline 0 ; func end
 0190 0895              ret
 0192                   .dbsym r i 16 i
 0192                   .dbend
 0192                   .dbfunc e ExecCode _ExecCode fV
                        .even
 0192           _ExecCode::
 0192                   .dbline -1
 0192                   .dbline 212
 0192           ;   }
 0192           ; 
 0192           ; /*****************************************************************************/
 0192           ; void ExecCode(void)
 0192           ;   {
 0192                   .dbline 213
 0192           ;     GICR=0X01;           //中断向量表移位允许
 0192 81E0              ldi R24,1
 0194 8BBF              out 0x3b,R24
 0196                   .dbline 214
 0196           ;     GICR=0X00;           //中断向量指向应用程序区
 0196 2224              clr R2
 0198 2BBE              out 0x3b,R2
 019A                   .dbline 215
 019A           ;     asm("jmp 0x0000");              
 019A 0C940000          jmp 0x0000
 019E                   .dbline -2
 019E           L46:
 019E                   .dbline 0 ; func end
 019E 0895              ret
 01A0                   .dbend
 01A0                   .dbfunc e main _main fV
 01A0           ;           iTry -> R20
 01A0           ;        TempInt -> R10,R11
 01A0           ;       BootFlag -> R22
                        .even
 01A0           _main::
 01A0                   .dbline -1
 01A0                   .dbline 219
 01A0           ;   }
 01A0           ;               
 01A0           ; void main(void)
 01A0           ;   {
 01A0                   .dbline 230
 01A0           ;     unsigned char BootFlag;
 01A0           ;     unsigned int TempInt;
 01A0           ;       char iTry;
 01A0           ;       
 01A0           ;     #ifdef InteClk                //如果使用内部时钟,读取时钟校准值
 01A0           ;        OSCCAL=read_flash(OscAddress);
 01A0           ;     #endif
 01A0           ; 
 01A0           ; #ifdef W0     
 01A0           ;  //pei 拷贝W0的PortInit
 01A0           ;       PORTB = 0x0F;//rfslp,fs123=1
 01A0 8FE0              ldi R24,15
 01A2 88BB              out 0x18,R24
 01A4                   .dbline 231
 01A4           ;       DDRB  = 0xFF;//bit1=output
 01A4 8FEF              ldi R24,255
 01A6 87BB              out 0x17,R24
 01A8                   .dbline 232
 01A8           ;       PORTC = 0x21;//0x20;//rfrst=1,not reset! 
 01A8 81E2              ldi R24,33
 01AA 85BB              out 0x15,R24
 01AC                   .dbline 233
 01AC           ;       DDRC  = 0x7F;
 01AC 8FE7              ldi R24,127
 01AE 84BB              out 0x14,R24
 01B0                   .dbline 234
 01B0           ;       PORTD = 0x0C;
 01B0 8CE0              ldi R24,12
 01B2 82BB              out 0x12,R24
 01B4                   .dbline 235
 01B4           ;       DDRD  = 0xF0;
 01B4 80EF              ldi R24,240
 01B6 81BB              out 0x11,R24
 01B8                   .dbline 239
 01B8           ; #else
 01B8           ; #endif
 01B8           ;     
 01B8           ;     UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //8位数据+1位停止
 01B8 86E8              ldi R24,134
 01BA 80BD              out 0x20,R24
 01BC                   .dbline 240
 01BC           ;     UCSRB = (1<<RXEN)|(1<<TXEN);       //允许串口发送和接收
 01BC 88E1              ldi R24,24
 01BE 8AB9              out 0xa,R24
 01C0                   .dbline 241
 01C0           ;     UBRR = BAU;
 01C0 83E2              ldi R24,35
 01C2 89B9              out 0x9,R24
 01C4                   .dbline 243
 01C4           ; 
 01C4           ;       iTry=20;
 01C4 44E1              ldi R20,20
 01C6           L48:
 01C6                   .dbline 246
 01C6           ; STARTBOOT://pei未下载程序时重复等待
 01C6           ; #ifdef W0     
 01C6           ;     PORTC=PORTC^0x03;//指示灯闪烁
 01C6 83E0              ldi R24,3
 01C8 25B2              in R2,0x15
 01CA 2826              eor R2,R24
 01CC 25BA              out 0x15,R2
 01CE                   .dbline 249
 01CE           ; #endif
 01CE           ;       
 01CE           ;     SendChar('>');              //通知PC机,BOOT下载准备就绪
 01CE 0EE3              ldi R16,62
 01D0 D2DF              rcall _SendChar
 01D2                   .dbline 250
 01D2           ;     delay();                    //延时等待PC机响应
 01D2 D5DF              rcall _delay
 01D4                   .dbline 251
 01D4           ;     BootFlag=UDR;
 01D4 6CB1              in R22,0xc
 01D6                   .dbline 252
 01D6           ;     if (BootFlag == '<') 
 01D6 6C33              cpi R22,60
 01D8 F9F4              brne L49
 01DA                   .dbline 253
 01DA           ;       {
 01DA                   .dbline 254
 01DA           ;            SendChar(ChipType);   //芯片版本信息
 01DA 00E3              ldi R16,48
 01DC CCDF              rcall _SendChar
 01DE                   .dbline 255
 01DE           ;          SendChar(BootSize);
 01DE 03E6              ldi R16,99
 01E0 CADF              rcall _SendChar
 01E2                   .dbline 256
 01E2           ;          SendChar(BootVer);
 01E2 07E6              ldi R16,103
 01E4 C8DF              rcall _SendChar
 01E6 17C0              rjmp L52
 01E8           L51:
 01E8                   .dbline 258
 01E8           ;          while (1)
 01E8           ;          {
 01E8                   .dbline 259
 01E8           ;            switch (RecChar())
 01E8 C2DF              rcall _RecChar
 01EA C02E              mov R12,R16
 01EC DD24              clr R13
 01EE C601              movw R24,R12
 01F0 8534              cpi R24,69
 01F2 E0E0              ldi R30,0
 01F4 9E07              cpc R25,R30
 01F6 61F0              breq L58
 01F8 8534              cpi R24,69
 01FA E0E0              ldi R30,0
 01FC 9E07              cpc R25,R30
 01FE 5CF0              brlt L55
 0200           L59:
 0200 C601              movw R24,R12
 0202 8735              cpi R24,87
 0204 E0E0              ldi R30,0
 0206 9E07              cpc R25,R30
 0208 09F0              breq L57
 020A 05C0              rjmp L55
 020C           X1:
 020C                   .dbline 260
 020C           ;              {
 020C           L57:
 020C                   .dbline 261
 020C           ;                case 'W': FlashLoad();
 020C F9DE              rcall _FlashLoad
 020E                   .dbline 262
 020E           ;                                  break;
 020E 03C0              rjmp L55
 0210           L58:
 0210                   .dbline 263
 0210           ;                case 'E': { 
 0210                   .dbline 264
 0210           ;                            SendChar('E');  //通知PC机,进入运用程序区
 0210 05E4              ldi R16,69
 0212 B1DF              rcall _SendChar
 0214                   .dbline 265
 0214           ;                            ExecCode();  
 0214 BEDF              rcall _ExecCode
 0216                   .dbline 266
 0216           ;                          } break;
 0216                   .dbline 266
 0216                   .dbline 267
 0216           ;                default : break;
 0216           L55:
 0216                   .dbline 269
 0216           L52:
 0216                   .dbline 257
 0216 E8CF              rjmp L51
 0218           X2:
 0218                   .dbline 270
 0218           ;              }
 0218           ;          }
 0218           ;       }
 0218           L49:
 0218                   .dbline 271
 0218           ;     SendChar('E');  
 0218 05E4              ldi R16,69
 021A ADDF              rcall _SendChar
 021C                   .dbline 273
 021C           ;       
 021C           ;       TempInt = read_program_memory(0,0);//pei
 021C 2227              clr R18
 021E 0027              clr R16
 0220 1127              clr R17
 0222 00D0              rcall _read_program_memory
 0224 5801              movw R10,R16
 0226                   .dbline 274
 0226           ;       if (TempInt==0xFFFF) goto STARTBOOT;
 0226 0F3F              cpi R16,255
 0228 EFEF              ldi R30,255
 022A 1E07              cpc R17,R30
 022C 09F4              brne L60
 022E                   .dbline 274
 022E CBCF              rjmp L48
 0230           L60:
 0230                   .dbline 275
 0230           ;         else{ iTry--;
 0230                   .dbline 275
 0230 4A95              dec R20
 0232                   .dbline 276
 0232 2224              clr R2
 0234 2416              cp R2,R20
 0236 08F4              brsh L62
 0238                   .dbline 276
 0238 C6CF              rjmp L48
 023A           L62:
 023A                   .dbline 276
 023A           ;               if (iTry>0) goto STARTBOOT;}
 023A                   .dbline 278
 023A           ;       
 023A           ;     ExecCode();//执行用户区程序
 023A ABDF              rcall _ExecCode
 023C                   .dbline -2
 023C           L47:
 023C                   .dbline 0 ; func end
 023C 0895              ret
 023E                   .dbsym r iTry 20 c
 023E                   .dbsym r TempInt 10 i
 023E                   .dbsym r BootFlag 22 c
 023E                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile D:\IccAvr\Pei\BootLoad_Pei\main.c
 0000           _PageAddress::
 0000                   .blkb 2
 0002                   .dbsym e PageAddress _PageAddress i
 0002           _PageBuffer::
 0002                   .blkb 64
 0042                   .dbsym e PageBuffer _PageBuffer A[64:64]c

⌨️ 快捷键说明

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