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

📄 stk500i.lst

📁 avr单片机atmage16驱动小灯的一些例程 并且包括一些收发数据的程序利用usb口
💻 LST
📖 第 1 页 / 共 5 页
字号:
    019F 2D02      MOV	R16,R2
    01A0 D73A      RCALL	_spi_set_speed
(0212) 				break;
    01A1 C009      RJMP	0x01AB
(0213) 			case PARAM_RESET_POLARITY:
(0214) 				reset_polarity = msg_buffer[2];
    01A2 90200076  LDS	R2,msg_buffer+2
    01A4 92200072  STS	reset_polarity,R2
(0215) 				break;
    01A6 C004      RJMP	0x01AB
(0216) 			case PARAM_CONTROLLER_INIT:
(0217) 				param_controller_init = msg_buffer[2];
    01A7 90200076  LDS	R2,msg_buffer+2
    01A9 92200071  STS	param_controller_init,R2
(0218) 				break;
(0219) 		}
(0220) 		
(0221) 		num_bytes = 2;
    01AB E082      LDI	R24,2
    01AC E090      LDI	R25,0
    01AD 879B      STD	Y+11,R25
    01AE 878A      STD	Y+10,R24
(0222) 		msg_buffer[0] = CMD_SET_PARAMETER;
    01AF 93800074  STS	msg_buffer,R24
(0223) 		msg_buffer[1] = STATUS_CMD_OK;
    01B1 2422      CLR	R2
    01B2 92200075  STS	msg_buffer+1,R2
(0224) 	}
    01B4 C6B5      RJMP	0x086A
(0225) 	//////////////////////////////////////
(0226) 	//CMD_GET_PARAMETER
(0227) 	//////////////////////////////////////
(0228) 	else if(cmd==CMD_GET_PARAMETER)
    01B5 858C      LDD	R24,Y+12
    01B6 3083      CPI	R24,3
    01B7 F009      BEQ	0x01B9
    01B8 C058      RJMP	0x0211
(0229) 	{
(0230) 		switch(msg_buffer[1])
    01B9 90A00075  LDS	R10,msg_buffer+1
    01BB 24BB      CLR	R11
    01BC 01C5      MOVW	R24,R10
    01BD 3980      CPI	R24,0x90
    01BE E0E0      LDI	R30,0
    01BF 079E      CPC	R25,R30
    01C0 F179      BEQ	0x01F0
    01C1 3981      CPI	R24,0x91
    01C2 E0E0      LDI	R30,0
    01C3 079E      CPC	R25,R30
    01C4 F171      BEQ	0x01F3
    01C5 3982      CPI	R24,0x92
    01C6 E0E0      LDI	R30,0
    01C7 079E      CPC	R25,R30
    01C8 F169      BEQ	0x01F6
    01C9 E982      LDI	R24,0x92
    01CA 158A      CP	R24,R10
    01CB 059B      CPC	R25,R11
    01CC F054      BLT	0x01D7
    01CD 01C5      MOVW	R24,R10
    01CE 3880      CPI	R24,0x80
    01CF E0E0      LDI	R30,0
    01D0 079E      CPC	R25,R30
    01D1 F0C1      BEQ	0x01EA
    01D2 3881      CPI	R24,0x81
    01D3 E0E0      LDI	R30,0
    01D4 079E      CPC	R25,R30
    01D5 F0B9      BEQ	0x01ED
    01D6 C02D      RJMP	0x0204
    01D7 01C5      MOVW	R24,R10
    01D8 3988      CPI	R24,0x98
    01D9 E0E0      LDI	R30,0
    01DA 079E      CPC	R25,R30
    01DB F0E9      BEQ	0x01F9
    01DC 3988      CPI	R24,0x98
    01DD E0E0      LDI	R30,0
    01DE 079E      CPC	R25,R30
    01DF F124      BLT	0x0204
    01E0 01C5      MOVW	R24,R10
    01E1 398E      CPI	R24,0x9E
    01E2 E0E0      LDI	R30,0
    01E3 079E      CPC	R25,R30
    01E4 F0C1      BEQ	0x01FD
    01E5 398F      CPI	R24,0x9F
    01E6 E0E0      LDI	R30,0
    01E7 079E      CPC	R25,R30
    01E8 F0C1      BEQ	0x0201
    01E9 C01A      RJMP	0x0204
(0231) 		{
(0232) 			case PARAM_BUILD_NUMBER_LOW:
(0233) 				tmp = CONFIG_PARAM_BUILD_NUMBER_LOW;
    01EA 2400      CLR	R0
    01EB 860D      STD	Y+13,R0
(0234) 				break;
    01EC C017      RJMP	0x0204
(0235) 			case PARAM_BUILD_NUMBER_HIGH:
(0236) 				tmp = CONFIG_PARAM_BUILD_NUMBER_HIGH;
    01ED 2400      CLR	R0
    01EE 860D      STD	Y+13,R0
(0237) 				break;
    01EF C014      RJMP	0x0204
(0238) 			case PARAM_HW_VER:
(0239) 				tmp = CONFIG_PARAM_HW_VER;
    01F0 E08F      LDI	R24,0xF
    01F1 878D      STD	Y+13,R24
(0240) 				break;
    01F2 C011      RJMP	0x0204
(0241) 			case PARAM_SW_MAJOR:
(0242) 				tmp = CONFIG_PARAM_SW_MAJOR;
    01F3 E082      LDI	R24,2
    01F4 878D      STD	Y+13,R24
(0243) 				break;
    01F5 C00E      RJMP	0x0204
(0244) 			case PARAM_SW_MINOR:
(0245) 				tmp = CONFIG_PARAM_SW_MINOR;
    01F6 E08A      LDI	R24,0xA
    01F7 878D      STD	Y+13,R24
(0246) 				break;
    01F8 C00B      RJMP	0x0204
(0247) 			case PARAM_SCK_DURATION:
(0248) 				tmp = clock_speed;
    01F9 90200073  LDS	R2,clock_speed
    01FB 862D      STD	Y+13,R2
(0249) 				break;
    01FC C007      RJMP	0x0204
(0250) 			case PARAM_RESET_POLARITY:
(0251) 				tmp = reset_polarity;
    01FD 90200072  LDS	R2,reset_polarity
    01FF 862D      STD	Y+13,R2
(0252) 				break;
    0200 C003      RJMP	0x0204
(0253) 			case PARAM_CONTROLLER_INIT:
(0254) 				tmp = param_controller_init;
    0201 90200071  LDS	R2,param_controller_init
    0203 862D      STD	Y+13,R2
(0255) 				break;
(0256) 		}
(0257) 		
(0258) 		num_bytes = 3;
    0204 E083      LDI	R24,3
    0205 E090      LDI	R25,0
    0206 879B      STD	Y+11,R25
    0207 878A      STD	Y+10,R24
(0259) 		msg_buffer[0] = CMD_GET_PARAMETER;
    0208 93800074  STS	msg_buffer,R24
(0260) 		msg_buffer[1] = STATUS_CMD_OK;
    020A 2422      CLR	R2
    020B 92200075  STS	msg_buffer+1,R2
(0261) 		msg_buffer[2] = tmp;
    020D 840D      LDD	R0,Y+13
    020E 92000076  STS	msg_buffer+2,R0
(0262) 	}
    0210 C659      RJMP	0x086A
(0263) 	//////////////////////////////////////
(0264) 	//CMD_LOAD_ADDRESS
(0265) 	//////////////////////////////////////
(0266) 	else if(cmd==CMD_LOAD_ADDRESS)
    0211 858C      LDD	R24,Y+12
    0212 3086      CPI	R24,6
    0213 F009      BEQ	0x0215
    0214 C06C      RJMP	0x0281
(0267) 	{
(0268) 		address =  ((unsigned long)msg_buffer[1])<<24;
    0215 E188      LDI	R24,0x18
    0216 E090      LDI	R25,0
    0217 90200075  LDS	R2,msg_buffer+1
    0219 2433      CLR	R3
    021A 2444      CLR	R4
    021B 2455      CLR	R5
    021C 938A      ST	R24,-Y
    021D 0181      MOVW	R16,R2
    021E 0192      MOVW	R18,R4
    021F D7D9      RCALL	lsl32
    0220 9310006D  STS	address+1,R17
    0222 9300006C  STS	address,R16
    0224 9330006F  STS	address+3,R19
    0226 9320006E  STS	address+2,R18
(0269) 		address |= ((unsigned long)msg_buffer[2])<<16;
    0228 90200076  LDS	R2,msg_buffer+2
    022A 2433      CLR	R3
    022B 2444      CLR	R4
    022C 2455      CLR	R5
    022D 0121      MOVW	R4,R2
    022E 2422      CLR	R2
    022F 2433      CLR	R3
    0230 0138      MOVW	R6,R16
    0231 0149      MOVW	R8,R18
    0232 2862      OR	R6,R2
    0233 2873      OR	R7,R3
    0234 2884      OR	R8,R4
    0235 2895      OR	R9,R5
    0236 9270006D  STS	address+1,R7
    0238 9260006C  STS	address,R6
    023A 9290006F  STS	address+3,R9
    023C 9280006E  STS	address+2,R8
(0270) 		address |= ((unsigned long)msg_buffer[3])<<8;
    023E E088      LDI	R24,0x8
    023F E090      LDI	R25,0
    0240 90200077  LDS	R2,msg_buffer+3
    0242 2433      CLR	R3
    0243 2444      CLR	R4
    0244 2455      CLR	R5
    0245 938A      ST	R24,-Y
    0246 0181      MOVW	R16,R2
    0247 0192      MOVW	R18,R4
    0248 D7B0      RCALL	lsl32
    0249 9040006E  LDS	R4,address+2
    024B 9050006F  LDS	R5,address+3
    024D 9020006C  LDS	R2,address
    024F 9030006D  LDS	R3,address+1
    0251 2A20      OR	R2,R16
    0252 2A31      OR	R3,R17
    0253 2A42      OR	R4,R18
    0254 2A53      OR	R5,R19
    0255 9230006D  STS	address+1,R3
    0257 9220006C  STS	address,R2
    0259 9250006F  STS	address+3,R5
    025B 9240006E  STS	address+2,R4
(0271) 		address |= ((unsigned long)msg_buffer[4]);
    025D 90200078  LDS	R2,0x78
    025F 2433      CLR	R3
    0260 2444      CLR	R4
    0261 2455      CLR	R5
    0262 9080006E  LDS	R8,address+2
    0264 9090006F  LDS	R9,address+3
    0266 9060006C  LDS	R6,address
    0268 9070006D  LDS	R7,address+1
    026A 2862      OR	R6,R2
    026B 2873      OR	R7,R3
    026C 2884      OR	R8,R4
    026D 2895      OR	R9,R5
    026E 9270006D  STS	address+1,R7
    0270 9260006C  STS	address,R6
    0272 9290006F  STS	address+3,R9
    0274 9280006E  STS	address+2,R8
(0272) 				
(0273) 		num_bytes = 2;
    0276 E082      LDI	R24,2
    0277 E090      LDI	R25,0
    0278 879B      STD	Y+11,R25
    0279 878A      STD	Y+10,R24
(0274) 		msg_buffer[0] = CMD_LOAD_ADDRESS;
    027A E086      LDI	R24,6
    027B 93800074  STS	msg_buffer,R24
(0275) 		msg_buffer[1] = STATUS_CMD_OK;
    027D 2422      CLR	R2
    027E 92200075  STS	msg_buffer+1,R2
(0276) 	}
    0280 C5E9      RJMP	0x086A
(0277) 	//////////////////////////////////////
(0278) 	//CMD_ENTER_PROGMODE_ISP
(0279) 	//////////////////////////////////////
(0280) 	else if(cmd==CMD_ENTER_PROGMODE_ISP)
    0281 858C      LDD	R24,Y+12
    0282 3180      CPI	R24,0x10
    0283 F009      BEQ	0x0285
    0284 C070      RJMP	0x02F5
(0281) 	{
(0282) 		//msg_buffer[1] //timeout		//Command time-out (in ms)
(0283) 		//msg_buffer[2] //stabDelay		//Delay (in ms) used for pin stabilization
(0284) 		//msg_buffer[3] //cmdexeDelay	//Delay (in ms) in connection with the EnterProgMode command execution
(0285) 		//msg_buffer[4] //synchLoops	//Number of synchronization loops
(0286) 		//msg_buffer[5] //byteDelay		//Delay (in ms) between each byte in the EnterProgMode command.
(0287) 		//msg_buffer[6] //pollValue		//Poll value: 0x53 for AVR, 0x69 for AT89xx
(0288) 		//msg_buffer[7] //pollIndex		//Start address, received byte: 0 = no polling, 3 = AVR, 4 = AT89xx
(0289) 		//msg_buffer[8] //cmd1			//Command Byte # 1 to be transmitted
(0290) 		//msg_buffer[9] //cmd2			//Command Byte # 2 to be transmitted
(0291) 		//msg_buffer[10]//cmd3			//Command Byte # 3 to be transmitted
(0292) 		//msg_buffer[11]//cmd4			//Command Byte # 4 to be transmitted
(0293) 		
(0294) 		prgmode=1;
    0285 E081      LDI	R24,1
    0286 93800070  STS	prgmode,R24
(0295) 
(0296) 		spi_enable();
    0288 D613      RCALL	_spi_enable
(0297) 												
(0298) 		wait_ms(msg_buffer[2]);
    0289 91000076  LDS	R16,msg_buffer+2
    028B 2711      CLR	R17
    028C DDCF      RCALL	_wait_ms
(0299) 		
(0300) 		LED_GN_ON;
    028D 9AC0      SBI	0x18,0
(0301) 		LED_RT_ON;
    028E 9AC1      SBI	0x18,1
(0302) 		
(0303) 		//Try to get connection with the target chip
(0304) 		for(i=0;i<msg_buffer[4];i++)
    028F 24CC      CLR	R12
    0290 24DD      CLR	R13
    0291 C048      RJMP	0x02DA
(0305) 		{
(0306) 			//spi_transfer_16(0xAC53);
(0307) 			spi_transfer_8(msg_buffer[8]);
    0292 9100007C  LDS	R16,0x7C
    0294 D678      RCALL	_spi_transfer_8
(0308) 			wait_ms(msg_buffer[5]);
    0295 91000079  LDS	R16,0x79
    0297 2711      CLR	R17
    0298 DDC3      RCALL	_wait_ms
(0309) 			spi_transfer_8(msg_buffer[9]);
    0299 9100007D  LDS	R16,0x7D
    029B D671      RCALL	_spi_transfer_8
(0310) 			wait_ms(msg_buffer[5]);
    029C 91000079  LDS	R16,0x79
    029E 2711      CLR	R17
    029F DDBC      RCALL	_wait_ms
(0311) 			
(0312) 			if(msg_buffer[7]==3)
    02A0 9180007B  LDS	R24,0x7B
    02A2 3083      CPI	R24,3
    02A3 F481      BNE	0x02B4
(0313) 			{
(0314) 				tmp=spi_transfer_8(msg_buffer[10]);
    02A4 9100007E  LDS	R16,0x7E
    02A6 D666      RCALL	_spi_transfer_8
    02A7 870D      STD	Y+13,R16
(0315) 				wait_ms(msg_buffer[5]);
    02A8 91000079  LDS	R16,0x79
    02AA 2711      CLR	R17
    02AB DDB0      RCALL	_wait_ms
(0316) 				spi_transfer_8(msg_buffer[11]);
    02AC 9100007F  LDS	R16,0x7F
    02AE D65E      RCALL	_spi_transfer_8
(0317) 				wait_ms(msg_buffer[5]);
    02AF 91000079  LDS	R16,0x79
    02B1 2711      CLR	R17
    02B2 DDA9      RCALL	_wait_ms
(0318) 			}
    02B3 C00F      RJMP	0x02C3
(0319) 			else
(0320) 			{
(0321) 				spi_transfer_8(msg_buffer[10]);
    02B4 9100007E  LDS	R16,0x7E
    02B6 D656      RCALL	_spi_transfer_8
(0322) 				wait_ms(msg_buffer[5]);				
    02B7 91000079  LDS	R16,0x79
    02B9 2711      CLR	R17
    02BA DDA1      RCALL	_wait_ms
(0323) 				tmp=spi_transfer_8(msg_buffer[11]);
    02BB 9100007F  LDS	R16,0x7F
    02BD D64F      RCALL	_spi_transfer_8
    02BE 870D      STD	Y+13,R16
(0324) 				wait_ms(msg_buffer[5]);
    02BF 91000079  LDS	R16,0x79
    02C1 2711      CLR	R17
    02C2 DD99      RCALL	_wait_ms
(0325) 			}				
(0326) 					
(0327) 			if((tmp==msg_buffer[6])||(msg_buffer[7]==0))
    02C3 9020007A  LDS	R2,0x7A
    02C5 840D      LDD	R0,Y+13
    02C6 1402      CP	R0,R2
    02C7 F021      BEQ	0x02CC
    02C8 9020007B  LDS	R2,0x7B
    02CA 2022      TST	R2
    02CB F451      BNE	0x02D6
(0328) 			{
(0329) 				LED_GN_OFF;
    02CC EF8E      LDI	R24,0xFE
    02CD EF9F      LDI	R25,0xFF
    02CE B228      IN	R2,0x18
    02CF 2228      AND	R2,R24
    02D0 BA28      OUT	0x18,R2
(0330) 				LED_RT_ON;
    02D1 9AC1      SBI	0x18,1
(0331) 				i=0xFF;
    02D2 EF8F      LDI	R24,0xFF
    02D3 E090      LDI	R25,0
    02D4 016C      MOVW	R12,R24
(0332) 				break;
    02D5 C00B      RJMP	0x02E1
(0333) 			}
(0334) 		
(0335) 			spi_clock_pulse();
    02D6 D626      RCALL	_spi_clock_pulse
    02D7 01C6      MOVW	R24,R12
    02D8 9601      ADIW	R24,1
    02D9 016C      MOVW	R12,R24
    02DA 90200078  LDS	R2,0x78
    02DC 2433      CLR	R3
    02DD 14C2      CP	R12,R2
    02DE 04D3      CPC	R13,R3
    02DF F408      BCC	0x02E1
    02E0 CFB1      RJMP	0x0292
(0336) 		}
(0337) 		
(0338) 		num_bytes = 2;
    02E1 E082      LDI	R24,2
    02E2 E090      LDI	R25,0
    02E3 879B      STD	Y+11,R25
    02E4 878A      STD	Y+10,R24
(0339) 		msg_buffer[0] = CMD_ENTER_PROGMODE_ISP;
    02E5 E180      LDI	R24,0x10
    02E6 93800074  STS	msg_buffer,R24
(0340) 			
(0341) 		if(i==0xFF)
    02E8 01C6      MOVW	R24,R12
    02E9 3F8F      CPI	R24,0xFF
    02EA E0E0      LDI	R30,0
    02EB 079E      CPC	R25,R30
    02EC F421      BNE	0x02F1
(0342) 		{			
(0343) 			msg_buffer[1] = STATUS_CMD_OK;			
    02ED 2422      CLR	R2
    02EE 92200075  STS	msg_buffer+1,R2
(0344) 		}
    02F0 C579      RJMP	0x086A
(0345) 		else
(0346) 		{			
(0347) 			msg_buffer[1] = STATUS_CMD_FAILED;
    02F1 EC80      LDI	R24,0xC0
    02F2 93800075  STS	msg_buffer+1,R24
(0348) 		}		
(0349) 	}
    02F4 C575      RJMP	0x086A
(0350) 	//////////////////////////////////////
(0351) 	//CMD_LEAVE_PROGMODE_ISP
(0352) 	//////////////////////////////////////
(0353) 	else if(cmd==CMD_LEAVE_PROGMODE_ISP)
    02F5 858C      LDD	R24,Y+12
    02F6 3181      CPI	R24,0x11
    02F7 F4A9      BNE	0x030D
(0354) 	{

⌨️ 快捷键说明

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