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

📄 avr-bootloader.lst

📁 ATMEG128在线升级程序,运行稳定可靠
💻 LST
📖 第 1 页 / 共 2 页
字号:
    FD4F E40F      LDI	R16,0x4F
    FD50 DFB6      RCALL	_uart_putchar
    FD51 E40B      LDI	R16,0x4B
    FD52 DFB4      RCALL	_uart_putchar
    FD53 E30F      LDI	R16,0x3F
    FD54 DFB2      RCALL	_uart_putchar
(0125) 	uart_putchar(0x0d);uart_putchar(0x0a);
    FD55 E00D      LDI	R16,0xD
    FD56 DFB0      RCALL	_uart_putchar
    FD57 E00A      LDI	R16,0xA
    FD58 DFAE      RCALL	_uart_putchar
(0126) 	while(!(UCSR0A&0x20));
    FD59 9B5D      SBIS	0x0B,5
    FD5A CFFE      RJMP	0xFD59
(0127) 	MCUCR=0x01;
    FD5B E081      LDI	R24,1
    FD5C BF85      OUT	0x35,R24
(0128) 	MCUCR=0x00;
    FD5D 2422      CLR	R2
    FD5E BE25      OUT	0x35,R2
(0129) 	RAMPZ=0x00;
    FD5F BE2B      OUT	0x3B,R2
(0130) 	asm("jmp 0x0000\n");
    FD60 940C 0000 JMP	0x0000
    FD62 9508      RET
(0131)  }
(0132) 
(0133)  //主程序
(0134)  void main(void)
(0135)  {
(0136) 	int i=0;
_main:
  timercount           --> R12
  crc                  --> R10
  packNO               --> R22
  i                    --> R10
  bufferPoint          --> R20
    FD63 24AA      CLR	R10
    FD64 24BB      CLR	R11
(0137) 	unsigned char timercount=0;
    FD65 24CC      CLR	R12
(0138) 	unsigned char packNO=1;
    FD66 E061      LDI	R22,1
(0139) 	int bufferPoint=0;
    FD67 2744      CLR	R20
    FD68 2755      CLR	R21
(0140) 	unsigned int crc;
(0141) 	//初始化M128的USART0
(0142) 	UBRR0H=BAUD_H; 
    FD69 2422      CLR	R2
    FD6A 9220 0090 STS	0x0090,R2
(0143) 	UBRR0L=BAUD_L;
    FD6C E187      LDI	R24,0x17
    FD6D B989      OUT	0x09,R24
(0144) 	UCSR0B=0x18;
    FD6E E188      LDI	R24,0x18
    FD6F B98A      OUT	0x0A,R24
(0145) 	UCSR0C=0x0E;  
    FD70 E08E      LDI	R24,0xE
    FD71 9380 0095 STS	0x0095,R24
(0146) 	OCR0=0xEA;
    FD73 EE8A      LDI	R24,0xEA
    FD74 BF81      OUT	0x31,R24
(0147) 	//////////
(0148) 	MCUCR = 0x00;
    FD75 BE25      OUT	0x35,R2
(0149) 	EICRA = 0x00; //extended ext ints
    FD76 9220 006A STS	0x006A,R2
(0150) 	EICRB = 0x00; //extended ext ints
    FD78 BE2A      OUT	0x3A,R2
(0151) 	EIMSK = 0x00;
    FD79 BE29      OUT	0x39,R2
(0152) 	TIMSK = 0x00; //timer interrupt sources
    FD7A BE27      OUT	0x37,R2
(0153) 	ETIMSK = 0x00; //extended timer interrupt sources
    FD7B 9220 007D STS	0x007D,R2
(0154) 
(0155) 	TCCR0 = 0x00; //stop
    FD7D BE23      OUT	0x33,R2
(0156) 	ASSR  = 0x00; //set async mode
    FD7E BE20      OUT	0x30,R2
(0157) 	TCNT0 = 0x29; //set count
    FD7F E289      LDI	R24,0x29
    FD80 BF82      OUT	0x32,R24
(0158) 	OCR0  = 0xD7;
    FD81 ED87      LDI	R24,0xD7
    FD82 BF81      OUT	0x31,R24
    FD83 C00A      RJMP	0xFD8E
(0159) 	//TCCR0 = 0x07; //start timer
(0160) 	/////////// 
(0161) 	while(startupString[i]!='\0')
(0162) 	{
(0163) 		uart_putchar(startupString[i]);
    FD84 E88C      LDI	R24,0x8C
    FD85 EF98      LDI	R25,0xF8
    FD86 01F5      MOVW	R30,R10
    FD87 0FE8      ADD	R30,R24
    FD88 1FF9      ADC	R31,R25
    FD89 9106      ELPM	R16,248(Z)
    FD8A DF7C      RCALL	_uart_putchar
(0164) 		i++;
    FD8B 01C5      MOVW	R24,R10
    FD8C 9601      ADIW	R24,1
    FD8D 015C      MOVW	R10,R24
    FD8E E88C      LDI	R24,0x8C
    FD8F EF98      LDI	R25,0xF8
    FD90 01F5      MOVW	R30,R10
    FD91 0FE8      ADD	R30,R24
    FD92 1FF9      ADC	R31,R25
    FD93 9026      ELPM	R2,248(Z)
    FD94 2022      TST	R2
    FD95 F771      BNE	0xFD84
(0165) 	}  
(0166) 	TCCR0 = 0x07; //start timer
    FD96 E087      LDI	R24,7
    FD97 BF83      OUT	0x33,R24
    FD98 C015      RJMP	0xFDAE
(0167) 	//////3秒等待PC机发'd',否则退出Bootloader程序,从0x0000处执行应用程序
(0168) 	while(1)
(0169) 	{
(0170) 		if(uart_getchar()=='d')break;
    FD99 DF71      RCALL	_uart_getchar
    FD9A 3604      CPI	R16,0x64
    FD9B E0E0      LDI	R30,0
    FD9C 071E      CPC	R17,R30
    FD9D F409      BNE	0xFD9F
    FD9E C020      RJMP	0xFDBF
(0171) 		if(TIFR&0x02)
    FD9F B626      IN	R2,0x36
    FDA0 FE21      SBRS	R2,1
    FDA1 C00C      RJMP	0xFDAE
(0172) 		{
(0173)    			if(++timercount>200) quit();	//3秒
    FDA2 2D8C      MOV	R24,R12
    FDA3 5F8F      SUBI	R24,0xFF
    FDA4 2EC8      MOV	R12,R24
    FDA5 EC88      LDI	R24,0xC8
    FDA6 158C      CP	R24,R12
    FDA7 F408      BCC	0xFDA9
    FDA8 DFA6      RCALL	_quit
(0174) 	//		if(++timercount>20) quit();		//1秒 林树亮 2007-6-25改
(0175) 
(0176) 			TCNT0 = 0x29; //set count
    FDA9 E289      LDI	R24,0x29
    FDAA BF82      OUT	0x32,R24
(0177) 			TIFR=TIFR|0x02;
    FDAB B786      IN	R24,0x36
    FDAC 6082      ORI	R24,2
    FDAD BF86      OUT	0x36,R24
    FDAE CFEA      RJMP	0xFD99
(0178) 		}
(0179) 	}
(0180)   
(0181)  ////每秒向PC机发送一个控制字符C,等待控制字
(0182)  while(uart_getchar()!=XMODEM_SOH)
(0183)  {
(0184) 	if(TIFR&0x02)
    FDAF B626      IN	R2,0x36
    FDB0 FE21      SBRS	R2,1
    FDB1 C00D      RJMP	0xFDBF
(0185) 	{
(0186) 		if(++timercount>67)
    FDB2 2D8C      MOV	R24,R12
    FDB3 5F8F      SUBI	R24,0xFF
    FDB4 2EE8      MOV	R14,R24
    FDB5 2EC8      MOV	R12,R24
    FDB6 E483      LDI	R24,0x43
    FDB7 158C      CP	R24,R12
    FDB8 F418      BCC	0xFDBC
(0187) 		{
(0188)    			uart_putchar(XMODEM_RECIEVING_WAIT_CHAR);
    FDB9 E403      LDI	R16,0x43
    FDBA DF4C      RCALL	_uart_putchar
(0189) 			timercount=0;
    FDBB 24CC      CLR	R12
(0190) 		}
(0191) 		TIFR=TIFR|0x02;
    FDBC B786      IN	R24,0x36
    FDBD 6082      ORI	R24,2
    FDBE BF86      OUT	0x36,R24
    FDBF DF4B      RCALL	_uart_getchar
    FDC0 0178      MOVW	R14,R16
    FDC1 3001      CPI	R16,1
    FDC2 E0E0      LDI	R30,0
    FDC3 071E      CPC	R17,R30
    FDC4 F751      BNE	0xFDAF
(0192) 	}
(0193)  }
(0194)  //////开始接收数据块
(0195)  do
(0196)  {
(0197) 	if((packNO==uart_waitchar())&&(packNO==(~uart_waitchar())))	
    FDC5 DF54      RCALL	_uart_waitchar
    FDC6 2EC0      MOV	R12,R16
    FDC7 1760      CP	R22,R16
    FDC8 F009      BEQ	0xFDCA
    FDC9 C05A      RJMP	0xFE24
    FDCA DF4F      RCALL	_uart_waitchar
    FDCB 2EC0      MOV	R12,R16
    FDCC 2C2C      MOV	R2,R12
    FDCD 9420      COM	R2
    FDCE 1562      CP	R22,R2
    FDCF F009      BEQ	0xFDD1
    FDD0 C053      RJMP	0xFE24
(0198) 	{
(0199) 		for(i=0;i<128;i++)
    FDD1 24AA      CLR	R10
    FDD2 24BB      CLR	R11
(0200) 		{
(0201) 			data[bufferPoint]=uart_waitchar();
    FDD3 DF46      RCALL	_uart_waitchar
    FDD4 2EC0      MOV	R12,R16
    FDD5 E084      LDI	R24,4
    FDD6 E091      LDI	R25,1
    FDD7 01FA      MOVW	R30,R20
    FDD8 0FE8      ADD	R30,R24
    FDD9 1FF9      ADC	R31,R25
    FDDA 82C0      STD	Z+0,R12
(0202) 			bufferPoint++;
    FDDB 5F4F      SUBI	R20,0xFF
    FDDC 4F5F      SBCI	R21,0xFF
    FDDD 01C5      MOVW	R24,R10
    FDDE 9601      ADIW	R24,1
    FDDF 015C      MOVW	R10,R24
    FDE0 3880      CPI	R24,0x80
    FDE1 E0E0      LDI	R30,0
    FDE2 079E      CPC	R25,R30
    FDE3 F37C      BLT	0xFDD3
(0203) 		}
(0204) 		crc=uart_waitchar()<<8; //修改处
    FDE4 DF35      RCALL	_uart_waitchar
    FDE5 2EA0      MOV	R10,R16
    FDE6 2C2A      MOV	R2,R10
    FDE7 2433      CLR	R3
    FDE8 2C32      MOV	R3,R2
    FDE9 2422      CLR	R2
    FDEA 0151      MOVW	R10,R2
(0205) 		crc+=uart_waitchar();  //修改处
    FDEB DF2E      RCALL	_uart_waitchar
    FDEC 2EC0      MOV	R12,R16
    FDED 2C2C      MOV	R2,R12
    FDEE 2433      CLR	R3
    FDEF 0CA2      ADD	R10,R2
    FDF0 1CB3      ADC	R11,R3
(0206) 		if(calcrc(&data[bufferPoint-128],128)==crc)
    FDF1 E820      LDI	R18,0x80
    FDF2 E030      LDI	R19,0
    FDF3 E884      LDI	R24,0x84
    FDF4 E090      LDI	R25,0
    FDF5 018A      MOVW	R16,R20
    FDF6 0F08      ADD	R16,R24
    FDF7 1F19      ADC	R17,R25
    FDF8 DF2C      RCALL	_calcrc
    FDF9 0168      MOVW	R12,R16
    FDFA 150A      CP	R16,R10
    FDFB 051B      CPC	R17,R11
    FDFC F521      BNE	0xFE21
(0207) 		{
    FDFD C01B      RJMP	0xFE19
(0208)    			while(bufferPoint>=SPM_PAGESIZE)
(0209) 			{
(0210) 				write_one_page();
    FDFE DECE      RCALL	_write_one_page
(0211) 				address+=SPM_PAGESIZE;
    FDFF E080      LDI	R24,0
    FE00 E091      LDI	R25,1
    FE01 E0A0      LDI	R26,0
    FE02 E0B0      LDI	R27,0
    FE03 9040 0102 LDS	R4,address+2
    FE05 9050 0103 LDS	R5,address+3
    FE07 9020 0100 LDS	R2,address
    FE09 9030 0101 LDS	R3,address+1
    FE0B 0E28      ADD	R2,R24
    FE0C 1E39      ADC	R3,R25
    FE0D 1E4A      ADC	R4,R26
    FE0E 1E5B      ADC	R5,R27
    FE0F 9230 0101 STS	address+1,R3
    FE11 9220 0100 STS	address,R2
    FE13 9250 0103 STS	address+3,R5
    FE15 9240 0102 STS	address+2,R4
(0212) 				bufferPoint=0;
    FE17 2744      CLR	R20
    FE18 2755      CLR	R21
    FE19 3040      CPI	R20,0
    FE1A E0E1      LDI	R30,1
    FE1B 075E      CPC	R21,R30
    FE1C F70C      BGE	0xFDFE
(0213) 			} 
(0214) 			uart_putchar(XMODEM_ACK);
    FE1D E006      LDI	R16,6
    FE1E DEE8      RCALL	_uart_putchar
(0215) 			packNO++;
    FE1F 9563      INC	R22
(0216) 		}
    FE20 C005      RJMP	0xFE26
(0217) 		else
(0218) 		{
(0219)    			uart_putchar(XMODEM_NAK);
    FE21 E105      LDI	R16,0x15
    FE22 DEE4      RCALL	_uart_putchar
(0220) 		}
(0221) 	}
    FE23 C002      RJMP	0xFE26
(0222) 	else
(0223) 	{
(0224) 		uart_putchar(XMODEM_NAK);
    FE24 E105      LDI	R16,0x15
    FE25 DEE1      RCALL	_uart_putchar
(0225) 	}
(0226)  }
(0227)  while(uart_waitchar()!=XMODEM_EOT);
    FE26 DEF3      RCALL	_uart_waitchar
    FE27 2EA0      MOV	R10,R16
    FE28 3004      CPI	R16,4
    FE29 F009      BEQ	0xFE2B
    FE2A CF9A      RJMP	0xFDC5
(0228)  uart_putchar(XMODEM_ACK);
    FE2B E006      LDI	R16,6
    FE2C DEDA      RCALL	_uart_putchar
(0229)  if(bufferPoint)
    FE2D 3040      CPI	R20,0
    FE2E 0745      CPC	R20,R21
    FE2F F009      BEQ	0xFE31
(0230) 	 write_one_page();
    FE30 DE9C      RCALL	_write_one_page
(0231)  quit();
FILE: <library>
    FE31 DF1D      RCALL	_quit
    FE32 9508      RET
push_arg4:
    FE33 933A      ST	R19,-Y
    FE34 932A      ST	R18,-Y
push_arg2:
    FE35 931A      ST	R17,-Y
    FE36 930A      ST	R16,-Y
    FE37 9508      RET
push_xgset300C:
    FE38 935A      ST	R21,-Y
    FE39 934A      ST	R20,-Y
    FE3A 92BA      ST	R11,-Y
    FE3B 92AA      ST	R10,-Y
    FE3C 9508      RET
pop_xgset300C:
    FE3D 90A9      LD	R10,Y+
    FE3E 90B9      LD	R11,Y+
    FE3F 9149      LD	R20,Y+
    FE40 9159      LD	R21,Y+
    FE41 9508      RET
push_xgsetF00C:
    FE42 937A      ST	R23,-Y
    FE43 936A      ST	R22,-Y
    FE44 935A      ST	R21,-Y
    FE45 934A      ST	R20,-Y
    FE46 92BA      ST	R11,-Y
    FE47 92AA      ST	R10,-Y
    FE48 9508      RET
pop_xgsetF00C:
    FE49 90A9      LD	R10,Y+
    FE4A 90B9      LD	R11,Y+
    FE4B 9149      LD	R20,Y+
    FE4C 9159      LD	R21,Y+
    FE4D 9169      LD	R22,Y+
    FE4E 9179      LD	R23,Y+
    FE4F 9508      RET

⌨️ 快捷键说明

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