📄 main.lis
字号:
01D4 .dbline 0 ; func end
01D4 0895 ret
01D6 .dbend
01D6 .dbfunc e SendChar _SendChar fV
01D6 ; c -> R16
.even
01D6 _SendChar::
01D6 .dbline -1
01D6 .dbline 256
01D6 ; #endif
01D6 ; }
01D6 ; /*****************************************************************************/
01D6 ; void SendChar(unsigned char c)
01D6 ; {
01D6 L54:
01D6 .dbline 262
01D6 L55:
01D6 .dbline 262
01D6 ; #if (ChipType == Atmega8)||(ChipType == Atmega16)||(ChipType == Atmega32)
01D6 ; while (!(UCSRA&(1<<UDRE)));
01D6 ; UDR=c;
01D6 ; #endif
01D6 ; #if (ChipType == Atmega64)||(ChipType == Atmega128)
01D6 ; while (!(UCSR1A&(1<<UDRE1)));
01D6 20909B00 lds R2,155
01DA 25FE sbrs R2,5
01DC FCCF rjmp L54
01DE .dbline 263
01DE ; UDR1=c;
01DE 00939C00 sts 156,R16
01E2 .dbline -2
01E2 .dbline 265
01E2 ; #endif
01E2 ; }
01E2 L53:
01E2 .dbline 0 ; func end
01E2 0895 ret
01E4 .dbsym r c 16 c
01E4 .dbend
01E4 .dbfunc e delay _delay fV
01E4 ; i -> R16,R17
.even
01E4 _delay::
01E4 .dbline -1
01E4 .dbline 267
01E4 ; void delay(void)
01E4 ; {
01E4 .dbline 269
01E4 0027 clr R16
01E6 1127 clr R17
01E8 02C0 xjmp L61
01EA L58:
01EA .dbline 269
01EA L59:
01EA .dbline 269
01EA 0F5F subi R16,255 ; offset = 1
01EC 1F4F sbci R17,255
01EE L61:
01EE .dbline 269
01EE ; unsigned int i;
01EE ; for (i=0;i<65530;i++);
01EE 0A3F cpi R16,250
01F0 EFEF ldi R30,255
01F2 1E07 cpc R17,R30
01F4 D0F3 brlo L58
01F6 .dbline -2
01F6 .dbline 270
01F6 ; }
01F6 L57:
01F6 .dbline 0 ; func end
01F6 0895 ret
01F8 .dbsym r i 16 i
01F8 .dbend
01F8 .dbfunc e ExecCode _ExecCode fV
.even
01F8 _ExecCode::
01F8 .dbline -1
01F8 .dbline 274
01F8 ;
01F8 ; /*****************************************************************************/
01F8 ; void ExecCode(void)
01F8 ; {
01F8 .dbline 276
01F8 ; #ifdef RAMPZ_FLAG
01F8 ; RAMPZ = 0;
01F8 2224 clr R2
01FA 2BBE out 0x3b,R2
01FC .dbline 278
01FC ; #endif
01FC ; INTVECREG=0x01; //中断向量表移位允许
01FC 81E0 ldi R24,1
01FE 85BF out 0x35,R24
0200 .dbline 279
0200 ; INTVECREG=0x00; //中断向量指向应用程序区
0200 25BE out 0x35,R2
0202 .dbline 280
0202 ; asm("jmp 0x0000");
0202 0C940000 jmp 0x0000
0206 .dbline -2
0206 .dbline 281
0206 ; }
0206 L62:
0206 .dbline 0 ; func end
0206 0895 ret
0208 .dbend
0208 .dbfunc e main _main fV
0208 ; BootFlag -> R20
.even
0208 _main::
0208 .dbline -1
0208 .dbline 284
0208 ;
0208 ; void main(void)
0208 ; {
0208 .dbline 288
0208 ; unsigned char BootFlag;
0208 ;
0208 ; #ifdef InteClk //如果使用内部时钟,读取时钟校准值
0208 ; OSCCAL=read_flash(OscAddress);
0208 0FEF ldi R16,8191
020A 1FE1 ldi R17,31
020C 0E940000 xcall _read_flash
0210 00936F00 sts 111,R16
0214 .dbline 300
0214 ; #endif
0214 ;
0214 ; #if (ChipType == Atmega8)||(ChipType == Atmega16)||(ChipType == Atmega32)
0214 ; UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //8位数据+1位停止
0214 ; UCSRB = (1<<RXEN)|(1<<TXEN); //允许串口发送和接收
0214 ; UBRR = BAU;
0214 ; #endif
0214 ;
0214 ; #if (ChipType == Atmega64)||(ChipType == Atmega128)
0214 ; //------------------使用串口1为Boot口-----------------
0214 ; //UCSR1C=(1<<URSEL1)|(1<<UCSZ11)|(1<<UCSZ10); //8位数据+1位停止
0214 ; UCSR1C=(1<<UCSZ11)|(1<<UCSZ10);//|(1<<USBS1);
0214 86E0 ldi R24,6
0216 80939D00 sts 157,R24
021A .dbline 301
021A ; UCSR1B = (1<<RXEN1)|(1<<TXEN1); //允许串口发送和接收
021A 88E1 ldi R24,24
021C 80939A00 sts 154,R24
0220 .dbline 302
0220 ; UBRR1L=((fosc/16/baud1)-1)%256;
0220 8CE0 ldi R24,12
0222 80939900 sts 153,R24
0226 .dbline 303
0226 ; UBRR1H=((fosc/16/baud1)-1)/256;
0226 2224 clr R2
0228 20929800 sts 152,R2
022C .dbline 305
022C ; #endif
022C ; SendChar('>'); //通知PC机,BOOT下载准备就绪
022C 0EE3 ldi R16,62
022E D3DF xcall _SendChar
0230 .dbline 306
0230 ; delay(); //延时等待PC机响应
0230 D9DF xcall _delay
0232 .dbline 307
0232 ; delay();
0232 D8DF xcall _delay
0234 .dbline 308
0234 ; delay();
0234 D7DF xcall _delay
0236 .dbline 309
0236 ; delay();
0236 D6DF xcall _delay
0238 .dbline 310
0238 ; delay();
0238 D5DF xcall _delay
023A .dbline 311
023A ; delay();
023A D4DF xcall _delay
023C .dbline 312
023C ; delay();
023C D3DF xcall _delay
023E .dbline 313
023E ; delay();
023E D2DF xcall _delay
0240 .dbline 314
0240 ; BootFlag=UDR1;
0240 40919C00 lds R20,156
0244 .dbline 315
0244 ; if (BootFlag == '<')
0244 4C33 cpi R20,60
0246 31F5 brne L64
0248 .dbline 316
0248 ; {
0248 .dbline 317
0248 ; SendChar(ChipType);
0248 04E3 ldi R16,52
024A C5DF xcall _SendChar
024C L66:
024C .dbline 318
024C L67:
024C .dbline 318
024C ; while (RecChar()!='N');
024C BDDF xcall _RecChar
024E 0E34 cpi R16,78
0250 E9F7 brne L66
0252 .dbline 319
0252 ; SendChar(BootSize);
0252 04E6 ldi R16,100
0254 C0DF xcall _SendChar
0256 L69:
0256 .dbline 320
0256 L70:
0256 .dbline 320
0256 ; while (RecChar()!='N');
0256 B8DF xcall _RecChar
0258 0E34 cpi R16,78
025A E9F7 brne L69
025C .dbline 321
025C ; SendChar(BootVer);
025C 06E6 ldi R16,102
025E BBDF xcall _SendChar
0260 18C0 xjmp L73
0262 L72:
0262 .dbline 323
0262 ; while (1)
0262 ; {
0262 .dbline 324
0262 ; switch (RecChar())
0262 B2DF xcall _RecChar
0264 402F mov R20,R16
0266 5527 clr R21
0268 4534 cpi R20,69
026A E0E0 ldi R30,0
026C 5E07 cpc R21,R30
026E 59F0 breq L79
0270 4534 cpi R20,69
0272 E0E0 ldi R30,0
0274 5E07 cpc R21,R30
0276 6CF0 brlt L76
0278 L83:
0278 4735 cpi R20,87
027A E0E0 ldi R30,0
027C 5E07 cpc R21,R30
027E 09F0 breq L78
0280 08C0 xjmp L76
0282 X3:
0282 .dbline 325
0282 ; {
0282 L78:
0282 .dbline 326
0282 ; case 'W': FlashLoad(); break;
0282 BEDE xcall _FlashLoad
0284 .dbline 326
0284 06C0 xjmp L76
0286 L79:
0286 .dbline 327
0286 ; case 'E': {
0286 .dbline 328
0286 ; SendChar('E'); //通知PC机,进入运用程序区
0286 05E4 ldi R16,69
0288 A6DF xcall _SendChar
028A L80:
028A .dbline 329
028A L81:
028A .dbline 329
028A ; while (RecChar()!='N');
028A 9EDF xcall _RecChar
028C 0E34 cpi R16,78
028E E9F7 brne L80
0290 .dbline 330
0290 ; ExecCode();
0290 B3DF xcall _ExecCode
0292 .dbline 331
0292 ; } break;
0292 .dbline 331
0292 .dbline 332
0292 ; default : break;
0292 L76:
0292 .dbline 334
0292 L73:
0292 .dbline 322
0292 E7CF xjmp L72
0294 X4:
0294 .dbline 335
0294 ; }
0294 ; }
0294 ; }
0294 L64:
0294 .dbline 336
0294 ; SendChar('E'); //通知PC机,进入运用程序区
0294 05E4 ldi R16,69
0296 9FDF xcall _SendChar
0298 .dbline 338
0298 ; //while (RecChar()!='N');
0298 ; delay();
0298 A5DF xcall _delay
029A .dbline 339
029A ; delay();
029A A4DF xcall _delay
029C .dbline 340
029C ; delay();
029C A3DF xcall _delay
029E .dbline 341
029E ; delay();
029E A2DF xcall _delay
02A0 .dbline 342
02A0 ; ExecCode();
02A0 .dbline -2
02A0 .dbline 343
02A0 ; }
02A0 L63:
02A0 .dbline 0 ; func end
02A0 ABCF xjmp _ExecCode
02A2 .dbsym r BootFlag 20 c
02A2 .dbend
.area bss(ram, con, rel)
0000 .dbfile E:\icc\peterf\BootLoad\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 256
0104 .dbsym e PageBuffer _PageBuffer A[256:256]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -