📄 main.lis
字号:
01B4 ; void SendChar(unsigned char c)
01B4 ; {
01B4 L52:
01B4 .dbline 185
01B4 L53:
01B4 .dbline 185
01B4 ; while (!(UCSRA&(1<<UDRE)));
01B4 5D9B sbis 0xb,5
01B6 FECF rjmp L52
01B8 .dbline 186
01B8 ; UDR=c;
01B8 0CB9 out 0xc,R16
01BA .dbline -2
01BA .dbline 187
01BA ; }
01BA L51:
01BA .dbline 0 ; func end
01BA 0895 ret
01BC .dbsym r c 16 c
01BC .dbend
01BC .dbfunc e delay _delay fV
01BC ; i -> R16,R17
.even
01BC _delay::
01BC .dbline -1
01BC .dbline 189
01BC ; void delay(void)
01BC ; {
01BC .dbline 191
01BC 0027 clr R16
01BE 1127 clr R17
01C0 02C0 rjmp L59
01C2 L56:
01C2 .dbline 191
01C2 L57:
01C2 .dbline 191
01C2 0F5F subi R16,255 ; offset = 1
01C4 1F4F sbci R17,255
01C6 L59:
01C6 .dbline 191
01C6 ; unsigned int i;
01C6 ; for (i=0;i<65530;i++);
01C6 0A3F cpi R16,250
01C8 EFEF ldi R30,255
01CA 1E07 cpc R17,R30
01CC D0F3 brlo L56
01CE .dbline -2
01CE .dbline 192
01CE ; }
01CE L55:
01CE .dbline 0 ; func end
01CE 0895 ret
01D0 .dbsym r i 16 i
01D0 .dbend
01D0 .dbfunc e ExecCode _ExecCode fV
.even
01D0 _ExecCode::
01D0 .dbline -1
01D0 .dbline 196
01D0 ;
01D0 ; /*****************************************************************************/
01D0 ; void ExecCode(void)
01D0 ; {
01D0 .dbline 200
01D0 ; #ifdef RAMPZ_FLAG
01D0 ; RAMPZ = 0;
01D0 ; #endif
01D0 ; INTVECREG=0x01; //中断向量表移位允许
01D0 81E0 ldi R24,1
01D2 8BBF out 0x3b,R24
01D4 .dbline 201
01D4 ; INTVECREG=0x00; //中断向量指向应用程序区
01D4 2224 clr R2
01D6 2BBE out 0x3b,R2
01D8 .dbline 202
01D8 ; asm("jmp 0x0000");
01D8 0C940000 jmp 0x0000
01DC .dbline -2
01DC .dbline 203
01DC ; }
01DC L60:
01DC .dbline 0 ; func end
01DC 0895 ret
01DE .dbend
01DE .dbfunc e main _main fV
01DE ; BootFlag -> R20
.even
01DE _main::
01DE .dbline -1
01DE .dbline 206
01DE ;
01DE ; void main(void)
01DE ; {
01DE .dbline 210
01DE ; unsigned char BootFlag;
01DE ;
01DE ; #ifdef InteClk //如果使用内部时钟,读取时钟校准值
01DE ; OSCCAL=read_flash(OscAddress);
01DE 0FEF ldi R16,8191
01E0 1FE1 ldi R17,31
01E2 00D0 rcall _read_flash
01E4 01BF out 0x31,R16
01E6 .dbline 213
01E6 ; #endif
01E6 ;
01E6 ; UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //8位数据+1位停止
01E6 86E8 ldi R24,134
01E8 80BD out 0x20,R24
01EA .dbline 214
01EA ; UCSRB = (1<<RXEN)|(1<<TXEN); //允许串口发送和接收
01EA 88E1 ldi R24,24
01EC 8AB9 out 0xa,R24
01EE .dbline 215
01EE ; UBRR = BAU;
01EE 87E1 ldi R24,23
01F0 89B9 out 0x9,R24
01F2 .dbline 218
01F2 ;
01F2 ;
01F2 ; SendChar('>'); //通知PC机,BOOT下载准备就绪
01F2 0EE3 ldi R16,62
01F4 DFDF rcall _SendChar
01F6 .dbline 219
01F6 ; delay(); //延时等待PC机响应
01F6 E2DF rcall _delay
01F8 .dbline 220
01F8 ; delay();
01F8 E1DF rcall _delay
01FA .dbline 221
01FA ; delay();
01FA E0DF rcall _delay
01FC .dbline 222
01FC ; delay();
01FC DFDF rcall _delay
01FE .dbline 223
01FE ; delay();
01FE DEDF rcall _delay
0200 .dbline 224
0200 ; delay();
0200 DDDF rcall _delay
0202 .dbline 225
0202 ; delay();
0202 DCDF rcall _delay
0204 .dbline 226
0204 ; delay();
0204 DBDF rcall _delay
0206 .dbline 228
0206 ;
0206 ; BootFlag=UDR;
0206 4CB1 in R20,0xc
0208 .dbline 229
0208 ; if (BootFlag == '<')
0208 4C33 cpi R20,60
020A 31F5 brne L62
020C .dbline 230
020C ; {
020C .dbline 231
020C ; SendChar(ChipType);
020C 01E3 ldi R16,49
020E D2DF rcall _SendChar
0210 L64:
0210 .dbline 232
0210 L65:
0210 .dbline 232
0210 ; while (RecChar()!='N');
0210 CDDF rcall _RecChar
0212 0E34 cpi R16,78
0214 E9F7 brne L64
0216 .dbline 233
0216 ; SendChar(BootSize);
0216 04E6 ldi R16,100
0218 CDDF rcall _SendChar
021A L67:
021A .dbline 234
021A L68:
021A .dbline 234
021A ; while (RecChar()!='N');
021A C8DF rcall _RecChar
021C 0E34 cpi R16,78
021E E9F7 brne L67
0220 .dbline 235
0220 ; SendChar(BootVer);
0220 06E6 ldi R16,102
0222 C8DF rcall _SendChar
0224 18C0 rjmp L71
0226 L70:
0226 .dbline 237
0226 ; while (1)
0226 ; {
0226 .dbline 238
0226 ; switch (RecChar())
0226 C2DF rcall _RecChar
0228 402F mov R20,R16
022A 5527 clr R21
022C 4534 cpi R20,69
022E E0E0 ldi R30,0
0230 5E07 cpc R21,R30
0232 59F0 breq L77
0234 4534 cpi R20,69
0236 E0E0 ldi R30,0
0238 5E07 cpc R21,R30
023A 6CF0 brlt L74
023C L81:
023C 4735 cpi R20,87
023E E0E0 ldi R30,0
0240 5E07 cpc R21,R30
0242 09F0 breq L76
0244 08C0 rjmp L74
0246 X3:
0246 .dbline 239
0246 ; {
0246 L76:
0246 .dbline 240
0246 ; case 'W': FlashLoad(); break;
0246 DCDE rcall _FlashLoad
0248 .dbline 240
0248 06C0 rjmp L74
024A L77:
024A .dbline 241
024A ; case 'E': {
024A .dbline 242
024A ; SendChar('E'); //通知PC机,进入运用程序区
024A 05E4 ldi R16,69
024C B3DF rcall _SendChar
024E L78:
024E .dbline 243
024E L79:
024E .dbline 243
024E ; while (RecChar()!='N');
024E AEDF rcall _RecChar
0250 0E34 cpi R16,78
0252 E9F7 brne L78
0254 .dbline 244
0254 ; ExecCode();
0254 BDDF rcall _ExecCode
0256 .dbline 245
0256 ; } break;
0256 .dbline 245
0256 .dbline 246
0256 ; default : break;
0256 L74:
0256 .dbline 248
0256 L71:
0256 .dbline 236
0256 E7CF rjmp L70
0258 X4:
0258 .dbline 249
0258 ; }
0258 ; }
0258 ; }
0258 L62:
0258 .dbline 250
0258 ; SendChar('E'); //通知PC机,进入运用程序区
0258 05E4 ldi R16,69
025A ACDF rcall _SendChar
025C .dbline 252
025C ; //while (RecChar()!='N');
025C ; delay();
025C AFDF rcall _delay
025E .dbline 253
025E ; delay();
025E AEDF rcall _delay
0260 .dbline 254
0260 ; delay();
0260 ADDF rcall _delay
0262 .dbline 255
0262 ; delay();
0262 ACDF rcall _delay
0264 .dbline 256
0264 ; ExecCode();
0264 .dbline -2
0264 .dbline 257
0264 ; }
0264 L61:
0264 .dbline 0 ; func end
0264 B5CF rjmp _ExecCode
0266 .dbsym r BootFlag 20 c
0266 .dbend
.area bss(ram, con, rel)
0000 .dbfile C:\DOCUME~1\zhuji\桌面\AVR_BO~1.2\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 + -