📄 main.s
字号:
; /*****************************************************************************/
;
; char CheckFlash(void)
; {
.dbline 156
; unsigned char i;
; unsigned int TempInt;
; unsigned int TempInt2;
;
; for (i=0;i<PageByte;i+=2)
clr R10
rjmp L40
L37:
.dbline 157
; {
.dbline 158
; TempInt = read_program_memory(PageAddress + i,0x00);
clr R18
mov R2,R10
clr R3
lds R16,_PageAddress
lds R17,_PageAddress+1
add R16,R2
adc R17,R3
rcall _read_program_memory
mov R22,R16
mov R23,R17
.dbline 159
; TempInt2 = PageBuffer[i] +(PageBuffer[i+1]<<8);
ldi R24,<_PageBuffer+1
ldi R25,>_PageBuffer+1
mov R30,R10
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
mov R3,R2
clr R2
ldi R24,<_PageBuffer
ldi R25,>_PageBuffer
mov R30,R10
clr R31
add R30,R24
adc R31,R25
ldd R20,z+0
clr R21
add R20,R2
adc R21,R3
.dbline 160
; if (TempInt != TempInt2)
cp R16,R20
cpc R17,R21
breq L42
.dbline 161
; return 0;
clr R16
rjmp L36
L42:
.dbline 162
L38:
.dbline 156
mov R24,R10
subi R24,254 ; addi 2
mov R10,R24
L40:
.dbline 156
mov R24,R10
cpi R24,128
brlo L37
.dbline 163
; }
; return 1;
ldi R16,1
.dbline -2
L36:
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r TempInt2 20 i
.dbsym r TempInt 22 i
.dbsym r i 10 c
.dbend
.dbfunc e IsChar _IsChar fc
.even
_IsChar::
.dbline -1
.dbline 169
; }
; /*****************************************************************************/
; /* Serial Port Code */
; /*****************************************************************************/
; unsigned char IsChar(void)
; {
.dbline 170
; if(UCSRA & 0x80)
sbis 0xb,7
rjmp L45
.dbline 171
; return 1;
ldi R16,1
rjmp L44
L45:
.dbline 173
; else
; return 0;
clr R16
.dbline -2
L44:
.dbline 0 ; func end
ret
.dbend
.dbfunc e RecChar _RecChar fc
.even
_RecChar::
.dbline -1
.dbline 178
; }
; /*****************************************************************************/
; /* 字符输入函数 */
; unsigned char RecChar(void)
; {
L48:
.dbline 179
L49:
.dbline 179
; while(!(UCSRA & 0x80));
sbis 0xb,7
rjmp L48
.dbline 180
; return UDR;
in R16,0xc
.dbline -2
L47:
.dbline 0 ; func end
ret
.dbend
.dbfunc e SendChar _SendChar fV
; c -> R16
.even
_SendChar::
.dbline -1
.dbline 184
; }
; /*****************************************************************************/
; void SendChar(unsigned char c)
; {
L52:
.dbline 185
L53:
.dbline 185
; while (!(UCSRA&(1<<UDRE)));
sbis 0xb,5
rjmp L52
.dbline 186
; UDR=c;
out 0xc,R16
.dbline -2
.dbline 187
; }
L51:
.dbline 0 ; func end
ret
.dbsym r c 16 c
.dbend
.dbfunc e delay _delay fV
; i -> R16,R17
.even
_delay::
.dbline -1
.dbline 189
; void delay(void)
; {
.dbline 191
clr R16
clr R17
rjmp L59
L56:
.dbline 191
L57:
.dbline 191
subi R16,255 ; offset = 1
sbci R17,255
L59:
.dbline 191
; unsigned int i;
; for (i=0;i<65530;i++);
cpi R16,250
ldi R30,255
cpc R17,R30
brlo L56
.dbline -2
.dbline 192
; }
L55:
.dbline 0 ; func end
ret
.dbsym r i 16 i
.dbend
.dbfunc e ExecCode _ExecCode fV
.even
_ExecCode::
.dbline -1
.dbline 196
;
; /*****************************************************************************/
; void ExecCode(void)
; {
.dbline 200
; #ifdef RAMPZ_FLAG
; RAMPZ = 0;
; #endif
; INTVECREG=0x01; //中断向量表移位允许
ldi R24,1
out 0x3b,R24
.dbline 201
; INTVECREG=0x00; //中断向量指向应用程序区
clr R2
out 0x3b,R2
.dbline 202
; asm("jmp 0x0000");
jmp 0x0000
.dbline -2
.dbline 203
; }
L60:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
; BootFlag -> R20
.even
_main::
.dbline -1
.dbline 206
;
; void main(void)
; {
.dbline 210
; unsigned char BootFlag;
;
; #ifdef InteClk //如果使用内部时钟,读取时钟校准值
; OSCCAL=read_flash(OscAddress);
ldi R16,8191
ldi R17,31
rcall _read_flash
out 0x31,R16
.dbline 213
; #endif
;
; UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //8位数据+1位停止
ldi R24,134
out 0x20,R24
.dbline 214
; UCSRB = (1<<RXEN)|(1<<TXEN); //允许串口发送和接收
ldi R24,24
out 0xa,R24
.dbline 215
; UBRR = BAU;
ldi R24,23
out 0x9,R24
.dbline 218
;
;
; SendChar('>'); //通知PC机,BOOT下载准备就绪
ldi R16,62
rcall _SendChar
.dbline 219
; delay(); //延时等待PC机响应
rcall _delay
.dbline 220
; delay();
rcall _delay
.dbline 221
; delay();
rcall _delay
.dbline 222
; delay();
rcall _delay
.dbline 223
; delay();
rcall _delay
.dbline 224
; delay();
rcall _delay
.dbline 225
; delay();
rcall _delay
.dbline 226
; delay();
rcall _delay
.dbline 228
;
; BootFlag=UDR;
in R20,0xc
.dbline 229
; if (BootFlag == '<')
cpi R20,60
brne L62
.dbline 230
; {
.dbline 231
; SendChar(ChipType);
ldi R16,49
rcall _SendChar
L64:
.dbline 232
L65:
.dbline 232
; while (RecChar()!='N');
rcall _RecChar
cpi R16,78
brne L64
.dbline 233
; SendChar(BootSize);
ldi R16,100
rcall _SendChar
L67:
.dbline 234
L68:
.dbline 234
; while (RecChar()!='N');
rcall _RecChar
cpi R16,78
brne L67
.dbline 235
; SendChar(BootVer);
ldi R16,102
rcall _SendChar
rjmp L71
L70:
.dbline 237
; while (1)
; {
.dbline 238
; switch (RecChar())
rcall _RecChar
mov R20,R16
clr R21
cpi R20,69
ldi R30,0
cpc R21,R30
breq L77
cpi R20,69
ldi R30,0
cpc R21,R30
brlt L74
L81:
cpi R20,87
ldi R30,0
cpc R21,R30
breq L76
rjmp L74
X3:
.dbline 239
; {
L76:
.dbline 240
; case 'W': FlashLoad(); break;
rcall _FlashLoad
.dbline 240
rjmp L74
L77:
.dbline 241
; case 'E': {
.dbline 242
; SendChar('E'); //通知PC机,进入运用程序区
ldi R16,69
rcall _SendChar
L78:
.dbline 243
L79:
.dbline 243
; while (RecChar()!='N');
rcall _RecChar
cpi R16,78
brne L78
.dbline 244
; ExecCode();
rcall _ExecCode
.dbline 245
; } break;
.dbline 245
.dbline 246
; default : break;
L74:
.dbline 248
L71:
.dbline 236
rjmp L70
X4:
.dbline 249
; }
; }
; }
L62:
.dbline 250
; SendChar('E'); //通知PC机,进入运用程序区
ldi R16,69
rcall _SendChar
.dbline 252
; //while (RecChar()!='N');
; delay();
rcall _delay
.dbline 253
; delay();
rcall _delay
.dbline 254
; delay();
rcall _delay
.dbline 255
; delay();
rcall _delay
.dbline 256
; ExecCode();
.dbline -2
.dbline 257
; }
L61:
.dbline 0 ; func end
rjmp _ExecCode
.dbsym r BootFlag 20 c
.dbend
.area bss(ram, con, rel)
.dbfile C:\DOCUME~1\zhuji\桌面\AVR_BO~1.2\main.c
_PageAddress::
.blkb 2
.dbsym e PageAddress _PageAddress i
_RealPageAddress::
.blkb 2
.dbsym e RealPageAddress _RealPageAddress i
_PageBuffer::
.blkb 128
.dbsym e PageBuffer _PageBuffer A[128:128]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -