📄 main.lis
字号:
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 + -