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

📄 main.lst

📁 前两年在一家模型公司开发的
💻 LST
📖 第 1 页 / 共 4 页
字号:
    0293 0593      CPC	R25,R3
    0294 F008      BCS	0x0296
    0295 C08E      RJMP	0x0324
    0296 01C1      MOVW	R24,R2
    0297 3782      CPI	R24,0x72
    0298 E0E6      LDI	R30,6
    0299 079E      CPC	R25,R30
    029A F008      BCS	0x029C
    029B C088      RJMP	0x0324
    029C EA84      LDI	R24,0xA4
    029D E096      LDI	R25,6
    029E 90200109  LDS	R2,high
    02A0 9030010A  LDS	R3,high+1
    02A2 1582      CP	R24,R2
    02A3 0593      CPC	R25,R3
    02A4 F008      BCS	0x02A6
    02A5 C07E      RJMP	0x0324
    02A6 01C1      MOVW	R24,R2
    02A7 3988      CPI	R24,0x98
    02A8 E0E8      LDI	R30,0x8
    02A9 079E      CPC	R25,R30
    02AA F008      BCS	0x02AC
    02AB C078      RJMP	0x0324
(0340) 		{							
(0341) 			PE1 = ((high-middle)*10)/256+2;
    02AC 90200107  LDS	R2,middle
    02AE 90300108  LDS	R3,middle+1
    02B0 019C      MOVW	R18,R24
    02B1 1922      SUB	R18,R2
    02B2 0933      SBC	R19,R3
    02B3 E00A      LDI	R16,0xA
    02B4 E010      LDI	R17,0
    02B5 D250      RCALL	empy16s
    02B6 01C8      MOVW	R24,R16
    02B7 2F89      MOV	R24,R25
    02B8 2799      CLR	R25
    02B9 9602      ADIW	R24,2
    02BA 93900113  STS	PE1+1,R25
    02BC 93800112  STS	PE1,R24
(0342) 			PE2 = ((middle-low )*10)/256+2;
    02BE 90200105  LDS	R2,low
    02C0 90300106  LDS	R3,low+1
    02C2 91200107  LDS	R18,middle
    02C4 91300108  LDS	R19,middle+1
    02C6 1922      SUB	R18,R2
    02C7 0933      SBC	R19,R3
    02C8 E00A      LDI	R16,0xA
    02C9 E010      LDI	R17,0
    02CA D23B      RCALL	empy16s
    02CB 01C8      MOVW	R24,R16
    02CC 2F89      MOV	R24,R25
    02CD 2799      CLR	R25
    02CE 9602      ADIW	R24,2
    02CF 93900111  STS	PE2+1,R25
    02D1 93800110  STS	PE2,R24
(0343) 			
(0344) 			e2rom[0] = low/256;
    02D3 90200105  LDS	R2,low
    02D5 90300106  LDS	R3,low+1
    02D7 2C23      MOV	R2,R3
    02D8 2433      CLR	R3
    02D9 92200114  STS	e2rom,R2
(0345) 			e2rom[1] = low%256;
    02DB 91800105  LDS	R24,low
    02DD 91900106  LDS	R25,low+1
    02DF 7090      ANDI	R25,0
    02E0 93800115  STS	e2rom+1,R24
(0346) 		
(0347) 			e2rom[2] = high/256;
    02E2 90200109  LDS	R2,high
    02E4 9030010A  LDS	R3,high+1
    02E6 2C23      MOV	R2,R3
    02E7 2433      CLR	R3
    02E8 92200116  STS	e2rom+2,R2
(0348) 			e2rom[3] = high%256;
    02EA 91800109  LDS	R24,high
    02EC 9190010A  LDS	R25,high+1
    02EE 7090      ANDI	R25,0
    02EF 93800117  STS	e2rom+3,R24
(0349) 		
(0350) 			e2rom[4] = middle/256;
    02F1 90200107  LDS	R2,middle
    02F3 90300108  LDS	R3,middle+1
    02F5 2C23      MOV	R2,R3
    02F6 2433      CLR	R3
    02F7 92200118  STS	0x118,R2
(0351) 			e2rom[5] = middle%256;
    02F9 91800107  LDS	R24,middle
    02FB 91900108  LDS	R25,middle+1
    02FD 7090      ANDI	R25,0
    02FE 93800119  STS	0x119,R24
(0352) 		
(0353) 			Buz();
    0300 DF14      RCALL	_Buz
(0354) 			for(i=0;i<6;i++)	// 写EEPOM
    0301 2744      CLR	R20
    0302 C018      RJMP	0x031B
(0355) 			{
(0356) 				EEPROM_write(i,e2rom[i]);
    0303 E184      LDI	R24,0x14
    0304 E091      LDI	R25,1
    0305 2FE4      MOV	R30,R20
    0306 27FF      CLR	R31
    0307 0FE8      ADD	R30,R24
    0308 1FF9      ADC	R31,R25
    0309 8120      LDD	R18,Z+0
    030A 2F04      MOV	R16,R20
    030B D19B      RCALL	_EEPROM_write
(0357) 				delay(5);
    030C E005      LDI	R16,5
    030D E010      LDI	R17,0
    030E DD6E      RCALL	_delay
(0358) 				while(compute()<1350||compute()>1650);
    030F DEE3      RCALL	_compute
    0310 3406      CPI	R16,0x46
    0311 E0E5      LDI	R30,5
    0312 071E      CPC	R17,R30
    0313 F3D8      BCS	0x030F
    0314 DEDE      RCALL	_compute
    0315 E782      LDI	R24,0x72
    0316 E096      LDI	R25,6
    0317 1780      CP	R24,R16
    0318 0791      CPC	R25,R17
    0319 F3A8      BCS	0x030F
    031A 9543      INC	R20
    031B 3046      CPI	R20,6
    031C F330      BCS	0x0303
(0359) 			}
(0360) 			LED_set();
    031D DD7E      RCALL	_LED_set
(0361) 			delay(10);
    031E E00A      LDI	R16,0xA
    031F E010      LDI	R17,0
    0320 DD5C      RCALL	_delay
(0362) 			LED_set();
    0321 DD7A      RCALL	_LED_set
(0363) 		}
    0322 C008      RJMP	0x032B
(0364) 		else 	// 设置不对重来
(0365) 		{
(0366) 			while(key()<3)
(0367) 			{
(0368) 				LED_set();
    0323 DD78      RCALL	_LED_set
    0324 DEBC      RCALL	_key
    0325 3003      CPI	R16,3
    0326 F3E0      BCS	0x0323
(0369) 			}
(0370) 			delay(100);
    0327 E604      LDI	R16,0x64
    0328 E010      LDI	R17,0
    0329 DD53      RCALL	_delay
(0371) 			goto loop;
    032A CF21      RJMP	0x024C
(0372) 			
(0373) 		}
(0374) 	}	
    032B D1FB      RCALL	pop_gset1
    032C 9508      RET
_Read_E2rom:
  i                    --> R20
    032D D1F6      RCALL	push_gset1
(0375) }
(0376) 		
(0377) 
(0378) void Read_E2rom(void)
(0379) {	
(0380) 	uchar i;
(0381) 	
(0382) 	for(i=0;i<7;i++)	// 读EEPOM
    032E 2744      CLR	R20
    032F C00D      RJMP	0x033D
(0383) 	{
(0384) 		e2rom[i] = EEPROM_read(i);
    0330 2F04      MOV	R16,R20
    0331 D17C      RCALL	_EEPROM_read
    0332 E184      LDI	R24,0x14
    0333 E091      LDI	R25,1
    0334 2FE4      MOV	R30,R20
    0335 27FF      CLR	R31
    0336 0FE8      ADD	R30,R24
    0337 1FF9      ADC	R31,R25
    0338 8300      STD	Z+0,R16
(0385) 		delay(5);
    0339 E005      LDI	R16,5
    033A E010      LDI	R17,0
    033B DD41      RCALL	_delay
    033C 9543      INC	R20
    033D 3047      CPI	R20,7
    033E F388      BCS	0x0330
(0386) 	}
(0387) 	
(0388) 	low 	= e2rom[0]*256+e2rom[1];	// 油门低位
    033F 91200114  LDS	R18,e2rom
    0341 2733      CLR	R19
    0342 E000      LDI	R16,0
    0343 E011      LDI	R17,1
    0344 D1C1      RCALL	empy16s
    0345 0118      MOVW	R2,R16
    0346 90400115  LDS	R4,e2rom+1
    0348 2455      CLR	R5
    0349 0C24      ADD	R2,R4
    034A 1C35      ADC	R3,R5
    034B 92300106  STS	low+1,R3
    034D 92200105  STS	low,R2
(0389) 	high 	= e2rom[2]*256+e2rom[3];	// 高位
    034F 91200116  LDS	R18,e2rom+2
    0351 2733      CLR	R19
    0352 E000      LDI	R16,0
    0353 E011      LDI	R17,1
    0354 D1B1      RCALL	empy16s
    0355 0118      MOVW	R2,R16
    0356 90400117  LDS	R4,e2rom+3
    0358 2455      CLR	R5
    0359 0C24      ADD	R2,R4
    035A 1C35      ADC	R3,R5
    035B 9230010A  STS	high+1,R3
    035D 92200109  STS	high,R2
(0390) 	middle 	= e2rom[4]*256+e2rom[5];	// 中位
    035F 91200118  LDS	R18,0x118
    0361 2733      CLR	R19
    0362 E000      LDI	R16,0
    0363 E011      LDI	R17,1
    0364 D1A1      RCALL	empy16s
    0365 0118      MOVW	R2,R16
    0366 90400119  LDS	R4,0x119
    0368 2455      CLR	R5
    0369 0C24      ADD	R2,R4
    036A 1C35      ADC	R3,R5
    036B 92300108  STS	middle+1,R3
    036D 92200107  STS	middle,R2
(0391) 	REV		= e2rom[6];		// 倒车标致
    036F 9020011A  LDS	R2,0x11A
    0371 92200104  STS	REV,R2
(0392) 	
(0393) 	if((low>800&&low<1300)&&(middle>1350&&middle<1650)&&(high>1700&&high<2200))
    0373 E280      LDI	R24,0x20
    0374 E093      LDI	R25,3
    0375 90200105  LDS	R2,low
    0377 90300106  LDS	R3,low+1
    0379 1582      CP	R24,R2
    037A 0593      CPC	R25,R3
    037B F008      BCS	0x037D
    037C C04B      RJMP	0x03C8
    037D 01C1      MOVW	R24,R2
    037E 3184      CPI	R24,0x14
    037F E0E5      LDI	R30,5
    0380 079E      CPC	R25,R30
    0381 F008      BCS	0x0383
    0382 C045      RJMP	0x03C8
    0383 E486      LDI	R24,0x46
    0384 E095      LDI	R25,5
    0385 90200107  LDS	R2,middle
    0387 90300108  LDS	R3,middle+1
    0389 1582      CP	R24,R2
    038A 0593      CPC	R25,R3
    038B F008      BCS	0x038D
    038C C03B      RJMP	0x03C8
    038D 01C1      MOVW	R24,R2
    038E 3782      CPI	R24,0x72
    038F E0E6      LDI	R30,6
    0390 079E      CPC	R25,R30
    0391 F5B0      BCC	0x03C8
    0392 EA84      LDI	R24,0xA4
    0393 E096      LDI	R25,6
    0394 90200109  LDS	R2,high
    0396 9030010A  LDS	R3,high+1
    0398 1582      CP	R24,R2
    0399 0593      CPC	R25,R3
    039A F568      BCC	0x03C8
    039B 01C1      MOVW	R24,R2
    039C 3988      CPI	R24,0x98
    039D E0E8      LDI	R30,0x8
    039E 079E      CPC	R25,R30
    039F F540      BCC	0x03C8
(0394) 	{	// 读起的数据正确
(0395) 		PE1 = ((high-middle)*10)/256+2;
    03A0 90200107  LDS	R2,middle
    03A2 90300108  LDS	R3,middle+1
    03A4 019C      MOVW	R18,R24
    03A5 1922      SUB	R18,R2
    03A6 0933      SBC	R19,R3
    03A7 E00A      LDI	R16,0xA
    03A8 E010      LDI	R17,0
    03A9 D15C      RCALL	empy16s
    03AA 01C8      MOVW	R24,R16
    03AB 2F89      MOV	R24,R25
    03AC 2799      CLR	R25
    03AD 9602      ADIW	R24,2
    03AE 93900113  STS	PE1+1,R25
    03B0 93800112  STS	PE1,R24
(0396) 		PE2 = ((middle-low )*10)/256+2;
    03B2 90200105  LDS	R2,low
    03B4 90300106  LDS	R3,low+1
    03B6 91200107  LDS	R18,middle
    03B8 91300108  LDS	R19,middle+1
    03BA 1922      SUB	R18,R2
    03BB 0933      SBC	R19,R3
    03BC E00A      LDI	R16,0xA
    03BD E010      LDI	R17,0
    03BE D147      RCALL	empy16s
    03BF 01C8      MOVW	R24,R16
    03C0 2F89      MOV	R24,R25
    03C1 2799      CLR	R25
    03C2 9602      ADIW	R24,2
    03C3 93900111  STS	PE2+1,R25
    03C5 93800110  STS	PE2,R24
(0397) 	}
    03C7 C01F      RJMP	0x03E7
(0398) 	else // 读起的数据不正确使用默认值
(0399) 	{
(0400) 		PE1 = 23;
    03C8 E187      LDI	R24,0x17
    03C9 E090      LDI	R25,0
    03CA 93900113  STS	PE1+1,R25
    03CC 93800112  STS	PE1,R24
(0401) 		PE2 = 23;
    03CE 93900111  STS	PE2+1,R25
    03D0 93800110  STS	PE2,R24
(0402) 		middle = 1500;
    03D2 ED8C      LDI	R24,0xDC
    03D3 E095      LDI	R25,5
    03D4 93900108  STS	middle+1,R25
    03D6 93800107  STS	middle,R24
(0403) 		low	   = 1100;
    03D8 E48C      LDI	R24,0x4C
    03D9 E094      LDI	R25,4
    03DA 93900106  STS	low+1,R25
    03DC 93800105  STS	low,R24
(0404) 		high   = 1900;
    03DE E68C      LDI	R24,0x6C
    03DF E097      LDI	R25,7
    03E0 9390010A  STS	high+1,R25
    03E2 93800109  STS	high,R24
(0405) 		REV	   = 1;
    03E4 E081      LDI	R24,1
    03E5 93800104  STS	REV,R24
(0406) 	}
    03E7 D13F      RCALL	pop_gset1
    03E8 9508      RET
_int0_isr:
    03E9 922A      ST	R2,-Y
    03EA 923A      ST	R3,-Y
    03EB 938A      ST	R24,-Y
    03EC B62F      IN	R2,0x3F
    03ED 922A      ST	R2,-Y
(0407) }
(0408) 
(0409) 
(0410) 
(0411) /*---------------------------------------------------------------
(0412)    			INT0 中断油门接收
(0413) ----------------------------------------------------------------*/
(0414) #pragma interrupt_handler int0_isr:2
(0415) void int0_isr(void)
(0416) {
(0417) 	if(EICRA==0x03)		// 上升沿开始记时
    03EE 91800069  LDS	R24,0x69
    03F0 3083      CPI	R24,3
    03F1 F459      BNE	0x03FD
(0418) 	{
(0419) 		TCNT1H = 0x00; 
    03F2 2422      CLR	R2
    03F3 92200085  STS	0x85,R2
(0420)  		TCNT1L = 0x00; 
    03F5 92200084  STS	0x84,R2
(0421)  		TCCR1B = 0x02;  //start Timer1
    03F7 E082      LDI	R24,2
    03F8 93800081  STS	0x81,R24
(0422) 		EICRA  = 0x02;
    03FA 93800069  STS	0x69,R24
(0423) 	}
    03FC C01F      RJMP	0x041C
(0424) 	else if(EICRA==0x02)	// 下降沿读计时数据
    03FD 91800069  LDS	R24,0x69
    03FF 3082      CPI	R24,2
    0400 F4D9      BNE	0x041C
(0425) 	{
(0426) 		time.data[0] = TCNT1L;
    0401 90200084  LDS	R2,0x84
    0403 92200100  STS	time,R2
(0427) 		time.data[1] = TCNT1H;
    0405 90200085  LDS	R2,0x85
    0407 92200101  STS	time+1,R2
(0428) 		Timer  	= time.temp;
    0409 90200100  LDS	R2,time
    040B 90300101  LDS	R3,time+1
    040D 9230010C  STS	Timer+1,R3
    040F 9220010B  STS	Timer,R2
(0429) 		TCNT1H 	= 0x00; 
    0411 2422      CLR	R2
    0412 92200085  STS	0x85,R2
(0430)  		TCNT1L	= 0x00; 
    0414 92200084  STS	0x84,R2
(0431) 		EICRA  	= 0x03;
    0416 E083      LDI	R24,3
    0417 93800069  STS	0x69,R24
(0432) 		rxd_flag =1;	// 置接收 flag
    0419 E081      LDI	R24,1
    041A 9380010E  STS	rxd_flag,R24
(0433) 	}
    041C 9029      LD	R2,Y+
    041D BE2F      OUT	0x3F,R2
    041E 9189      LD	R24,Y+
    041F 9039      LD	R3,Y+
    0420 9029      LD	R2,Y+
    0421 9518      RETI
(0434) }
(0435) 
(0436) 
(0437) /*---------------------------------------------------------------
(0438)    			main
(0439) ----------------------------------------------------------------*/
(0440) 
(0441) void main(void)
(0442) {
(0443) 	delay(10);
_main:
    0422 E00A      LDI	R16,0xA
    0423 E010      LDI	R17,0
    0424 DC58      RCALL	_delay
(0444) 	
(0445) 	init_devices();		// 初始化
    0425 DC3D      RCALL	_init_devices
(0446) 	
(0447) 	Rev_Setup();
    0426 DE04      RCALL	_Rev_Setup
(0448) 	
(0449) 	Read_E2rom();		// 读EEPROM
    0427 DF05      RCALL	_Read_E2rom
(0450) 	
(0451) 	while(!rxd_flag);	// 等待油门信号
    0428 9020010E  LDS	R2,rxd_flag
    042A 2022      TST	R2
    042B F3E1      BEQ	0x0428
(0452) 	Buz();
    042C DDE8      RCALL	_Buz
(0453) 	
(0454) 	LED_set();
    042D DC6E      RCALL	_LED_set
(0455) 	delay(10);
    042E E00A      LDI	R16,0xA
    042F E010      LDI	R17,0
    0430 DC4C      RCALL	_delay
(0456) 	LED_set();
    0431 DC6A      RCALL	_LED_set
(0457) 	
(0458) 	rxd_flag = 0 ;
    0432 2422      CLR	R2

⌨️ 快捷键说明

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