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

📄 newmain.s

📁 单片机MEGA128的BOOTLOADER程序。
💻 S
📖 第 1 页 / 共 2 页
字号:
	inc R20
L66:
	.dbline 231
	cp R20,R22
	brlo L63
	.dbline -2
L62:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r l 22 c
	.dbsym r s 10 pc
	.dbend
	.dbfunc e sendok _sendok fV
;              i -> R20
	.even
_sendok::
	xcall push_gset1
	.dbline -1
	.dbline 235
; Send_ByteUART1(*(s+i));
; }	 
; void sendok(void)
; {
	.dbline 236
; unsigned char i=0;
	clr R20
	.dbline 237
; Senddata[0]='!'; 
	ldi R24,33
	sts _Senddata,R24
	.dbline 238
; Senddata[5]=1;
	ldi R24,1
	sts _Senddata+5,R24
	.dbline 239
; Senddata[6]=0xd;
	ldi R24,13
	sts _Senddata+6,R24
	.dbline 240
; Senddata[7]=0xa;
	ldi R24,10
	sts _Senddata+7,R24
	.dbline 241
; send232(Senddata,8);
	ldi R18,8
	ldi R16,<_Senddata
	ldi R17,>_Senddata
	xcall _send232
	.dbline -2
L67:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbend
	.dbfunc e senderror _senderror fV
;              i -> R20
	.even
_senderror::
	xcall push_gset1
	.dbline -1
	.dbline 244
; }  
; void senderror(void)
; {
	.dbline 245
; unsigned char i=0;
	clr R20
	.dbline 246
; Senddata[0]='!';
	ldi R24,33
	sts _Senddata,R24
	.dbline 247
; Senddata[5]=0;
	clr R2
	sts _Senddata+5,R2
	.dbline 248
; Senddata[6]=0xd;
	ldi R24,13
	sts _Senddata+6,R24
	.dbline 249
; Senddata[7]=0xa;
	ldi R24,10
	sts _Senddata+7,R24
	.dbline 250
; send232(Senddata,8);
	ldi R18,8
	ldi R16,<_Senddata
	ldi R17,>_Senddata
	xcall _send232
	.dbline -2
L71:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbend
	.dbfunc e uart0_rx _uart0_rx fV
;            jym -> R12
;           flag -> R20
;           jym1 -> R10
;              i -> R22,R23
	.even
_uart0_rx::
	xcall push_gset4
	.dbline -1
	.dbline 253
; }   
; void uart0_rx(void)
; {
	.dbline 256
; char flag,jym,jym1;
; int i;
; flag=0;
	clr R20
L76:
	.dbline 257
; do{
	.dbline 259
;   
;   if(data[0]!='!')data[0]=RecChar();   
	lds R24,_data
	cpi R24,33
	breq L79
	.dbline 259
	xcall _RecChar
	sts _data,R16
	xjmp L80
L79:
	.dbline 261
;   else
; 	 {
	.dbline 262
; 	  Senddata[1]=RecChar();
	xcall _RecChar
	sts _Senddata+1,R16
	.dbline 263
; 	  Senddata[2]=RecChar();
	xcall _RecChar
	sts _Senddata+2,R16
	.dbline 264
; 	  Senddata[3]=RecChar();
	xcall _RecChar
	sts _Senddata+3,R16
	.dbline 265
; 	  Senddata[4]=RecChar();
	xcall _RecChar
	sts _Senddata+4,R16
	.dbline 267
; 	  
; 	  for(i=0;i<256;i++)
	clr R22
	clr R23
L85:
	.dbline 268
	xcall _RecChar
	ldi R24,<_data
	ldi R25,>_data
	movw R30,R22
	add R30,R24
	adc R31,R25
	std z+0,R16
L86:
	.dbline 267
	subi R22,255  ; offset = 1
	sbci R23,255
	.dbline 267
	cpi R22,0
	ldi R30,1
	cpc R23,R30
	brlt L85
	.dbline 269
;       data[i]=RecChar();		  
; 	  jym=RecChar();	   
	xcall _RecChar
	mov R12,R16
	.dbline 270
; 	  jym1=0;	  
	clr R10
	.dbline 271
	clr R22
	clr R23
L89:
	.dbline 271
	ldi R24,<_data
	ldi R25,>_data
	movw R30,R22
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	eor R10,R2
L90:
	.dbline 271
; 	  for(i=0;i<256;i++)jym1=jym1^data[i];
	subi R22,255  ; offset = 1
	sbci R23,255
	.dbline 271
	cpi R22,0
	ldi R30,1
	cpc R23,R30
	brlt L89
	.dbline 272
; 	  if(jym!=jym1)
	cp R12,R10
	breq L93
	.dbline 273
; 	  senderror();	
	xcall _senderror
	xjmp L94
L93:
	.dbline 274
; 	  else if((lengthbak1==Senddata[3])&&(lengthbak2==Senddata[4]))sendok(); 
	lds R2,_Senddata+3
	lds R3,_lengthbak1
	cp R3,R2
	brne L95
	lds R2,_Senddata+4
	lds R3,_lengthbak2
	cp R3,R2
	brne L95
	.dbline 274
	xcall _sendok
	xjmp L96
L95:
	.dbline 275
; 	  else if((Senddata[1]==Senddata[3])&&(Senddata[2]==Senddata[4]))
	lds R2,_Senddata+3
	lds R3,_Senddata+1
	cp R3,R2
	brne L99
	lds R2,_Senddata+4
	lds R3,_Senddata+2
	cp R3,R2
	brne L99
	.dbline 276
; 	  {
	.dbline 277
; 	  ROK_flag=1;
	ldi R24,1
	sts _ROK_flag,R24
	.dbline 278
; 	  flag=1;
	ldi R20,1
	.dbline 279
; 	  }
	xjmp L100
L99:
	.dbline 280
; 	  else  {lengthbak1=Senddata[3];lengthbak2=Senddata[4];flag=1;}	  
	.dbline 280
	lds R2,_Senddata+3
	sts _lengthbak1,R2
	.dbline 280
	lds R2,_Senddata+4
	sts _lengthbak2,R2
	.dbline 280
	ldi R20,1
	.dbline 280
L100:
L96:
L94:
	.dbline 281
; 	 }
L80:
	.dbline 283
L77:
	.dbline 283
;  // else senderror();
;   }while(flag==0); 
	tst R20
	brne X4
	xjmp L76
X4:
	.dbline -2
L75:
	xcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r jym 12 c
	.dbsym r flag 20 c
	.dbsym r jym1 10 c
	.dbsym r i 22 I
	.dbend
	.dbfunc e main _main fV
;       byte_num -> R10,R11
;       page_num -> R12,R13
;       BootFlag -> y+2
;              i -> R10
	.even
_main::
	sbiw R28,3
	.dbline -1
	.dbline 287
; }	 
; //主程序 
; void main(void)
;   {
	.dbline 290
;     unsigned char BootFlag,i; 
; 	int page_num,byte_num;	
;     Init_mag128();
	xcall _Init_mag128
	.dbline 291
; 	uart1_init();
	xcall _uart1_init
	.dbline 293
; 	//PORTD&=~(1<<7);//GSM关机
; 	PORTD|=(1<<7);
	sbi 0x12,7
	.dbline 294
; 	Init_SPI();	
	xcall _Init_SPI
	.dbline 295
; 	df_reset();
	xcall _df_reset
	.dbline 297
; 	
; 	delay_ms(1000);
	ldi R16,1000
	ldi R17,3
	xcall _delay_ms
	.dbline 298
; 	EEPROM_READ(0x7ff,BootFlag);	
	ldi R24,1
	ldi R25,0
	std y+1,R25
	std y+0,R24
	movw R18,R28
	subi R18,254  ; offset = 2
	sbci R19,255
	ldi R16,2047
	ldi R17,7
	xcall _EEPROMReadBytes
	.dbline 299
; 	delay_ms(2);
	ldi R16,2
	ldi R17,0
	xcall _delay_ms
	.dbline 300
; 	if(BootFlag==0)quit();
	ldd R2,y+2
	tst R2
	brne L108
	.dbline 300
	xcall _quit
	xjmp L109
L108:
	.dbline 301
; 	else if(BootFlag!=1)
	ldd R24,y+2
	cpi R24,1
	brne X5
	xjmp L110
X5:
	.dbline 302
; 	   {     
	.dbline 303
; 	         for(i=0;i<12;i++)
	clr R10
	xjmp L115
L112:
	.dbline 304
	xcall _RecChar
	ldi R24,<_data
	ldi R25,>_data
	mov R30,R10
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R16
L113:
	.dbline 303
	inc R10
L115:
	.dbline 303
	mov R24,R10
	cpi R24,12
	brlo L112
	.dbline 305
;              data[i]=RecChar();	         
; 			 if((data[0]=='B')&&(data[1]=='o'))
	lds R24,_data
	cpi R24,66
	breq X6
	xjmp L116
X6:
	lds R24,_data+1
	cpi R24,111
	breq X7
	xjmp L116
X7:
	.dbline 306
; 			 {
	.dbline 307
; 			  delay_ms(200);
	ldi R16,200
	ldi R17,0
	xcall _delay_ms
	.dbline 308
; 			  sendok();
	xcall _sendok
L119:
	.dbline 309
; 	     	 do{ 
	.dbline 310
; 		   	   uart0_rx();  
	xcall _uart0_rx
	.dbline 311
; 	       	   write_one_page();            //收到256字节写入一页Flash中 
	xcall _write_one_page
	.dbline 312
;            	   address += SPM_PAGESIZE;     //Flash页加1  	
	ldi R20,0
	ldi R21,1
	ldi R22,0
	ldi R23,0
	lds R4,_address+2
	lds R5,_address+2+1
	lds R2,_address
	lds R3,_address+1
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	sts _address+1,R3
	sts _address,R2
	sts _address+2+1,R5
	sts _address+2,R4
	.dbline 313
; 			   sendok();
	xcall _sendok
	.dbline 314
; 			   delay_ms(1);	   
	ldi R16,1
	ldi R17,0
	xcall _delay_ms
	.dbline 315
L120:
	.dbline 315
; 		  	   }while(ROK_flag==0);		 
	lds R2,_ROK_flag
	tst R2
	breq L119
	.dbline 316
; 		      delay_ms(20);
	ldi R16,20
	ldi R17,0
	xcall _delay_ms
	.dbline 317
; 			  BootFlag=0;
	clr R2
	std y+2,R2
	.dbline 318
; 			  EEPROM_WRITE(0x7ff,BootFlag);	
	ldi R24,1
	ldi R25,0
	std y+1,R25
	std y+0,R24
	movw R18,R28
	subi R18,254  ; offset = 2
	sbci R19,255
	ldi R16,2047
	ldi R17,7
	xcall _EEPROMWriteBytes
	.dbline 319
; 			  delay_ms(2000);
	ldi R16,2000
	ldi R17,7
	xcall _delay_ms
	.dbline 320
; 			  quit();
	xcall _quit
	.dbline 321
; 			  }
	xjmp L111
L116:
	.dbline 322
; 			else quit();
	xcall _quit
	.dbline 323
; 	   }
	xjmp L111
L110:
	.dbline 325
; 	else 
; 	{  
	.dbline 326
; 	   page_counter_rd=3849;//128k;
	ldi R24,3849
	ldi R25,15
	sts _page_counter_rd+1,R25
	sts _page_counter_rd,R24
	.dbline 327
; 	   page_offset_rd=0;
	clr R2
	clr R3
	sts _page_offset_rd+1,R3
	sts _page_offset_rd,R2
	.dbline 328
; 	   delay_ms(2);
	ldi R16,2
	ldi R17,0
	xcall _delay_ms
	.dbline 329
; 	   Read_Testfile(data ,4 );	
	ldi R18,4
	ldi R19,0
	ldi R16,<_data
	ldi R17,>_data
	xcall _Read_Testfile
	.dbline 330
; 	   delay_ms(2);
	ldi R16,2
	ldi R17,0
	xcall _delay_ms
	.dbline 331
; 	   Filelength=0;
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	sts _Filelength+1,R21
	sts _Filelength,R20
	sts _Filelength+2+1,R23
	sts _Filelength+2,R22
	.dbline 332
; 	   Filelength=data[2];
	lds R2,_data+2
	clr R3
	clr R4
	clr R5
	sts _Filelength+1,R3
	sts _Filelength,R2
	sts _Filelength+2+1,R5
	sts _Filelength+2,R4
	.dbline 333
; 	   Filelength=Filelength*0x100+data[3];
	lds R4,_Filelength+2
	lds R5,_Filelength+2+1
	lds R2,_Filelength
	lds R3,_Filelength+1
	ldi R20,0
	ldi R21,1
	ldi R22,0
	ldi R23,0
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R16,R20
	movw R18,R22
	xcall empy32s
	movw R2,R16
	movw R4,R18
	lds R6,_data+3
	clr R7
	clr R8
	clr R9
	add R2,R6
	adc R3,R7
	adc R4,R8
	adc R5,R9
	sts _Filelength+1,R3
	sts _Filelength,R2
	sts _Filelength+2+1,R5
	sts _Filelength+2,R4
	.dbline 334
; 	   delay_ms(1000);
	ldi R16,1000
	ldi R17,3
	xcall _delay_ms
	.dbline 335
; 	   address=0;
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	sts _address+1,R21
	sts _address,R20
	sts _address+2+1,R23
	sts _address+2,R22
	xjmp L125
L124:
	.dbline 337
	.dbline 338
	ldi R16,2
	ldi R17,0
	xcall _delay_ms
	.dbline 339
	lds R12,_page_counter_rd
	lds R13,_page_counter_rd+1
	.dbline 340
	lds R10,_page_offset_rd
	lds R11,_page_offset_rd+1
	.dbline 341
	ldi R24,256
	ldi R25,1
	std y+1,R25
	std y+0,R24
	ldi R18,255
	ldi R19,0
	ldi R16,<_data
	ldi R17,>_data
	xcall _memset
	.dbline 342
	ldi R18,256
	ldi R19,1
	ldi R16,<_data
	ldi R17,>_data
	xcall _Read_Testfile
	.dbline 344
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline 346
	xcall _write_one_page
	.dbline 347
	ldi R20,0
	ldi R21,1
	ldi R22,0
	ldi R23,0
	lds R4,_address+2
	lds R5,_address+2+1
	lds R2,_address
	lds R3,_address+1
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	sts _address+1,R3
	sts _address,R2
	sts _address+2+1,R5
	sts _address+2,R4
	.dbline 348
	ldi R20,0
	ldi R21,1
	ldi R22,0
	ldi R23,0
	lds R4,_Filelength+2
	lds R5,_Filelength+2+1
	lds R2,_Filelength
	lds R3,_Filelength+1
	sub R2,R20
	sbc R3,R21
	sbc R4,R22
	sbc R5,R23
	sts _Filelength+1,R3
	sts _Filelength,R2
	sts _Filelength+2+1,R5
	sts _Filelength+2,R4
	.dbline 349
L125:
	.dbline 336
; 	    while (Filelength>SPM_PAGESIZE)
	ldi R20,0
	ldi R21,1
	ldi R22,0
	ldi R23,0
	lds R4,_Filelength+2
	lds R5,_Filelength+2+1
	lds R2,_Filelength
	lds R3,_Filelength+1
	cp R20,R2
	cpc R21,R3
	cpc R22,R4
	cpc R23,R5
	brge X8
	xjmp L124
X8:
	.dbline 350
; 		   {
; 		   delay_ms(2);
; 		   page_num=page_counter_rd;
; 	       byte_num=page_offset_rd;  
; 		   memset(data,0xff,SPM_PAGESIZE); 	
; 	   	   Read_Testfile(data ,SPM_PAGESIZE );
; 		   
; 		   delay_ms(10);
; 		   
; 		   write_one_page();            //收到256字节写入一页Flash中 
;            address += SPM_PAGESIZE;    //Flash页加1 
; 		   Filelength=Filelength-SPM_PAGESIZE;		  
; 		   }
; 		 if(Filelength>0)
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	cp R20,R2
	cpc R21,R3
	cpc R22,R4
	cpc R23,R5
	brge L127
	.dbline 351
; 		       {
	.dbline 352
; 			    delay_ms(2);
	ldi R16,2
	ldi R17,0
	xcall _delay_ms
	.dbline 353
; 			    memset(data,0xff,SPM_PAGESIZE); 
	ldi R24,256
	ldi R25,1
	std y+1,R25
	std y+0,R24
	ldi R18,255
	ldi R19,0
	ldi R16,<_data
	ldi R17,>_data
	xcall _memset
	.dbline 354
; 			    Read_Testfile(data ,Filelength );				    
	lds R18,_Filelength
	lds R19,_Filelength+1
	ldi R16,<_data
	ldi R17,>_data
	xcall _Read_Testfile
	.dbline 355
; 		   		write_one_page();
	xcall _write_one_page
	.dbline 356
; 				clr_dog();
	xcall _clr_dog
	.dbline 357
; 		   		BootFlag=0;
	clr R2
	std y+2,R2
	.dbline 358
; 				EEPROM_WRITE(0x7ff,BootFlag);	
	ldi R24,1
	ldi R25,0
	std y+1,R25
	std y+0,R24
	movw R18,R28
	subi R18,254  ; offset = 2
	sbci R19,255
	ldi R16,2047
	ldi R17,7
	xcall _EEPROMWriteBytes
	.dbline 359
; 				EEPROM_WRITE(0x600,BootFlag);	 
	ldi R24,1
	ldi R25,0
	std y+1,R25
	std y+0,R24
	movw R18,R28
	subi R18,254  ; offset = 2
	sbci R19,255
	ldi R16,1536
	ldi R17,6
	xcall _EEPROMWriteBytes
	.dbline 360
; 		        quit();
	xcall _quit
	.dbline 361
; 		       }
	xjmp L128
L127:
	.dbline 363
; 		else
; 			   {
	.dbline 364
; 			   delay_ms(2);
	ldi R16,2
	ldi R17,0
	xcall _delay_ms
	.dbline 365
; 			   BootFlag=0;
	clr R2
	std y+2,R2
	.dbline 366
; 			   EEPROM_WRITE(0x7ff,BootFlag);	
	ldi R24,1
	ldi R25,0
	std y+1,R25
	std y+0,R24
	movw R18,R28
	subi R18,254  ; offset = 2
	sbci R19,255
	ldi R16,2047
	ldi R17,7
	xcall _EEPROMWriteBytes
	.dbline 367
; 			   EEPROM_WRITE(0x600,BootFlag); 
	ldi R24,1
	ldi R25,0
	std y+1,R25
	std y+0,R24
	movw R18,R28
	subi R18,254  ; offset = 2
	sbci R19,255
	ldi R16,1536
	ldi R17,6
	xcall _EEPROMWriteBytes
	.dbline 368
; 		       quit();
	xcall _quit
	.dbline 369
; 			   }  
L128:
	.dbline 370
; 		}
L111:
L109:
	.dbline -2
L107:
	adiw R28,3
	.dbline 0 ; func end
	ret
	.dbsym r byte_num 10 I
	.dbsym r page_num 12 I
	.dbsym l BootFlag 2 c
	.dbsym r i 10 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile E:\cqt\cqt_boot\newmain.c
_Num::
	.blkb 1
	.dbsym e Num _Num c
_ROK_flag::
	.blkb 1
	.dbsym e ROK_flag _ROK_flag c
_length1::
	.blkb 2
	.dbsym e length1 _length1 I
_length::
	.blkb 2
	.dbsym e length _length I
_timenum::
	.blkb 2
	.dbsym e timenum _timenum I
_lengthbak2::
	.blkb 1
	.dbsym e lengthbak2 _lengthbak2 c
_lengthbak1::
	.blkb 1
	.dbsym e lengthbak1 _lengthbak1 c
_page_offset_rd::
	.blkb 2
	.dbsym e page_offset_rd _page_offset_rd i
_page_counter_rd::
	.blkb 2
	.dbsym e page_counter_rd _page_counter_rd i
_Filelength::
	.blkb 4
	.dbsym e Filelength _Filelength L
_Senddata::
	.blkb 30
	.dbsym e Senddata _Senddata A[30:30]c
_data::
	.blkb 256
	.dbsym e data _data A[256:256]c

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -