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

📄 cqt_boot.lst

📁 单片机MEGA128的BOOTLOADER程序。
💻 LST
📖 第 1 页 / 共 3 页
字号:
    F984 E086      LDI	R24,6
    F985 9380009D  STS	0x9D,R24
(0184)  UBRR1L = 0x0B; //set baud rate lo
    F987 E08B      LDI	R24,0xB
    F988 93800099  STS	0x99,R24
(0185)  UBRR1H = 0x00; //set baud rate hi
    F98A 92200098  STS	0x98,R2
(0186)  UCSR1B = 0x18;
    F98C E188      LDI	R24,0x18
    F98D 9380009A  STS	0x9A,R24
    F98F 9508      RET
(0187) }
(0188) /*//UART1 initialize
(0189) // desired baud rate:19200
(0190) // actual baud rate:19200 (0.0%)
(0191) // char size: 8 bit
(0192) // parity: Disabled
(0193) void uart1_init(void)
(0194) {
(0195)  UCSR1B = 0x00; //disable while setting baud rate
(0196)  UCSR1A = 0x00;
(0197)  UCSR1C = 0x06;
(0198)  UBRR1L = 0x23; //set baud rate lo
(0199)  UBRR1H = 0x00; //set baud rate hi
(0200)  UCSR1B = 0x18;
(0201) }*/
(0202) unsigned char RecChar(void)
(0203)   {
(0204)       timenum=0;
_RecChar:
    F990 2422      CLR	R2
    F991 2433      CLR	R3
    F992 9230010B  STS	timenum+1,R3
    F994 9220010A  STS	timenum,R2
(0205)      do{
(0206) 	   timenum++;
    F996 9180010A  LDS	R24,timenum
    F998 9190010B  LDS	R25,timenum+1
    F99A 9601      ADIW	R24,1
    F99B 9390010B  STS	timenum+1,R25
    F99D 9380010A  STS	timenum,R24
(0207) 	   if(timenum>50000){timenum=0;clr_dog();}
    F99F E580      LDI	R24,0x50
    F9A0 EC93      LDI	R25,0xC3
    F9A1 9020010A  LDS	R2,timenum
    F9A3 9030010B  LDS	R3,timenum+1
    F9A5 1582      CP	R24,R2
    F9A6 0593      CPC	R25,R3
    F9A7 F438      BCC	0xF9AF
    F9A8 2422      CLR	R2
    F9A9 2433      CLR	R3
    F9AA 9230010B  STS	timenum+1,R3
    F9AC 9220010A  STS	timenum,R2
    F9AE DF5F      RCALL	_clr_dog
(0208)        }while(!(UCSR1A & 0x80));
    F9AF 9020009B  LDS	R2,0x9B
    F9B1 FE27      SBRS	R2,7
    F9B2 CFE3      RJMP	0xF996
(0209)      return UDR1;
    F9B3 9100009C  LDS	R16,0x9C
    F9B5 9508      RET
(0210)   }		
(0211) /*unsigned char RecChar(void)
(0212)   {
(0213)        timenum=0;
(0214)      do{
(0215) 	   timenum++;
(0216) 	   clr_dog();
(0217)        }while((!(UCSR0A & 0x80))&&(timenum<10000000));
(0218)      return UDR0;
(0219)   }		 */ 
(0220)   
(0221)  /*  		字符输出函数 		 */
(0222) void  Send_ByteUART1(char  ch)
(0223) 	{	
(0224) 	 UDR1=ch;
_Send_ByteUART1:
  ch                   --> R16
    F9B6 9300009C  STS	0x9C,R16
(0225)      while (!(UCSR1A&(1<<UDRE1)));          //UCSRA USART 控制状态寄存器A  UDRE=TI
    F9B8 9020009B  LDS	R2,0x9B
    F9BA FE25      SBRS	R2,5
    F9BB CFFC      RJMP	0xF9B8
    F9BC 9508      RET
_send232:
  i                    --> R20
  l                    --> R22
  s                    --> R10
    F9BD 940EFC3E  CALL	push_gset3
    F9BF 2F62      MOV	R22,R18
    F9C0 0158      MOVW	R10,R16
(0226) 	} 
(0227) 	
(0228) void send232(unsigned char *s,unsigned char l)
(0229) {
(0230) unsigned char i;
(0231) for(i=0;i<l;i++)
    F9C1 2744      CLR	R20
    F9C2 C007      RJMP	0xF9CA
(0232) Send_ByteUART1(*(s+i));
    F9C3 2FE4      MOV	R30,R20
    F9C4 27FF      CLR	R31
    F9C5 0DEA      ADD	R30,R10
    F9C6 1DFB      ADC	R31,R11
    F9C7 8100      LDD	R16,Z+0
    F9C8 DFED      RCALL	_Send_ByteUART1
    F9C9 9543      INC	R20
    F9CA 1746      CP	R20,R22
    F9CB F3B8      BCS	0xF9C3
    F9CC 940EFC36  CALL	pop_gset3
    F9CE 9508      RET
_sendok:
  i                    --> R20
    F9CF 940EFC42  CALL	push_gset1
(0233) }	 
(0234) void sendok(void)
(0235) {
(0236) unsigned char i=0;
    F9D1 2744      CLR	R20
(0237) Senddata[0]='!'; 
    F9D2 E281      LDI	R24,0x21
    F9D3 93800116  STS	Senddata,R24
(0238) Senddata[5]=1;
    F9D5 E081      LDI	R24,1
    F9D6 9380011B  STS	0x11B,R24
(0239) Senddata[6]=0xd;
    F9D8 E08D      LDI	R24,0xD
    F9D9 9380011C  STS	0x11C,R24
(0240) Senddata[7]=0xa;
    F9DB E08A      LDI	R24,0xA
    F9DC 9380011D  STS	0x11D,R24
(0241) send232(Senddata,8);
    F9DE E028      LDI	R18,0x8
    F9DF E106      LDI	R16,0x16
    F9E0 E011      LDI	R17,1
    F9E1 DFDB      RCALL	_send232
    F9E2 940EFC45  CALL	pop_gset1
    F9E4 9508      RET
_senderror:
  i                    --> R20
    F9E5 940EFC42  CALL	push_gset1
(0242) }  
(0243) void senderror(void)
(0244) {
(0245) unsigned char i=0;
    F9E7 2744      CLR	R20
(0246) Senddata[0]='!';
    F9E8 E281      LDI	R24,0x21
    F9E9 93800116  STS	Senddata,R24
(0247) Senddata[5]=0;
    F9EB 2422      CLR	R2
    F9EC 9220011B  STS	0x11B,R2
(0248) Senddata[6]=0xd;
    F9EE E08D      LDI	R24,0xD
    F9EF 9380011C  STS	0x11C,R24
(0249) Senddata[7]=0xa;
    F9F1 E08A      LDI	R24,0xA
    F9F2 9380011D  STS	0x11D,R24
(0250) send232(Senddata,8);
    F9F4 E028      LDI	R18,0x8
    F9F5 E106      LDI	R16,0x16
    F9F6 E011      LDI	R17,1
    F9F7 DFC5      RCALL	_send232
    F9F8 940EFC45  CALL	pop_gset1
    F9FA 9508      RET
_uart0_rx:
  jym                  --> R12
  flag                 --> R20
  jym1                 --> R10
  i                    --> R22
    F9FB 940EFC3C  CALL	push_gset4
(0251) }   
(0252) void uart0_rx(void)
(0253) {
(0254) char flag,jym,jym1;
(0255) int i;
(0256) flag=0;
    F9FD 2744      CLR	R20
(0257) do{
(0258)   
(0259)   if(data[0]!='!')data[0]=RecChar();   
    F9FE 91800134  LDS	R24,data
    FA00 3281      CPI	R24,0x21
    FA01 F021      BEQ	0xFA06
    FA02 DF8D      RCALL	_RecChar
    FA03 93000134  STS	data,R16
    FA05 C059      RJMP	0xFA5F
(0260)   else
(0261) 	 {
(0262) 	  Senddata[1]=RecChar();
    FA06 DF89      RCALL	_RecChar
    FA07 93000117  STS	Senddata+1,R16
(0263) 	  Senddata[2]=RecChar();
    FA09 DF86      RCALL	_RecChar
    FA0A 93000118  STS	Senddata+2,R16
(0264) 	  Senddata[3]=RecChar();
    FA0C DF83      RCALL	_RecChar
    FA0D 93000119  STS	Senddata+3,R16
(0265) 	  Senddata[4]=RecChar();
    FA0F DF80      RCALL	_RecChar
    FA10 9300011A  STS	0x11A,R16
(0266) 	  
(0267) 	  for(i=0;i<256;i++)
    FA12 2766      CLR	R22
    FA13 2777      CLR	R23
(0268)       data[i]=RecChar();		  
    FA14 DF7B      RCALL	_RecChar
    FA15 E384      LDI	R24,0x34
    FA16 E091      LDI	R25,1
    FA17 01FB      MOVW	R30,R22
    FA18 0FE8      ADD	R30,R24
    FA19 1FF9      ADC	R31,R25
    FA1A 8300      STD	Z+0,R16
    FA1B 5F6F      SUBI	R22,0xFF
    FA1C 4F7F      SBCI	R23,0xFF
    FA1D 3060      CPI	R22,0
    FA1E E0E1      LDI	R30,1
    FA1F 077E      CPC	R23,R30
    FA20 F39C      BLT	0xFA14
(0269) 	  jym=RecChar();	   
    FA21 DF6E      RCALL	_RecChar
    FA22 2EC0      MOV	R12,R16
(0270) 	  jym1=0;	  
    FA23 24AA      CLR	R10
(0271) 	  for(i=0;i<256;i++)jym1=jym1^data[i];
    FA24 2766      CLR	R22
    FA25 2777      CLR	R23
    FA26 E384      LDI	R24,0x34
    FA27 E091      LDI	R25,1
    FA28 01FB      MOVW	R30,R22
    FA29 0FE8      ADD	R30,R24
    FA2A 1FF9      ADC	R31,R25
    FA2B 8020      LDD	R2,Z+0
    FA2C 24A2      EOR	R10,R2
    FA2D 5F6F      SUBI	R22,0xFF
    FA2E 4F7F      SBCI	R23,0xFF
    FA2F 3060      CPI	R22,0
    FA30 E0E1      LDI	R30,1
    FA31 077E      CPC	R23,R30
    FA32 F39C      BLT	0xFA26
(0272) 	  if(jym!=jym1)
    FA33 14CA      CP	R12,R10
    FA34 F011      BEQ	0xFA37
(0273) 	  senderror();	
    FA35 DFAF      RCALL	_senderror
    FA36 C028      RJMP	0xFA5F
(0274) 	  else if((lengthbak1==Senddata[3])&&(lengthbak2==Senddata[4]))sendok(); 
    FA37 90200119  LDS	R2,Senddata+3
    FA39 9030010D  LDS	R3,lengthbak1
    FA3B 1432      CP	R3,R2
    FA3C F441      BNE	0xFA45
    FA3D 9020011A  LDS	R2,0x11A
    FA3F 9030010C  LDS	R3,lengthbak2
    FA41 1432      CP	R3,R2
    FA42 F411      BNE	0xFA45
    FA43 DF8B      RCALL	_sendok
    FA44 C01A      RJMP	0xFA5F
(0275) 	  else if((Senddata[1]==Senddata[3])&&(Senddata[2]==Senddata[4]))
    FA45 90200119  LDS	R2,Senddata+3
    FA47 90300117  LDS	R3,Senddata+1
    FA49 1432      CP	R3,R2
    FA4A F459      BNE	0xFA56
    FA4B 9020011A  LDS	R2,0x11A
    FA4D 90300118  LDS	R3,Senddata+2
    FA4F 1432      CP	R3,R2
    FA50 F429      BNE	0xFA56
(0276) 	  {
(0277) 	  ROK_flag=1;
    FA51 E081      LDI	R24,1
    FA52 93800105  STS	ROK_flag,R24
(0278) 	  flag=1;
    FA54 E041      LDI	R20,1
(0279) 	  }
    FA55 C009      RJMP	0xFA5F
(0280) 	  else  {lengthbak1=Senddata[3];lengthbak2=Senddata[4];flag=1;}	  
    FA56 90200119  LDS	R2,Senddata+3
    FA58 9220010D  STS	lengthbak1,R2
    FA5A 9020011A  LDS	R2,0x11A
    FA5C 9220010C  STS	lengthbak2,R2
    FA5E E041      LDI	R20,1
(0281) 	 }
(0282)  // else senderror();
(0283)   }while(flag==0); 
    FA5F 2344      TST	R20
    FA60 F409      BNE	0xFA62
    FA61 CF9C      RJMP	0xF9FE
    FA62 940EFC38  CALL	pop_gset4
    FA64 9508      RET
_main:
  byte_num             --> R10
  page_num             --> R12
  BootFlag             --> Y+2
  i                    --> R10
    FA65 9723      SBIW	R28,3
(0284) }	 
(0285) //主程序 
(0286) void main(void)
(0287)   {
(0288)     unsigned char BootFlag,i; 
(0289) 	int page_num,byte_num;	
(0290)     Init_mag128();
    FA66 DE73      RCALL	_Init_mag128
(0291) 	uart1_init();
    FA67 DF17      RCALL	_uart1_init
(0292) 	//PORTD&=~(1<<7);//GSM关机
(0293) 	PORTD|=(1<<7);
    FA68 9A97      SBI	0x12,7
(0294) 	Init_SPI();	
    FA69 DE89      RCALL	_Init_SPI
(0295) 	df_reset();
    FA6A DEAB      RCALL	_df_reset
(0296) 	
(0297) 	delay_ms(1000);
    FA6B EE08      LDI	R16,0xE8
    FA6C E013      LDI	R17,3
    FA6D DE8A      RCALL	_delay_ms
(0298) 	EEPROM_READ(0x7ff,BootFlag);	
    FA6E E081      LDI	R24,1
    FA6F E090      LDI	R25,0
    FA70 8399      STD	Y+1,R25
    FA71 8388      STD	Y+0,R24
    FA72 019E      MOVW	R18,R28
    FA73 5F2E      SUBI	R18,0xFE
    FA74 4F3F      SBCI	R19,0xFF
    FA75 EF0F      LDI	R16,0xFF
    FA76 E017      LDI	R17,7
    FA77 940EFC99  CALL	_EEPROMReadBytes
(0299) 	delay_ms(2);
    FA79 E002      LDI	R16,2
    FA7A E010      LDI	R17,0
    FA7B DE7C      RCALL	_delay_ms
(0300) 	if(BootFlag==0)quit();
    FA7C 802A      LDD	R2,Y+2
    FA7D 2022      TST	R2
    FA7E F411      BNE	0xFA81
    FA7F DE52      RCALL	_quit
    FA80 C175      RJMP	0xFBF6
(0301) 	else if(BootFlag!=1)
    FA81 818A      LDD	R24,Y+2
    FA82 3081      CPI	R24,1
    FA83 F409      BNE	0xFA85
    FA84 C055      RJMP	0xFADA
(0302) 	   {     
(0303) 	         for(i=0;i<12;i++)
    FA85 24AA      CLR	R10
    FA86 C009      RJMP	0xFA90
(0304)              data[i]=RecChar();	         
    FA87 DF08      RCALL	_RecChar
    FA88 E384      LDI	R24,0x34
    FA89 E091      LDI	R25,1
    FA8A 2DEA      MOV	R30,R10
    FA8B 27FF      CLR	R31
    FA8C 0FE8      ADD	R30,R24
    FA8D 1FF9      ADC	R31,R25
    FA8E 8300      STD	Z+0,R16
    FA8F 94A3      INC	R10
    FA90 2D8A      MOV	R24,R10
    FA91 308C      CPI	R24,0xC
    FA92 F3A0      BCS	0xFA87
(0305) 			 if((data[0]=='B')&&(data[1]=='o'))
    FA93 91800134  LDS	R24,data
    FA95 3482      CPI	R24,0x42
    FA96 F009      BEQ	0xFA98
    FA97 C040      RJMP	0xFAD8
    FA98 91800135  LDS	R24,data+1
    FA9A 368F      CPI	R24,0x6F
    FA9B F009      BEQ	0xFA9D
    FA9C C03B      RJMP	0xFAD8
(0306) 			 {
(0307) 			  delay_ms(200);
    FA9D EC08      LDI	R16,0xC8
    FA9E E010      LDI	R17,0
    FA9F DE58      RCALL	_delay_ms
(0308) 			  sendok();
    FAA0 DF2E      RCALL	_sendok
(0309) 	     	 do{ 
(0310) 		   	   uart0_rx();  
    FAA1 DF59      RCALL	_uart0_rx
(0311) 	       	   write_one_page();            //收到256字节写入一页Flash中 
    FAA2 DDF4      RCALL	_write_one_page
(0312)            	   address += SPM_PAGESIZE;     //Flash页加1  	
    FAA3 E040      LDI	R20,0
    FAA4 E051      LDI	R21,1
    FAA5 E060      LDI	R22,0
    FAA6 E070      LDI	R23,0
    FAA7 90400102  LDS	R4,address+2
    FAA9 90500103  LDS	R5,address+3
    FAAB 90200100  LDS	R2,address
    FAAD 90300101  LDS	R3,address+1
    FAAF 0E24      ADD	R2,R20
    FAB0 1E35      ADC	R3,R21
    FAB1 1E46      ADC	R4,R22
    FAB2 1E57      ADC	R5,R23
    FAB3 92300101  STS	address+1,R3
    FAB5 92200100  STS	address,R2
    FAB7 92500103  STS	address+3,R5
    FAB9 92400102  STS	address+2,R4
(0313) 			   sendok();
    FABB DF13      RCALL	_sendok
(0314) 			   delay_ms(1);	   
    FABC E001      LDI	R16,1
    FABD E010      LDI	R17,0
    FABE DE39      RCALL	_delay_ms
(0315) 		  	   }while(ROK_flag==0);		 
    FABF 90200105  LDS	R2,ROK_flag
    FAC1 2022      TST	R2
    FAC2 F2F1      BEQ	0xFAA1
(0316) 		      delay_ms(20);
    FAC3 E104      LDI	R16,0x14
    FAC4 E010      LDI	R17,0
    FAC5 DE32      RCALL	_delay_ms
(0317) 			  BootFlag=0;
    FAC6 2422      CLR	R2
    FAC7 822A      STD	Y+2,R2
(0318) 			  EEPROM_WRITE(0x7ff,BootFlag);	
    FAC8 E081      LDI	R24,1
    FAC9 E090      LDI	R25,0
    FACA 8399      STD	Y+1,R25
    FACB 8388      STD	Y+0,R24
    FACC 019E      MOVW	R18,R28
    FACD 5F2E      SUBI	R18,0xFE
    FACE 4F3F      SBCI	R19,0xFF
    FACF EF0F      LDI	R16,0xFF
    FAD0 E017      LDI	R17,7
    FAD1 940EFCBA  CALL	_EEPROMWriteBytes
(0319) 			  delay_ms(2000);
    FAD3 ED00      LDI	R16,0xD0
    FAD4 E017      LDI	R17,7
    FAD5 DE22      RCALL	_delay_ms
(0320) 			  quit();
    FAD6 DDFB      RCALL	_quit
(0321) 			  }
    FAD7 C11E      RJMP	0xFBF6
(0322) 			else quit();
    FAD8 DDF9      RCALL	_quit
(0323) 	   }
    FAD9 C11C      RJMP	0xFBF6
(0324) 	else 
(0325) 	{  
(0326) 	   page_counter_rd=3849;//128k;
    FADA E089      LDI	R24,0x9
    FADB E09F      LDI	R25,0xF
    FADC 93900111  STS	page_counter_rd+1,R25
    FADE 93800110  STS	page_counter_rd,R24
(0327) 	   page_offset_rd=0;
    FAE0 2422      CLR	R2
    FAE1 2433      CLR	R3
    FAE2 9230010F  STS	page_offset_rd+1,R3
    FAE4 9220010E  STS	page_offset_rd,R2
(0328) 	   delay_ms(2);
    FAE6 E002      LDI	R16,2
    FAE7 E010      LDI	R17,0
    FAE8 DE0F      RCALL	_delay_ms
(0329) 	   Read_Testfile(data ,4 );	
    FAE9 E024      LDI	R18,4
    FAEA E030      LDI	R19,0
    FAEB E304      LDI	R16,0x34
    FAEC E011      LDI	R17,1
    FAED DE33      RCALL	_Read_Testfile
(0330) 	   delay_ms(2);
    FAEE E002      LDI	R16,2
    FAEF E010      LDI	R17,0
    FAF0 DE07      RCALL	_delay_ms
(0331) 	   Filelength=0;
    FAF1 E040      LDI	R20,0
    FAF2 E050      LDI	R21,0
    FAF3 E060      LDI	R22,0
    FAF4 E070      LDI	R23,0
    FAF5 93500113  STS	Filelength+1,R21
    FAF7 93400112  STS	Filelength,R20
    FAF9 93700115  STS	Filelength+3,R23
    FAFB 93600114  STS	Filelength+2,R22
(0332) 	   Filelength=data[2];
    FAFD 90200136  LDS	R2,data+2
    FAFF 2433      CLR	R3
    FB00 2444      CLR	R4
    FB01 2455      CLR	R5
    FB02 92300113  STS	Filelength+1,R3
    FB04 92200112  STS	Filelength,R2
    FB06 92500115  STS	Filelength+3,R5
    FB08 92400114  STS	Filelength+2,R4
(0333) 	   Filelength=Filelength*0x100+data[3];

⌨️ 快捷键说明

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