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

📄 main.s

📁 ATmal mega88 芯片的bootload源程序
💻 S
📖 第 1 页 / 共 2 页
字号:
_CheckFlash::
	xcall push_xgset303C
	.dbline -1
	.dbline 177
;   }
; 
; /*****************************************************************************/
; 
; char CheckFlash(void)
;   {
	.dbline 182
;     unsigned char i;							
;     unsigned int TempInt;
;     unsigned int TempInt2;
; 
;     for (i=0;i<PageByte;i+=2)
	clr R20
	xjmp L29
L26:
	.dbline 183
;       {
	.dbline 184
; 	TempInt = read_program_memory(PageAddress + i,0x00);
	clr R18
	mov R2,R20
	clr R3
	lds R16,_PageAddress
	lds R17,_PageAddress+1
	add R16,R2
	adc R17,R3
	xcall _read_program_memory
	movw R10,R16
	.dbline 185
; 	TempInt2 = PageBuffer[i] +(PageBuffer[i+1]<<8);
	ldi R24,<_PageBuffer+1
	ldi R25,>_PageBuffer+1
	mov R30,R20
	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,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R12,z+0
	clr R13
	add R12,R2
	adc R13,R3
	.dbline 186
; 	if (TempInt != TempInt2) return 0;
	cp R16,R12
	cpc R17,R13
	breq L31
X8:
	.dbline 186
	clr R16
	xjmp L25
L31:
	.dbline 187
;       }
L27:
	.dbline 182
	subi R20,254    ; addi 2
L29:
	.dbline 182
	cpi R20,128
	brlo L26
X9:
	.dbline 188
;     return 1;
	ldi R16,1
	.dbline -2
L25:
	.dbline 0 ; func end
	xjmp pop_xgset303C
	.dbsym r TempInt2 12 i
	.dbsym r TempInt 10 i
	.dbsym r i 20 c
	.dbend
	.dbfunc e RecChar _RecChar fc
	.even
_RecChar::
	.dbline -1
	.dbline 194
;   }
; 
; /*****************************************************************************/
; /*  		字符输入函数 		 */	
; unsigned char RecChar(void)
;   {
L34:
	.dbline 195
;      while(!(UCSR0A & 0x80));
L35:
	.dbline 195
	lds R2,192
	sbrs R2,7
	rjmp L34
X10:
	.dbline 196
;      return UDR0;
	lds R16,198
	.dbline -2
L33:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e SendChar _SendChar fV
;              c -> R16
	.even
_SendChar::
	.dbline -1
	.dbline 200
;   }		
; /*****************************************************************************/
; void SendChar(unsigned char c)
;   {	 
L38:
	.dbline 201
;     while (!(UCSR0A&(1<<UDRE0)));
L39:
	.dbline 201
	lds R2,192
	sbrs R2,5
	rjmp L38
X11:
	.dbline 202
;     UDR0=c;
	sts 198,R16
	.dbline -2
L37:
	.dbline 0 ; func end
	ret
	.dbsym r c 16 c
	.dbend
	.dbfunc e delay _delay fV
;              i -> R16,R17
	.even
_delay::
	.dbline -1
	.dbline 205
;   }
; void delay(void)  
;   {
	.dbline 207
;     unsigned int i;
;     for (i=0;i<65530;i++);
	clr R16
	clr R17
	xjmp L45
L42:
	.dbline 207
L43:
	.dbline 207
	subi R16,255  ; offset = 1
	sbci R17,255
L45:
	.dbline 207
	ldi R24,250
	ldi R25,255
	ldi R26,0
	ldi R27,0
	movw R2,R16
	clr R4
	clr R5
	cp R2,R24
	cpc R3,R25
	cpc R4,R26
	cpc R5,R27
	brlt L42
X12:
	.dbline -2
L41:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 i
	.dbend
	.dbfunc e ExecCode _ExecCode fV
	.even
_ExecCode::
	.dbline -1
	.dbline 212
;   }
; 
; /*****************************************************************************/
; void ExecCode(void)
;   {
	.dbline 213
;     MCUCR=(1<<IVCE);      //中断向量表移位允许
	ldi R24,1
	out 0x35,R24
	.dbline 214
;     MCUCR=0X00;           //中断向量指向应用程序区
	clr R2
	out 0x35,R2
	.dbline 215
;     asm("jmp 0x0000");              
	jmp 0x0000
	.dbline -2
L46:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e main _main fV
;           iTry -> R20
;        TempInt -> R22,R23
;       BootFlag -> R22
	.even
_main::
	.dbline -1
	.dbline 219
;   }
; 		
; void main(void)
;   {
	.dbline 239
;     unsigned char BootFlag;
;     unsigned int TempInt;
; 	char iTry;
; 	
;     #ifdef InteClk                //如果使用内部时钟,读取时钟校准值
;        OSCCAL=read_flash(OscAddress);
;     #endif
; 
; #ifdef W0	
;  //pei 拷贝W0的PortInit
;  	PORTB = 0x0F;//rfslp,fs123=1
;  	DDRB  = 0xFF;//bit1=output
;  	PORTC = 0x21;//0x20;//rfrst=1,not reset! 
;  	DDRC  = 0x7F;
;  	PORTD = 0x0C;
;  	DDRD  = 0xF0;
; #else
; #endif
;     
;     UCSR0C=(1<<UCSZ01)|(1<<UCSZ00); //8位数据+1位停止(1<<URSEL)|
	ldi R24,6
	sts 194,R24
	.dbline 240
;     UCSR0B = (1<<RXEN0)|(1<<TXEN0);       //允许串口发送和接收
	ldi R24,24
	sts 193,R24
	.dbline 241
;     UBRR0 = BAU;
	ldi R24,51
	ldi R25,0
	sts 196+1,R25
	sts 196,R24
	.dbline 243
; 
; 	iTry=20;
	ldi R20,20
L48:
	.dbline 249
; STARTBOOT://pei未下载程序时重复等待
; #ifdef W0	
;     PORTC=PORTC^0x03;//指示灯闪烁
; #endif
; 	
;     SendChar('>');              //通知PC机,BOOT下载准备就绪
	ldi R16,62
	xcall _SendChar
	.dbline 250
;     delay();                    //延时等待PC机响应
	xcall _delay
	.dbline 251
;     BootFlag=UDR0;
	lds R22,198
	.dbline 252
;     if (BootFlag == '<') 
	cpi R22,60
	brne L49
X13:
	.dbline 253
;       {
	.dbline 254
; 	     SendChar(ChipType);   //芯片版本信息
	ldi R16,49
	xcall _SendChar
	.dbline 255
;          SendChar(BootSize);
	ldi R16,99
	xcall _SendChar
	.dbline 256
;          SendChar(BootVer);
	ldi R16,103
	xcall _SendChar
	xjmp L52
L51:
	.dbline 258
;          while (1)
; 	   {
	.dbline 259
; 	     switch (RecChar())
	xcall _RecChar
	mov R22,R16
	clr R23
	cpi R22,69
	ldi R30,0
	cpc R23,R30
	breq L58
X14:
	cpi R22,69
	ldi R30,0
	cpc R23,R30
	brlt L55
X15:
L59:
	cpi R22,87
	ldi R30,0
	cpc R23,R30
	breq L57
X16:
	xjmp L55
L57:
	.dbline 261
; 	       {
; 	         case 'W': FlashLoad();
	xcall _FlashLoad
	.dbline 262
; 			 	   break;
	xjmp L55
L58:
	.dbline 263
; 	         case 'E': { 
	.dbline 264
; 	         	     SendChar('E');  //通知PC机,进入运用程序区
	ldi R16,69
	xcall _SendChar
	.dbline 265
; 	         	     ExecCode();  
	xcall _ExecCode
	.dbline 266
; 	         	   } break;
	.dbline 266
	.dbline 267
; 	         default : break;
L55:
	.dbline 269
; 	       }
; 	   }
L52:
	.dbline 257
	xjmp L51
L49:
	.dbline 271
;       }
;     SendChar('E');  
	ldi R16,69
	xcall _SendChar
	.dbline 273
; 	
; 	TempInt = read_program_memory(0,0);//pei
	clr R18
	clr R16
	clr R17
	xcall _read_program_memory
	movw R22,R16
	.dbline 274
; 	if (TempInt==0xFFFF) goto STARTBOOT;
	cpi R16,255
	ldi R30,255
	cpc R17,R30
	brne L60
X17:
	.dbline 274
	xjmp L48
L60:
	.dbline 275
; 	  else{ iTry--;
	.dbline 275
	dec R20
	.dbline 276
; 	        if (iTry>0) goto STARTBOOT;}
	ldi R24,0
	cp R24,R20
	brsh L62
X18:
	.dbline 276
	xjmp L48
L62:
	.dbline 276
	.dbline 278
; 	
;     ExecCode();//执行用户区程序
	xcall _ExecCode
	.dbline -2
L47:
	.dbline 0 ; func end
	ret
	.dbsym r iTry 20 c
	.dbsym r TempInt 22 i
	.dbsym r BootFlag 22 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile F:\程序\新建文~1\BootLoad_88可用\main.c
_PageAddress::
	.blkb 2
	.dbsym e PageAddress _PageAddress i
_PageBuffer::
	.blkb 128
	.dbsym e PageBuffer _PageBuffer A[128:128]c
;   }

⌨️ 快捷键说明

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