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

📄 main.lis

📁 ATmal mega88 芯片的bootload源程序
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 0194 0895              ret
 0196                   .dbsym r c 16 c
 0196                   .dbend
 0196                   .dbfunc e delay _delay fV
 0196           ;              i -> R16,R17
                        .even
 0196           _delay::
 0196                   .dbline -1
 0196                   .dbline 205
 0196           ;   }
 0196           ; void delay(void)  
 0196           ;   {
 0196                   .dbline 207
 0196           ;     unsigned int i;
 0196           ;     for (i=0;i<65530;i++);
 0196 0027              clr R16
 0198 1127              clr R17
 019A 02C0              xjmp L45
 019C           L42:
 019C                   .dbline 207
 019C           L43:
 019C                   .dbline 207
 019C 0F5F              subi R16,255  ; offset = 1
 019E 1F4F              sbci R17,255
 01A0           L45:
 01A0                   .dbline 207
 01A0 8AEF              ldi R24,250
 01A2 9FEF              ldi R25,255
 01A4 A0E0              ldi R26,0
 01A6 B0E0              ldi R27,0
 01A8 1801              movw R2,R16
 01AA 4424              clr R4
 01AC 5524              clr R5
 01AE 2816              cp R2,R24
 01B0 3906              cpc R3,R25
 01B2 4A06              cpc R4,R26
 01B4 5B06              cpc R5,R27
 01B6 94F3              brlt L42
 01B8           X12:
 01B8                   .dbline -2
 01B8           L41:
 01B8                   .dbline 0 ; func end
 01B8 0895              ret
 01BA                   .dbsym r i 16 i
 01BA                   .dbend
 01BA                   .dbfunc e ExecCode _ExecCode fV
                        .even
 01BA           _ExecCode::
 01BA                   .dbline -1
 01BA                   .dbline 212
 01BA           ;   }
 01BA           ; 
 01BA           ; /*****************************************************************************/
 01BA           ; void ExecCode(void)
 01BA           ;   {
 01BA                   .dbline 213
 01BA           ;     MCUCR=(1<<IVCE);      //中断向量表移位允许
 01BA 81E0              ldi R24,1
 01BC 85BF              out 0x35,R24
 01BE                   .dbline 214
 01BE           ;     MCUCR=0X00;           //中断向量指向应用程序区
 01BE 2224              clr R2
 01C0 25BE              out 0x35,R2
 01C2                   .dbline 215
 01C2           ;     asm("jmp 0x0000");              
 01C2 0C940000          jmp 0x0000
 01C6                   .dbline -2
 01C6           L46:
 01C6                   .dbline 0 ; func end
 01C6 0895              ret
 01C8                   .dbend
 01C8                   .dbfunc e main _main fV
 01C8           ;           iTry -> R20
 01C8           ;        TempInt -> R22,R23
 01C8           ;       BootFlag -> R22
                        .even
 01C8           _main::
 01C8                   .dbline -1
 01C8                   .dbline 219
 01C8           ;   }
 01C8           ;               
 01C8           ; void main(void)
 01C8           ;   {
 01C8                   .dbline 239
 01C8           ;     unsigned char BootFlag;
 01C8           ;     unsigned int TempInt;
 01C8           ;       char iTry;
 01C8           ;       
 01C8           ;     #ifdef InteClk                //如果使用内部时钟,读取时钟校准值
 01C8           ;        OSCCAL=read_flash(OscAddress);
 01C8           ;     #endif
 01C8           ; 
 01C8           ; #ifdef W0     
 01C8           ;  //pei 拷贝W0的PortInit
 01C8           ;       PORTB = 0x0F;//rfslp,fs123=1
 01C8           ;       DDRB  = 0xFF;//bit1=output
 01C8           ;       PORTC = 0x21;//0x20;//rfrst=1,not reset! 
 01C8           ;       DDRC  = 0x7F;
 01C8           ;       PORTD = 0x0C;
 01C8           ;       DDRD  = 0xF0;
 01C8           ; #else
 01C8           ; #endif
 01C8           ;     
 01C8           ;     UCSR0C=(1<<UCSZ01)|(1<<UCSZ00); //8位数据+1位停止(1<<URSEL)|
 01C8 86E0              ldi R24,6
 01CA 8093C200          sts 194,R24
 01CE                   .dbline 240
 01CE           ;     UCSR0B = (1<<RXEN0)|(1<<TXEN0);       //允许串口发送和接收
 01CE 88E1              ldi R24,24
 01D0 8093C100          sts 193,R24
 01D4                   .dbline 241
 01D4           ;     UBRR0 = BAU;
 01D4 83E3              ldi R24,51
 01D6 90E0              ldi R25,0
 01D8 9093C500          sts 196+1,R25
 01DC 8093C400          sts 196,R24
 01E0                   .dbline 243
 01E0           ; 
 01E0           ;       iTry=20;
 01E0 44E1              ldi R20,20
 01E2           L48:
 01E2                   .dbline 249
 01E2           ; STARTBOOT://pei未下载程序时重复等待
 01E2           ; #ifdef W0     
 01E2           ;     PORTC=PORTC^0x03;//指示灯闪烁
 01E2           ; #endif
 01E2           ;       
 01E2           ;     SendChar('>');              //通知PC机,BOOT下载准备就绪
 01E2 0EE3              ldi R16,62
 01E4 D1DF              xcall _SendChar
 01E6                   .dbline 250
 01E6           ;     delay();                    //延时等待PC机响应
 01E6 D7DF              xcall _delay
 01E8                   .dbline 251
 01E8           ;     BootFlag=UDR0;
 01E8 6091C600          lds R22,198
 01EC                   .dbline 252
 01EC           ;     if (BootFlag == '<') 
 01EC 6C33              cpi R22,60
 01EE E9F4              brne L49
 01F0           X13:
 01F0                   .dbline 253
 01F0           ;       {
 01F0                   .dbline 254
 01F0           ;            SendChar(ChipType);   //芯片版本信息
 01F0 01E3              ldi R16,49
 01F2 CADF              xcall _SendChar
 01F4                   .dbline 255
 01F4           ;          SendChar(BootSize);
 01F4 03E6              ldi R16,99
 01F6 C8DF              xcall _SendChar
 01F8                   .dbline 256
 01F8           ;          SendChar(BootVer);
 01F8 07E6              ldi R16,103
 01FA C6DF              xcall _SendChar
 01FC 15C0              xjmp L52
 01FE           L51:
 01FE                   .dbline 258
 01FE           ;          while (1)
 01FE           ;          {
 01FE                   .dbline 259
 01FE           ;            switch (RecChar())
 01FE BDDF              xcall _RecChar
 0200 602F              mov R22,R16
 0202 7727              clr R23
 0204 6534              cpi R22,69
 0206 E0E0              ldi R30,0
 0208 7E07              cpc R23,R30
 020A 59F0              breq L58
 020C           X14:
 020C 6534              cpi R22,69
 020E E0E0              ldi R30,0
 0210 7E07              cpc R23,R30
 0212 54F0              brlt L55
 0214           X15:
 0214           L59:
 0214 6735              cpi R22,87
 0216 E0E0              ldi R30,0
 0218 7E07              cpc R23,R30
 021A 09F0              breq L57
 021C           X16:
 021C 05C0              xjmp L55
 021E           L57:
 021E                   .dbline 261
 021E           ;              {
 021E           ;                case 'W': FlashLoad();
 021E F0DE              xcall _FlashLoad
 0220                   .dbline 262
 0220           ;                                  break;
 0220 03C0              xjmp L55
 0222           L58:
 0222                   .dbline 263
 0222           ;                case 'E': { 
 0222                   .dbline 264
 0222           ;                            SendChar('E');  //通知PC机,进入运用程序区
 0222 05E4              ldi R16,69
 0224 B1DF              xcall _SendChar
 0226                   .dbline 265
 0226           ;                            ExecCode();  
 0226 C9DF              xcall _ExecCode
 0228                   .dbline 266
 0228           ;                          } break;
 0228                   .dbline 266
 0228                   .dbline 267
 0228           ;                default : break;
 0228           L55:
 0228                   .dbline 269
 0228           ;              }
 0228           ;          }
 0228           L52:
 0228                   .dbline 257
 0228 EACF              xjmp L51
 022A           L49:
 022A                   .dbline 271
 022A           ;       }
 022A           ;     SendChar('E');  
 022A 05E4              ldi R16,69
 022C ADDF              xcall _SendChar
 022E                   .dbline 273
 022E           ;       
 022E           ;       TempInt = read_program_memory(0,0);//pei
 022E 2227              clr R18
 0230 0027              clr R16
 0232 1127              clr R17
 0234 0E940000          xcall _read_program_memory
 0238 B801              movw R22,R16
 023A                   .dbline 274
 023A           ;       if (TempInt==0xFFFF) goto STARTBOOT;
 023A 0F3F              cpi R16,255
 023C EFEF              ldi R30,255
 023E 1E07              cpc R17,R30
 0240 09F4              brne L60
 0242           X17:
 0242                   .dbline 274
 0242 CFCF              xjmp L48
 0244           L60:
 0244                   .dbline 275
 0244           ;         else{ iTry--;
 0244                   .dbline 275
 0244 4A95              dec R20
 0246                   .dbline 276
 0246           ;               if (iTry>0) goto STARTBOOT;}
 0246 80E0              ldi R24,0
 0248 8417              cp R24,R20
 024A 08F4              brsh L62
 024C           X18:
 024C                   .dbline 276
 024C CACF              xjmp L48
 024E           L62:
 024E                   .dbline 276
 024E                   .dbline 278
 024E           ;       
 024E           ;     ExecCode();//执行用户区程序
 024E B5DF              xcall _ExecCode
 0250                   .dbline -2
 0250           L47:
 0250                   .dbline 0 ; func end
 0250 0895              ret
 0252                   .dbsym r iTry 20 c
 0252                   .dbsym r TempInt 22 i
 0252                   .dbsym r BootFlag 22 c
 0252                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile F:\程序\新建文~1\BootLoad_88可用\main.c
 0000           _PageAddress::
 0000                   .blkb 2
 0002                   .dbsym e PageAddress _PageAddress i
 0002           _PageBuffer::
 0002                   .blkb 128
 0082                   .dbsym e PageBuffer _PageBuffer A[128:128]c
 0082           ;   }

⌨️ 快捷键说明

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