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

📄 stk500i.lst

📁 文档里面的代码是可以正常使用的
💻 LST
📖 第 1 页 / 共 5 页
字号:
    00B4 DFAC      RCALL	_interface_init
(0065) 	spi_disable();
    00B5 D876      RCALL	_spi_disable
(0066) 	
(0067) 	//clock_speed=eeprom_read_byte(&eeprom_sck_period);
(0068) 	clock_speed=eeprom_sck_period;
    00B6 90200100  LDS	R2,eeprom_sck_period
    00B8 92200113  STS	clock_speed,R2
(0069) 	if (clock_speed==0xFF) {
    00BA 2D82      MOV	R24,R2
    00BB 3F8F      CPI	R24,0xFF
    00BC F419      BNE	0x00C0
(0070) 		clock_speed=SPI_SPEED_125KHZ;
    00BD E085      LDI	R24,5
    00BE 93800113  STS	clock_speed,R24
(0071) 		}
(0072) 	spi_set_speed(clock_speed);
    00C0 91000113  LDS	R16,clock_speed
    00C2 D87F      RCALL	_spi_set_speed
(0073) 	
(0074) 	SEI();
    00C3 9478      BSET	7
(0075) 
(0076) 	LED_GN_OFF;
    00C4 EF8E      LDI	R24,0xFE
    00C5 EF9F      LDI	R25,0xFF
    00C6 B025      IN	R2,0x05
    00C7 2228      AND	R2,R24
    00C8 B825      OUT	0x05,R2
(0077) 	LED_RT_ON;
    00C9 9A29      SBI	0x05,1
(0078) 	wait_ms(2000);
    00CA ED00      LDI	R16,0xD0
    00CB E017      LDI	R17,7
    00CC DF87      RCALL	_wait_ms
(0079) 	LED_GN_ON;
    00CD 9A28      SBI	0x05,0
(0080) 	LED_RT_OFF;
    00CE EF8D      LDI	R24,0xFD
    00CF EF9F      LDI	R25,0xFF
    00D0 B025      IN	R2,0x05
    00D1 2228      AND	R2,R24
    00D2 B825      OUT	0x05,R2
    00D3 C07A      RJMP	0x014E
(0081) 	
(0082) 	while(2) {
(0083) 		rec_data=interface_getc();
    00D4 DF96      RCALL	_interface_getc
    00D5 0158      MOVW	R10,R16
(0084) 		//if a byte has been received -> process it
(0085) 		if(rec_data!=-1) {
    00D6 01C5      MOVW	R24,R10
    00D7 3F0F      CPI	R16,0xFF
    00D8 EFEF      LDI	R30,0xFF
    00D9 071E      CPC	R17,R30
    00DA F409      BNE	0x00DC
    00DB C072      RJMP	0x014E
(0086) 			t=rec_data&0xFF;
    00DC 2F48      MOV	R20,R24
    00DD 7050      ANDI	R21,0
(0087) 
(0088) 			if(state==ST_START) {
    00DE 01C7      MOVW	R24,R14
    00DF 3080      CPI	R24,0
    00E0 EFE0      LDI	R30,0xF0
    00E1 079E      CPC	R25,R30
    00E2 F449      BNE	0x00EC
(0089) 				if(t==MESSAGE_START) {
    00E3 314B      CPI	R20,0x1B
    00E4 F009      BEQ	0x00E6
    00E5 C068      RJMP	0x014E
(0090) 					state = ST_GET_SEQ_NUM;
    00E6 E081      LDI	R24,1
    00E7 EF90      LDI	R25,0xF0
    00E8 017C      MOVW	R14,R24
(0091) 					checksum = MESSAGE_START^0;
    00E9 E18B      LDI	R24,0x1B
    00EA 2EC8      MOV	R12,R24
(0092) 					}
(0093) 				}
    00EB C062      RJMP	0x014E
(0094) 			else {
(0095) 				if(state==ST_GET_SEQ_NUM) {
    00EC 01C7      MOVW	R24,R14
    00ED 3081      CPI	R24,1
    00EE EFE0      LDI	R30,0xF0
    00EF 079E      CPC	R25,R30
    00F0 F431      BNE	0x00F7
(0096) 					seq_num = t;
    00F1 8348      STD	Y+0,R20
(0097) 					state = ST_MSG_SIZE_1;
    00F2 E082      LDI	R24,2
    00F3 EF90      LDI	R25,0xF0
    00F4 017C      MOVW	R14,R24
(0098) 					checksum ^= t;
    00F5 26C4      EOR	R12,R20
(0099) 					}
    00F6 C057      RJMP	0x014E
(0100) 				else {
(0101) 					if(state==ST_MSG_SIZE_1) {
    00F7 01C7      MOVW	R24,R14
    00F8 3082      CPI	R24,2
    00F9 EFE0      LDI	R30,0xF0
    00FA 079E      CPC	R25,R30
    00FB F449      BNE	0x0105
(0102) 						msg_size = t<<8;
    00FC 2F64      MOV	R22,R20
    00FD 2777      CLR	R23
    00FE 2F76      MOV	R23,R22
    00FF 2766      CLR	R22
(0103) 						state = ST_MSG_SIZE_2;
    0100 E083      LDI	R24,3
    0101 EF90      LDI	R25,0xF0
    0102 017C      MOVW	R14,R24
(0104) 						checksum ^= t;
    0103 26C4      EOR	R12,R20
(0105) 						}
    0104 C049      RJMP	0x014E
(0106) 					else {
(0107) 						if(state==ST_MSG_SIZE_2) {
    0105 01C7      MOVW	R24,R14
    0106 3083      CPI	R24,3
    0107 EFE0      LDI	R30,0xF0
    0108 079E      CPC	R25,R30
    0109 F449      BNE	0x0113
(0108) 							msg_size |= t;
    010A 2E24      MOV	R2,R20
    010B 2433      CLR	R3
    010C 2962      OR	R22,R2
    010D 2973      OR	R23,R3
(0109) 							state = ST_GET_TOKEN;
    010E E084      LDI	R24,4
    010F EF90      LDI	R25,0xF0
    0110 017C      MOVW	R14,R24
(0110) 							checksum ^= t;
    0111 24C2      EOR	R12,R2
(0111) 							}
    0112 C03B      RJMP	0x014E
(0112) 						else {
(0113) 							if(state==ST_GET_TOKEN) {
    0113 01C7      MOVW	R24,R14
    0114 3084      CPI	R24,4
    0115 EFE0      LDI	R30,0xF0
    0116 079E      CPC	R25,R30
    0117 F479      BNE	0x0127
(0114) 								if(t==TOKEN) {
    0118 304E      CPI	R20,0xE
    0119 F449      BNE	0x0123
(0115) 									state = ST_GET_DATA;
    011A E085      LDI	R24,5
    011B EF90      LDI	R25,0xF0
    011C 017C      MOVW	R14,R24
(0116) 									checksum ^= t;
    011D 26C4      EOR	R12,R20
(0117) 									i=0;
    011E 2400      CLR	R0
    011F 2411      CLR	R1
    0120 821A      STD	Y+2,R1
    0121 8209      STD	Y+1,R0
(0118) 									}
    0122 C02B      RJMP	0x014E
(0119) 								else {
(0120) 									state = ST_START;
    0123 E080      LDI	R24,0
    0124 EF90      LDI	R25,0xF0
    0125 017C      MOVW	R14,R24
(0121) 									}
(0122) 								}
    0126 C027      RJMP	0x014E
(0123) 							else {
(0124) 								if(state==ST_GET_DATA) {
    0127 01C7      MOVW	R24,R14
    0128 3085      CPI	R24,5
    0129 EFE0      LDI	R30,0xF0
    012A 079E      CPC	R25,R30
    012B F4B1      BNE	0x0142
(0125) 									msg_buffer[i++] = t;
    012C 8029      LDD	R2,Y+1
    012D 803A      LDD	R3,Y+2
    012E 01C1      MOVW	R24,R2
    012F 9601      ADIW	R24,1
    0130 839A      STD	Y+2,R25
    0131 8389      STD	Y+1,R24
    0132 E184      LDI	R24,0x14
    0133 E091      LDI	R25,1
    0134 01F1      MOVW	R30,R2
    0135 0FE8      ADD	R30,R24
    0136 1FF9      ADC	R31,R25
    0137 8340      STD	Z+0,R20
(0126) 									checksum ^= t;
    0138 26C4      EOR	R12,R20
(0127) 									if(i==msg_size) {
    0139 8009      LDD	R0,Y+1
    013A 801A      LDD	R1,Y+2
    013B 1606      CP	R0,R22
    013C 0617      CPC	R1,R23
    013D F481      BNE	0x014E
(0128) 										state = ST_GET_CHECK;
    013E E086      LDI	R24,6
    013F EF90      LDI	R25,0xF0
    0140 017C      MOVW	R14,R24
(0129) 										}
(0130) 									}
    0141 C00C      RJMP	0x014E
(0131) 								else {
(0132) 									if(state==ST_GET_CHECK) {
    0142 01C7      MOVW	R24,R14
    0143 3086      CPI	R24,6
    0144 EFE0      LDI	R30,0xF0
    0145 079E      CPC	R25,R30
    0146 F439      BNE	0x014E
(0133) 										if(t==checksum) {
    0147 154C      CP	R20,R12
    0148 F411      BNE	0x014B
(0134) 											process_command(seq_num);
    0149 8108      LDD	R16,Y+0
    014A D022      RCALL	_process_command
(0135) 											}
(0136) 										state = ST_START;
    014B E080      LDI	R24,0
    014C EF90      LDI	R25,0xF0
    014D 017C      MOVW	R14,R24
    014E CF85      RJMP	0x00D4
    014F 9623      ADIW	R28,3
    0150 9508      RET
(0137) 										}
(0138) 									}
(0139) 								}
(0140) 							}
(0141) 						}
(0142) 					}
(0143) 				}
(0144) 			}
(0145) 		}
(0146) }
(0147) 
(0148) /**
(0149) 	Returns the value of the selected adc channel
(0150) 
(0151) 	@param n Number of ADC channel
(0152) 
(0153) 	@return  Value of ADC channel
(0154) */
(0155) unsigned char adc_get(char n)
(0156) {
(0157) 	ADMUX&=0xF0;
_adc_get:
  n                    --> R16
    0151 9180007C  LDS	R24,0x7C
    0153 7F80      ANDI	R24,0xF0
    0154 9380007C  STS	0x7C,R24
(0158) 	ADMUX|=n&0x7;
    0156 2F80      MOV	R24,R16
    0157 7087      ANDI	R24,7
    0158 9020007C  LDS	R2,0x7C
    015A 2A28      OR	R2,R24
    015B 9220007C  STS	0x7C,R2
(0159) 
(0160) 	while(ADCSRA&0x40);
    015D 9020007A  LDS	R2,0x7A
    015F FC26      SBRC	R2,6
    0160 CFFC      RJMP	0x015D
(0161) 	ADCSRA|=(1<<ADSC);
    0161 9180007A  LDS	R24,0x7A
    0163 6480      ORI	R24,0x40
    0164 9380007A  STS	0x7A,R24
(0162) 	while(ADCSRA&0x40);
    0166 9020007A  LDS	R2,0x7A
    0168 FC26      SBRC	R2,6
    0169 CFFC      RJMP	0x0166
(0163) 
(0164) 	return ADCH;
    016A 91000079  LDS	R16,0x79
    016C 9508      RET
_process_command:
  mode                 --> R14
  block_size           --> R10
  start_address        --> Y+6
  polling_address      --> Y+2
  tmp                  --> Y+13
  cmd                  --> Y+12
  num_bytes            --> Y+10
  i                    --> R12
  seq_num              --> Y+24
    016D 931A      ST	R17,-Y
    016E 930A      ST	R16,-Y
    016F D8D4      RCALL	push_gset5
    0170 972E      SBIW	R28,0xE
(0165) }
(0166) 
(0167) /**
(0168) 	Processes a command packet received in main loop and located in the global buffer
(0169) 
(0170) 	@param	seq_num	The sequence number of the command packet
(0171) */
(0172) void process_command(unsigned char seq_num)
(0173) {
(0174) 	unsigned char cmd;
(0175) 	unsigned char tmp=0;
    0171 2400      CLR	R0
    0172 860D      STD	Y+13,R0
(0176) 	unsigned char mode;
(0177) 	unsigned int block_size;
(0178) 	unsigned int i;
(0179) 	unsigned int num_bytes=0;
    0173 2411      CLR	R1
    0174 861B      STD	Y+11,R1
    0175 860A      STD	Y+10,R0
(0180) 	unsigned long polling_address=0;
    0176 E040      LDI	R20,0
    0177 E050      LDI	R21,0
    0178 E060      LDI	R22,0
    0179 E070      LDI	R23,0
    017A 01FE      MOVW	R30,R28
    017B 8342      STD	Z+2,R20
    017C 8353      STD	Z+3,R21
    017D 8364      STD	Z+4,R22
    017E 8375      STD	Z+5,R23
(0181) 	unsigned long start_address = address;
    017F 9040010E  LDS	R4,address+2
    0181 9050010F  LDS	R5,address+3
    0183 9020010C  LDS	R2,address
    0185 9030010D  LDS	R3,address+1
    0187 01FE      MOVW	R30,R28
    0188 8226      STD	Z+6,R2
    0189 8237      STD	Z+7,R3
    018A 8640      STD	Z+8,R4
    018B 8651      STD	Z+9,R5
(0182) 
(0183) 	cmd = msg_buffer[0];
    018C 90200114  LDS	R2,msg_buffer
    018E 862C      STD	Y+12,R2
(0184) 
(0185) 	//////////////////////////////////////
(0186) 	//CMD_SIGN_ON
(0187) 	//////////////////////////////////////
(0188) 	if(cmd==CMD_SIGN_ON)
    018F 2D82      MOV	R24,R2
    0190 3081      CPI	R24,1
    0191 F4A9      BNE	0x01A7
(0189) 	{
(0190) 		num_bytes = 11;
    0192 E08B      LDI	R24,0xB
    0193 E090      LDI	R25,0
    0194 879B      STD	Y+11,R25
    0195 878A      STD	Y+10,R24
(0191) 		msg_buffer[0] = CMD_SIGN_ON;
    0196 E081      LDI	R24,1
    0197 93800114  STS	msg_buffer,R24
(0192) 		msg_buffer[1] = STATUS_CMD_OK;
    0199 2422      CLR	R2
    019A 92200115  STS	msg_buffer+1,R2
(0193) 		msg_buffer[2] = 8;
    019C E088      LDI	R24,0x8
    019D 93800116  STS	msg_buffer+2,R24
(0194) 		memcpy(msg_buffer+3,"AVRISP_2",8);
    019F 8399      STD	Y+1,R25
    01A0 8388      STD	Y+0,R24
    01A1 E021      LDI	R18,1
    01A2 E031      LDI	R19,1
    01A3 E107      LDI	R16,0x17
    01A4 E011      LDI	R17,1
    01A5 D85B      RCALL	_memcpy
(0195) 	}
    01A6 C71E      RJMP	0x08C5
(0196) 	//////////////////////////////////////
(0197) 	//CMD_SET_PARAMETER
(0198) 	//////////////////////////////////////
(0199) 	else if(cmd==CMD_SET_PARAMETER)
    01A7 858C      LDD	R24,Y+12
    01A8 3082      CPI	R24,2
    01A9 F009      BEQ	0x01AB
    01AA C065      RJMP	0x0210
(0200) 	{
(0201) 		switch(msg_buffer[1])
    01AB 90A00115  LDS	R10,msg_buffer+1
    01AD 24BB      CLR	R11
    01AE 01C5      MOVW	R24,R10
    01AF 3988      CPI	R24,0x98
    01B0 E0E0      LDI	R30,0
    01B1 079E      CPC	R25,R30
    01B2 F089      BEQ	0x01C4
    01B3 3988      CPI	R24,0x98
    01B4 E0E0      LDI	R30,0
    01B5 079E      CPC	R25,R30
    01B6 F40C      BGE	0x01B8
    01B7 C04E      RJMP	0x0206
    01B8 01C5      MOVW	R24,R10
    01B9 398E      CPI	R24,0x9E
    01BA E0E0      LDI	R30,0
    01BB 079E      CPC	R25,R30
    01BC F409      BNE	0x01BE
    01BD C03F      RJMP	0x01FD
    01BE 398F      CPI	R24,0x9F
    01BF E0E0      LDI	R30,0
    01C0 079E      CPC	R25,R30
    01C1 F409      BNE	0x01C3
    01C2 C03F      RJMP	0x0202
    01C3 C042      RJMP	0x0206
(0202) 		{
(0203) 			case PARAM_SCK_DURATION:
(0204) 				clock_speed=SPI_SPEED_2MHZ;
    01C4 E081      LDI	R24,1
    01C5 93800113  STS	clock_speed,R24
(0205) 				if((msg_buffer[2]) >= 1  ) clock_speed=SPI_SPEED_2MHZ;
    01C7 91800116  LDS	R24,msg_buffer+2
    01C9 3081      CPI	R24,1
    01CA F018      BCS	0x01CE
    01CB E081      LDI	R24,1
    01CC 93800113  STS	clock_speed,R24
(0206) 				if((msg_buffer[2]) >= 2  ) clock_speed=SPI_SPEED_1MHZ;
    01CE 91800116  LDS	R24,msg_buffer+2
    01D0 3082      CPI	R24,2
    01D1 F018      BCS	0x01D5
    01D2 E082      LDI	R24,2
    01D3 93800113  STS	clock_speed,R24
(0207) 				if((msg_buffer[2]) >= 4  ) clock_speed=SPI_SPEED_500KHZ;
    01D5 91800116  LDS	R24,msg_buffer+2
    01D7 3084      CPI	R24,4
    01D8 F018      BCS	0x01DC
    01D9 E083      LDI	R24,3

⌨️ 快捷键说明

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