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

📄 main.s

📁 Atmeag16 bootloader 测试程序 测试通过
💻 S
📖 第 1 页 / 共 2 页
字号:
; /*****************************************************************************/
; 
; 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 + -