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

📄 main.lst

📁 前两年在一家模型公司开发的
💻 LST
📖 第 1 页 / 共 4 页
字号:
    0136 9040010B  LDS	R4,Timer
    0138 9050010C  LDS	R5,Timer+1
    013A 1442      CP	R4,R2
    013B 0453      CPC	R5,R3
    013C F420      BCC	0x0141
    013D 9230010C  STS	Timer+1,R3
    013F 9220010B  STS	Timer,R2
(0183) 		
(0184) 		if(Timer>(middle+50))		// 前进 1550us
    0141 91800107  LDS	R24,middle
    0143 91900108  LDS	R25,middle+1
    0145 96C2      ADIW	R24,0x32
    0146 9020010B  LDS	R2,Timer
    0148 9030010C  LDS	R3,Timer+1
    014A 1582      CP	R24,R2
    014B 0593      CPC	R25,R3
    014C F590      BCC	0x017F
(0185) 		{
(0186) 			if(power>3 || heat>3)
    014D E083      LDI	R24,3
    014E 90200103  LDS	R2,power
    0150 1582      CP	R24,R2
    0151 F020      BCS	0x0156
    0152 90200102  LDS	R2,heat
    0154 1582      CP	R24,R2
    0155 F430      BCC	0x015C
(0187) 			{
(0188) 				PWM --;
    0156 9180010D  LDS	R24,PWM
    0158 5081      SUBI	R24,1
    0159 9380010D  STS	PWM,R24
(0189) 			}
    015B C01A      RJMP	0x0176
(0190) 			else 
(0191) 			{	
(0192) 				PWM = ((Timer-middle)*10)/PE1;	// 计算占空比
    015C 90200107  LDS	R2,middle
    015E 90300108  LDS	R3,middle+1
    0160 9120010B  LDS	R18,Timer
    0162 9130010C  LDS	R19,Timer+1
    0164 1922      SUB	R18,R2
    0165 0933      SBC	R19,R3
    0166 E00A      LDI	R16,0xA
    0167 E010      LDI	R17,0
    0168 D39D      RCALL	empy16s
    0169 91200112  LDS	R18,PE1
    016B 91300113  LDS	R19,PE1+1
    016D D37E      RCALL	div16u
    016E 9300010D  STS	PWM,R16
(0193) 				if(PWM>210) PWM = 255;		
    0170 ED82      LDI	R24,0xD2
    0171 1780      CP	R24,R16
    0172 F418      BCC	0x0176
    0173 EF8F      LDI	R24,0xFF
    0174 9380010D  STS	PWM,R24
(0194) 				
(0195) 			}
(0196) 			Pwm_set(PWM,1);		// 设置PWM占空比
    0176 E021      LDI	R18,1
    0177 9100010D  LDS	R16,PWM
    0179 D34B      RCALL	_Pwm_set
(0197) 			mode = 1;
    017A E081      LDI	R24,1
    017B 9380010F  STS	mode,R24
(0198) 			SET_LED;
    017D 9A5C      SBI	0x0B,4
(0199) 		}
    017E C060      RJMP	0x01DF
(0200) 		else if(Timer<(middle-50)) 	
    017F 91800107  LDS	R24,middle
    0181 91900108  LDS	R25,middle+1
    0183 97C2      SBIW	R24,0x32
    0184 9020010B  LDS	R2,Timer
    0186 9030010C  LDS	R3,Timer+1
    0188 1628      CP	R2,R24
    0189 0639      CPC	R3,R25
    018A F008      BCS	0x018C
    018B C04F      RJMP	0x01DB
(0201) 		{
(0202) 			if(!mode && REV)	// 后退
    018C 9020010F  LDS	R2,mode
    018E 2022      TST	R2
    018F F5B1      BNE	0x01C6
    0190 90200104  LDS	R2,REV
    0192 2022      TST	R2
    0193 F191      BEQ	0x01C6
(0203) 			{
(0204) 				if(power>3 || heat>3)
    0194 E083      LDI	R24,3
    0195 90200103  LDS	R2,power
    0197 1582      CP	R24,R2
    0198 F020      BCS	0x019D
    0199 90200102  LDS	R2,heat
    019B 1582      CP	R24,R2
    019C F430      BCC	0x01A3
(0205) 				{
(0206) 					PWM --;
    019D 9180010D  LDS	R24,PWM
    019F 5081      SUBI	R24,1
    01A0 9380010D  STS	PWM,R24
(0207) 				}	
    01A2 C01A      RJMP	0x01BD
(0208) 				else 
(0209) 				{	
(0210) 					PWM = ((middle-Timer)*10)/PE2;
    01A3 9020010B  LDS	R2,Timer
    01A5 9030010C  LDS	R3,Timer+1
    01A7 91200107  LDS	R18,middle
    01A9 91300108  LDS	R19,middle+1
    01AB 1922      SUB	R18,R2
    01AC 0933      SBC	R19,R3
    01AD E00A      LDI	R16,0xA
    01AE E010      LDI	R17,0
    01AF D356      RCALL	empy16s
    01B0 91200110  LDS	R18,PE2
    01B2 91300111  LDS	R19,PE2+1
    01B4 D337      RCALL	div16u
    01B5 9300010D  STS	PWM,R16
(0211) 					if(PWM>210) PWM = 255;
    01B7 ED82      LDI	R24,0xD2
    01B8 1780      CP	R24,R16
    01B9 F418      BCC	0x01BD
    01BA EF8F      LDI	R24,0xFF
    01BB 9380010D  STS	PWM,R24
(0212) 				}
(0213) 				Pwm_set(PWM,2);
    01BD E022      LDI	R18,2
    01BE 9100010D  LDS	R16,PWM
    01C0 D304      RCALL	_Pwm_set
(0214) 				SET_LED;
    01C1 9A5C      SBI	0x0B,4
(0215) 				delay(5);
    01C2 E005      LDI	R16,5
    01C3 E010      LDI	R17,0
    01C4 DEB8      RCALL	_delay
(0216) 			}
    01C5 C019      RJMP	0x01DF
(0217) 			else 
(0218) 			{
(0219) 				Pwm_set(255,3);	// 刹车
    01C6 E023      LDI	R18,3
    01C7 EF0F      LDI	R16,0xFF
    01C8 D2FC      RCALL	_Pwm_set
    01C9 C001      RJMP	0x01CB
(0220) 				while((Timer+50)<=middle)
(0221) 				{
(0222) 					LED_set();
    01CA DED1      RCALL	_LED_set
    01CB 90200107  LDS	R2,middle
    01CD 90300108  LDS	R3,middle+1
    01CF 9180010B  LDS	R24,Timer
    01D1 9190010C  LDS	R25,Timer+1
    01D3 96C2      ADIW	R24,0x32
    01D4 1628      CP	R2,R24
    01D5 0639      CPC	R3,R25
    01D6 F798      BCC	0x01CA
(0223) 				}
(0224) 				mode = 0;
    01D7 2422      CLR	R2
    01D8 9220010F  STS	mode,R2
(0225) 			}
(0226) 		}
    01DA C004      RJMP	0x01DF
(0227) 		else 
(0228) 		{
(0229) 			Pwm_set(0,0);
    01DB 2722      CLR	R18
    01DC 2700      CLR	R16
    01DD D2E7      RCALL	_Pwm_set
(0230) 			CLR_LED;
    01DE 985C      CBI	0x0B,4
(0231) 		}
(0232) 	}
(0233) 	egis();
    01DF DEC5      RCALL	_egis
    01E0 9508      RET
_key:
  k                    --> R20
  i                    --> R22
    01E1 D340      RCALL	push_gset2
(0234) }
(0235) 
(0236) 
(0237) 
(0238) 
(0239) uchar key(void)
(0240) {
(0241) 	uchar i,k=0;
    01E2 2744      CLR	R20
(0242) 	
(0243) 	for(i=0;i<5;i++)
    01E3 2766      CLR	R22
    01E4 C009      RJMP	0x01EE
(0244) 	{
(0245) 		if(PINB & 0x80) k = 0;
    01E5 9B1F      SBIS	0x03,7
    01E6 C002      RJMP	0x01E9
    01E7 2744      CLR	R20
    01E8 C001      RJMP	0x01EA
(0246) 		else k ++;
    01E9 9543      INC	R20
(0247) 		delay(3);
    01EA E003      LDI	R16,3
    01EB E010      LDI	R17,0
    01EC DE90      RCALL	_delay
    01ED 9563      INC	R22
    01EE 3065      CPI	R22,5
    01EF F3A8      BCS	0x01E5
(0248) 	}
(0249) 
(0250) 	return k;
    01F0 2F04      MOV	R16,R20
    01F1 D324      RCALL	pop_gset2
    01F2 9508      RET
(0251) }
(0252) 
(0253) /*---------------------------------------------------------------
(0254)    			
(0255) ----------------------------------------------------------------*/
(0256) 
(0257) uint compute(void)
(0258) {
(0259) 	uchar 	i;
(0260) 	uint 	temp = 0;
_compute:
  temp                 --> R16
  i                    --> R18
    01F3 2700      CLR	R16
    01F4 2711      CLR	R17
(0261) 	
(0262) 	for(i=0;i<8;i++)
    01F5 2722      CLR	R18
    01F6 C013      RJMP	0x020A
(0263) 	{	
(0264) 		while(!rxd_flag);
    01F7 9020010E  LDS	R2,rxd_flag
    01F9 2022      TST	R2
    01FA F3E1      BEQ	0x01F7
(0265) 		temp += Timer;
    01FB 9020010B  LDS	R2,Timer
    01FD 9030010C  LDS	R3,Timer+1
    01FF 0D02      ADD	R16,R2
    0200 1D13      ADC	R17,R3
(0266) 		rxd_flag  = 0;
    0201 2422      CLR	R2
    0202 9220010E  STS	rxd_flag,R2
(0267) 		Timer= 0;
    0204 2433      CLR	R3
    0205 9230010C  STS	Timer+1,R3
    0207 9220010B  STS	Timer,R2
    0209 9523      INC	R18
    020A 3028      CPI	R18,0x8
    020B F358      BCS	0x01F7
(0268) 	}
(0269) 	temp = (temp>>3);
    020C 0118      MOVW	R2,R16
    020D 9436      LSR	R3
    020E 9427      ROR	R2
    020F 9436      LSR	R3
    0210 9427      ROR	R2
    0211 9436      LSR	R3
    0212 9427      ROR	R2
    0213 0181      MOVW	R16,R2
(0270) 	
(0271) 	return temp;
    0214 9508      RET
(0272) }
(0273) 
(0274) 
(0275) void Buz()
(0276) {
(0277) 	Pwm_set(20,1);
_Buz:
    0215 E021      LDI	R18,1
    0216 E104      LDI	R16,0x14
    0217 D2AD      RCALL	_Pwm_set
(0278) 	delay(15);	
    0218 E00F      LDI	R16,0xF
    0219 E010      LDI	R17,0
    021A DE62      RCALL	_delay
(0279) 	Pwm_set(0,0);	
    021B 2722      CLR	R18
    021C 2700      CLR	R16
    021D D2A7      RCALL	_Pwm_set
(0280) 	delay(20);
    021E E104      LDI	R16,0x14
    021F E010      LDI	R17,0
    0220 DE5C      RCALL	_delay
(0281) 	Pwm_set(20,1);	
    0221 E021      LDI	R18,1
    0222 E104      LDI	R16,0x14
    0223 D2A1      RCALL	_Pwm_set
(0282) 	delay(15);	
    0224 E00F      LDI	R16,0xF
    0225 E010      LDI	R17,0
    0226 DE56      RCALL	_delay
(0283) 	Pwm_set(0,0);
    0227 2722      CLR	R18
    0228 2700      CLR	R16
    0229 D29B      RCALL	_Pwm_set
    022A 9508      RET
(0284) }
(0285) 
(0286) void Rev_Setup()
(0287) {
(0288) 	e2rom[6] = EEPROM_read(6);
_Rev_Setup:
    022B E006      LDI	R16,6
    022C D281      RCALL	_EEPROM_read
    022D 9300011A  STS	0x11A,R16
(0289) 	
(0290) 	if(key()>3)	
    022F DFB1      RCALL	_key
    0230 E083      LDI	R24,3
    0231 1780      CP	R24,R16
    0232 F470      BCC	0x0241
(0291) 	{
(0292) 		if(e2rom[6]) e2rom[6]=0;
    0233 9020011A  LDS	R2,0x11A
    0235 2022      TST	R2
    0236 F021      BEQ	0x023B
    0237 2422      CLR	R2
    0238 9220011A  STS	0x11A,R2
    023A C003      RJMP	0x023E
(0293) 		else e2rom[6] =1;
    023B E081      LDI	R24,1
    023C 9380011A  STS	0x11A,R24
(0294) 		Buz();
    023E DFD6      RCALL	_Buz
(0295) 		while(!(PINB&0x80)); // 等待按键松开
    023F 9B1F      SBIS	0x03,7
    0240 CFFE      RJMP	0x023F
(0296) 	}
(0297) 	EEPROM_write(6,e2rom[6]);
    0241 9120011A  LDS	R18,0x11A
    0243 E006      LDI	R16,6
    0244 D262      RCALL	_EEPROM_write
    0245 9508      RET
_Setup:
  i                    --> R20
    0246 D2DD      RCALL	push_gset1
(0298) }
(0299) 
(0300) 
(0301) 
(0302) /*---------------------------------------------------------------
(0303)    			中点设置
(0304) ----------------------------------------------------------------*/
(0305) void Setup()
(0306) {
(0307)  	 uchar i;
(0308) 	 
(0309) 
(0310) 	if(key()>3)		// 设置
    0247 DF99      RCALL	_key
    0248 E083      LDI	R24,3
    0249 1780      CP	R24,R16
    024A F008      BCS	0x024C
    024B C0DF      RJMP	0x032B
(0311) 	{
(0312) loop:	Buz();	
    024C DFC8      RCALL	_Buz
(0313) 		middle = compute();		// 中位设置
    024D DFA5      RCALL	_compute
    024E 93100108  STS	middle+1,R17
    0250 93000107  STS	middle,R16
(0314) 		
(0315) 		delay(50);
    0252 E302      LDI	R16,0x32
    0253 E010      LDI	R17,0
    0254 DE28      RCALL	_delay
    0255 C004      RJMP	0x025A
(0316) 		while(key()<3)
(0317) 		{
(0318) 			LED_set();
    0256 DE45      RCALL	_LED_set
(0319) 			delay(40);
    0257 E208      LDI	R16,0x28
    0258 E010      LDI	R17,0
    0259 DE23      RCALL	_delay
    025A DF86      RCALL	_key
    025B 3003      CPI	R16,3
    025C F3C8      BCS	0x0256
(0320) 		}
(0321) 		Buz();
    025D DFB7      RCALL	_Buz
(0322) 		while(!(PINB&0x80));
    025E 9B1F      SBIS	0x03,7
    025F CFFE      RJMP	0x025E
(0323) 		high = compute();		// 高位设置
    0260 DF92      RCALL	_compute
    0261 9310010A  STS	high+1,R17
    0263 93000109  STS	high,R16
(0324) 		
(0325) 		delay(50);
    0265 E302      LDI	R16,0x32
    0266 E010      LDI	R17,0
    0267 DE15      RCALL	_delay
    0268 C005      RJMP	0x026E
(0326) 		
(0327) 		while(key()<3)
(0328) 		{
(0329) 			LED_set();
    0269 DE32      RCALL	_LED_set
(0330) 			LED_set();
    026A DE31      RCALL	_LED_set
(0331) 			delay(40);
    026B E208      LDI	R16,0x28
    026C E010      LDI	R17,0
    026D DE0F      RCALL	_delay
    026E DF72      RCALL	_key
    026F 3003      CPI	R16,3
    0270 F3C0      BCS	0x0269
(0332) 		}
(0333) 		Buz();
    0271 DFA3      RCALL	_Buz
(0334) 		while(!(PINB&0x80));
    0272 9B1F      SBIS	0x03,7
    0273 CFFE      RJMP	0x0272
(0335) 		low = compute();		// W低位设置
    0274 DF7E      RCALL	_compute
    0275 93100106  STS	low+1,R17
    0277 93000105  STS	low,R16
(0336) 		delay(50);
    0279 E302      LDI	R16,0x32
    027A E010      LDI	R17,0
    027B DE01      RCALL	_delay
(0337) 
(0338) 		// 设置数据正确存盘
(0339) 		if((low>800&&low<1300)&&(middle>1350&&middle<1650)&&(high>1700&&high<2200))
    027C E280      LDI	R24,0x20
    027D E093      LDI	R25,3
    027E 90200105  LDS	R2,low
    0280 90300106  LDS	R3,low+1
    0282 1582      CP	R24,R2
    0283 0593      CPC	R25,R3
    0284 F008      BCS	0x0286
    0285 C09E      RJMP	0x0324
    0286 01C1      MOVW	R24,R2
    0287 3184      CPI	R24,0x14
    0288 E0E5      LDI	R30,5
    0289 079E      CPC	R25,R30
    028A F008      BCS	0x028C
    028B C098      RJMP	0x0324
    028C E486      LDI	R24,0x46
    028D E095      LDI	R25,5
    028E 90200107  LDS	R2,middle
    0290 90300108  LDS	R3,middle+1
    0292 1582      CP	R24,R2

⌨️ 快捷键说明

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