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

📄 main.s

📁 Atmega系列单片机 BootLoader程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	.dbline -1
	.dbline 162
;   }
; 
; /*****************************************************************************/
; 
; char CheckFlash(void)
;   {
	.dbline 167
;     unsigned char i;							
;     unsigned int TempInt;
;     unsigned int TempInt2;
; 
;     for (i=0;i<PageByte;i+=2)
	clr R10
	xjmp L40
L37:
	.dbline 168
;       {
	.dbline 169
; 	   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
	xcall _read_program_memory
	movw R22,R16
	.dbline 170
; 	   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 171
; 	   if (TempInt != TempInt2)
	cp R16,R20
	cpc R17,R21
	breq L42
	.dbline 172
; 	     return 0;
	clr R16
	xjmp L36
L42:
	.dbline 173
L38:
	.dbline 167
	mov R24,R10
	subi R24,254    ; addi 2
	mov R10,R24
L40:
	.dbline 167
	mov R24,R10
	cpi R24,128
	brlo L37
	.dbline 174
;       } 
;     return 1;
	ldi R16,1
	.dbline -2
L36:
	xcall 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 180
;   }
; /*****************************************************************************/
; /* Serial Port Code										                     */
; /*****************************************************************************/
; unsigned char IsChar(void)
; {
	.dbline 181
;    if(UCSRA & 0x80)
	sbis 0xb,7
	rjmp L45
	.dbline 182
;      return 1;
	ldi R16,1
	xjmp L44
L45:
	.dbline 184
;    else 
;      return 0;	 
	clr R16
	.dbline -2
L44:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e RecChar _RecChar fc
	.even
_RecChar::
	.dbline -1
	.dbline 189
; }
; /*****************************************************************************/
; /*  		字符输入函数 		 */	
; unsigned char RecChar(void)
;   {
L48:
	.dbline 190
L49:
	.dbline 190
;     while(!(UCSRA & 0x80));
	sbis 0xb,7
	rjmp L48
	.dbline 191
;     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 195
;   }		
; /*****************************************************************************/
; void SendChar(unsigned char c)
;   { 	 
L52:
	.dbline 196
L53:
	.dbline 196
;     while (!(UCSRA&(1<<UDRE)));
	sbis 0xb,5
	rjmp L52
	.dbline 197
;     UDR=c;
	out 0xc,R16
	.dbline -2
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 200
;   }
; void delay(void)  
;   {
	.dbline 202
	clr R16
	clr R17
	xjmp L59
L56:
	.dbline 202
L57:
	.dbline 202
	subi R16,255  ; offset = 1
	sbci R17,255
L59:
	.dbline 202
;     unsigned int i;
;     for (i=0;i<65530;i++);
	cpi R16,250
	ldi R30,255
	cpc R17,R30
	brlo L56
	.dbline -2
L55:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 i
	.dbend
	.dbfunc e ExecCode _ExecCode fV
	.even
_ExecCode::
	.dbline -1
	.dbline 207
;   }
; 
; /*****************************************************************************/
; void ExecCode(void)
;   {
	.dbline 211
; #ifdef RAMPZ_FLAG 
;     RAMPZ = 0;
; #endif
;     INTVECREG=0x01;           //中断向量表移位允许
	ldi R24,1
	out 0x3b,R24
	.dbline 212
;     INTVECREG=0x00;           //中断向量指向应用程序区
	clr R2
	out 0x3b,R2
	.dbline 213
;     asm("jmp 0x0000");              
	jmp 0x0000
	.dbline -2
L60:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e main _main fV
;       BootFlag -> R20
	.even
_main::
	.dbline -1
	.dbline 217
;   }
; 		
; void main(void)
;   {
	.dbline 221
;     unsigned char BootFlag;
;     
; #ifdef InteClk                //如果使用内部时钟,读取时钟校准值
;        OSCCAL=read_flash(OscAddress);
	ldi R16,8191
	ldi R17,31
	xcall _read_flash
	out 0x31,R16
	.dbline 224
; #endif
;  
;     UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //8位数据+1位停止
	ldi R24,134
	out 0x20,R24
	.dbline 225
;     UCSRB = (1<<RXEN)|(1<<TXEN);       //允许串口发送和接收
	ldi R24,24
	out 0xa,R24
	.dbline 226
;     UBRR = BAU;
	ldi R24,23
	out 0x9,R24
	.dbline 229
; 
;  
;     SendChar('>');              //通知PC机,BOOT下载准备就绪
	ldi R16,62
	xcall _SendChar
	.dbline 230
;     delay();                    //延时等待PC机响应
	xcall _delay
	.dbline 231
; 	delay();
	xcall _delay
	.dbline 232
; 	delay();
	xcall _delay
	.dbline 233
; 	delay();
	xcall _delay
	.dbline 234
; 	delay();
	xcall _delay
	.dbline 235
; 	delay();
	xcall _delay
	.dbline 236
; 	delay();
	xcall _delay
	.dbline 237
; 	delay();
	xcall _delay
	.dbline 239
; 	
;     BootFlag=UDR;             
	in R20,0xc
	.dbline 240
;     if (BootFlag == '<') 
	cpi R20,60
	brne L62
	.dbline 241
;       {
	.dbline 242
; 	   SendChar(ChipType);
	ldi R16,49
	xcall _SendChar
L64:
	.dbline 243
L65:
	.dbline 243
; 	   while (RecChar()!='N');
	xcall _RecChar
	cpi R16,78
	brne L64
	.dbline 244
;          SendChar(BootSize);
	ldi R16,100
	xcall _SendChar
L67:
	.dbline 245
L68:
	.dbline 245
; 	   while (RecChar()!='N');	 
	xcall _RecChar
	cpi R16,78
	brne L67
	.dbline 246
;          SendChar(BootVer);
	ldi R16,102
	xcall _SendChar
	xjmp L71
L70:
	.dbline 248
;        while (1)
; 	   {
	.dbline 249
; 	     switch (RecChar())
	xcall _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
	xjmp L74
X3:
	.dbline 250
; 	       {
L76:
	.dbline 251
; 	         case 'W': FlashLoad(); break;
	xcall _FlashLoad
	.dbline 251
	xjmp L74
L77:
	.dbline 252
; 	         case 'E': { 
	.dbline 253
; 	         	     SendChar('E');  //通知PC机,进入运用程序区
	ldi R16,69
	xcall _SendChar
L78:
	.dbline 254
L79:
	.dbline 254
; 					 while (RecChar()!='N');
	xcall _RecChar
	cpi R16,78
	brne L78
	.dbline 255
; 	         	     ExecCode();  
	xcall _ExecCode
	.dbline 256
; 	         	   } break;
	.dbline 256
	.dbline 257
; 	         default : break;
L74:
	.dbline 259
L71:
	.dbline 247
	xjmp L70
X4:
	.dbline 260
; 	       }
; 	   }
;       }
L62:
	.dbline 261
;     SendChar('E');  //通知PC机,进入运用程序区
	ldi R16,69
	xcall _SendChar
	.dbline 263
; 	//while (RecChar()!='N');
;     delay();
	xcall _delay
	.dbline 264
; 	delay();
	xcall _delay
	.dbline 265
; 	delay();
	xcall _delay
	.dbline 266
; 	delay();
	xcall _delay
	.dbline 267
;     ExecCode();
	xcall _ExecCode
	.dbline -2
L61:
	.dbline 0 ; func end
	ret
	.dbsym r BootFlag 20 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile D:\桌面\AVR_BO~1.2\bootloader\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 + -