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

📄 main.lss

📁 车载NI_MH快速充电器
💻 LSS
📖 第 1 页 / 共 2 页
字号:

main.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .data         00000000  00800100  00000480  00000514  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  1 .text         00000480  00000000  00000000  00000094  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  2 .bss          00000013  00800100  00800100  00000514  2**0
                  ALLOC
  3 .noinit       00000000  00800113  00800113  00000514  2**0
                  CONTENTS
  4 .eeprom       00000000  00810000  00810000  00000514  2**0
                  CONTENTS
  5 .stab         0000036c  00000000  00000000  00000514  2**2
                  CONTENTS, READONLY, DEBUGGING
  6 .stabstr      00000084  00000000  00000000  00000880  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_aranges 0000003c  00000000  00000000  00000904  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_pubnames 000001a5  00000000  00000000  00000940  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_info   000004d0  00000000  00000000  00000ae5  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_abbrev 00000212  00000000  00000000  00000fb5  2**0
                  CONTENTS, READONLY, DEBUGGING
 11 .debug_line   00000596  00000000  00000000  000011c7  2**0
                  CONTENTS, READONLY, DEBUGGING
 12 .debug_str    00000168  00000000  00000000  0000175d  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	19 c0       	rjmp	.+50     	; 0x34 <__ctors_end>
   2:	32 c0       	rjmp	.+100    	; 0x68 <__bad_interrupt>
   4:	31 c0       	rjmp	.+98     	; 0x68 <__bad_interrupt>
   6:	30 c0       	rjmp	.+96     	; 0x68 <__bad_interrupt>
   8:	2f c0       	rjmp	.+94     	; 0x68 <__bad_interrupt>
   a:	2e c0       	rjmp	.+92     	; 0x68 <__bad_interrupt>
   c:	2d c0       	rjmp	.+90     	; 0x68 <__bad_interrupt>
   e:	2c c0       	rjmp	.+88     	; 0x68 <__bad_interrupt>
  10:	2b c0       	rjmp	.+86     	; 0x68 <__bad_interrupt>
  12:	2a c0       	rjmp	.+84     	; 0x68 <__bad_interrupt>
  14:	29 c0       	rjmp	.+82     	; 0x68 <__bad_interrupt>
  16:	28 c0       	rjmp	.+80     	; 0x68 <__bad_interrupt>
  18:	27 c0       	rjmp	.+78     	; 0x68 <__bad_interrupt>
  1a:	ef c0       	rjmp	.+478    	; 0x1fa <__vector_13>
  1c:	25 c0       	rjmp	.+74     	; 0x68 <__bad_interrupt>
  1e:	24 c0       	rjmp	.+72     	; 0x68 <__bad_interrupt>
  20:	23 c0       	rjmp	.+70     	; 0x68 <__bad_interrupt>
  22:	22 c0       	rjmp	.+68     	; 0x68 <__bad_interrupt>
  24:	21 c0       	rjmp	.+66     	; 0x68 <__bad_interrupt>
  26:	20 c0       	rjmp	.+64     	; 0x68 <__bad_interrupt>
  28:	1f c0       	rjmp	.+62     	; 0x68 <__bad_interrupt>
  2a:	1e c0       	rjmp	.+60     	; 0x68 <__bad_interrupt>
  2c:	1d c0       	rjmp	.+58     	; 0x68 <__bad_interrupt>
  2e:	1c c0       	rjmp	.+56     	; 0x68 <__bad_interrupt>
  30:	1b c0       	rjmp	.+54     	; 0x68 <__bad_interrupt>
  32:	1a c0       	rjmp	.+52     	; 0x68 <__bad_interrupt>

00000034 <__ctors_end>:
  34:	11 24       	eor	r1, r1
  36:	1f be       	out	0x3f, r1	; 63
  38:	cf ef       	ldi	r28, 0xFF	; 255
  3a:	d2 e0       	ldi	r29, 0x02	; 2
  3c:	de bf       	out	0x3e, r29	; 62
  3e:	cd bf       	out	0x3d, r28	; 61

00000040 <__do_copy_data>:
  40:	11 e0       	ldi	r17, 0x01	; 1
  42:	a0 e0       	ldi	r26, 0x00	; 0
  44:	b1 e0       	ldi	r27, 0x01	; 1
  46:	e0 e8       	ldi	r30, 0x80	; 128
  48:	f4 e0       	ldi	r31, 0x04	; 4
  4a:	02 c0       	rjmp	.+4      	; 0x50 <.do_copy_data_start>

0000004c <.do_copy_data_loop>:
  4c:	05 90       	lpm	r0, Z+
  4e:	0d 92       	st	X+, r0

00000050 <.do_copy_data_start>:
  50:	a0 30       	cpi	r26, 0x00	; 0
  52:	b1 07       	cpc	r27, r17
  54:	d9 f7       	brne	.-10     	; 0x4c <.do_copy_data_loop>

00000056 <__do_clear_bss>:
  56:	11 e0       	ldi	r17, 0x01	; 1
  58:	a0 e0       	ldi	r26, 0x00	; 0
  5a:	b1 e0       	ldi	r27, 0x01	; 1
  5c:	01 c0       	rjmp	.+2      	; 0x60 <.do_clear_bss_start>

0000005e <.do_clear_bss_loop>:
  5e:	1d 92       	st	X+, r1

00000060 <.do_clear_bss_start>:
  60:	a3 31       	cpi	r26, 0x13	; 19
  62:	b1 07       	cpc	r27, r17
  64:	e1 f7       	brne	.-8      	; 0x5e <.do_clear_bss_loop>
  66:	67 c1       	rjmp	.+718    	; 0x336 <main>

00000068 <__bad_interrupt>:
  68:	cb cf       	rjmp	.-106    	; 0x0 <__vectors>

0000006a <timer1_init>:
----------------------------------------------------------------*/

void timer1_init(void)
{
 	TCCR1B = 0x00; 	//stop
  6a:	10 92 81 00 	sts	0x0081, r1
 	TCNT1H = 0x63; 	//setup
  6e:	83 e6       	ldi	r24, 0x63	; 99
  70:	80 93 85 00 	sts	0x0085, r24
 	TCNT1L = 0xC0;
  74:	80 ec       	ldi	r24, 0xC0	; 192
  76:	80 93 84 00 	sts	0x0084, r24
 	TCCR1A = 0x00;
  7a:	10 92 80 00 	sts	0x0080, r1
 	TCCR1B = 0x01; 	//start Timer
  7e:	81 e0       	ldi	r24, 0x01	; 1
  80:	80 93 81 00 	sts	0x0081, r24
  84:	08 95       	ret

00000086 <timer2_init>:
}

void timer2_init(void)	// PWM
{
 	TCCR2B = 0x00; //stop
  86:	10 92 b1 00 	sts	0x00B1, r1
 	ASSR   = 0x00; //set async mode
  8a:	10 92 b6 00 	sts	0x00B6, r1
 	TCNT2  = 0x01; //setup
  8e:	81 e0       	ldi	r24, 0x01	; 1
  90:	80 93 b2 00 	sts	0x00B2, r24
 	OCR2A  = 0x7F;
  94:	8f e7       	ldi	r24, 0x7F	; 127
  96:	80 93 b3 00 	sts	0x00B3, r24
 	OCR2B  = 0x00;
  9a:	10 92 b4 00 	sts	0x00B4, r1
 	TCCR2A = 0xC3; 
  9e:	83 ec       	ldi	r24, 0xC3	; 195
  a0:	80 93 b0 00 	sts	0x00B0, r24
  a4:	08 95       	ret

000000a6 <init_devices>:
}


void init_devices(void)
{
	
	asm("cli");
  a6:	f8 94       	cli
	
	DDRB  = 0xFF;
  a8:	8f ef       	ldi	r24, 0xFF	; 255
  aa:	84 b9       	out	0x04, r24	; 4
 	PORTB = 0x30;
  ac:	80 e3       	ldi	r24, 0x30	; 48
  ae:	85 b9       	out	0x05, r24	; 5
 	
 	DDRC  = 0x00;
  b0:	17 b8       	out	0x07, r1	; 7
 	PORTC = 0x00; 
  b2:	18 b8       	out	0x08, r1	; 8
 	
 	DDRD  = 0x3F;
  b4:	8f e3       	ldi	r24, 0x3F	; 63
  b6:	8a b9       	out	0x0a, r24	; 10
 	PORTD = 0xC0; 
  b8:	80 ec       	ldi	r24, 0xC0	; 192
  ba:	8b b9       	out	0x0b, r24	; 11
 	
 	adc_int();
  bc:	7c d1       	rcall	.+760    	; 0x3b6 <adc_int>
 	timer0_init();
  be:	cf d1       	rcall	.+926    	; 0x45e <timer0_init>
 	timer1_init();
  c0:	d4 df       	rcall	.-88     	; 0x6a <timer1_init>
 	timer2_init();
  c2:	e1 df       	rcall	.-62     	; 0x86 <timer2_init>
 	
 	MCUCR = 0x00;
  c4:	15 be       	out	0x35, r1	; 53
 	EICRA = 0x00; //extended ext ints
  c6:	10 92 69 00 	sts	0x0069, r1
 	EIMSK = 0x00;
  ca:	1d ba       	out	0x1d, r1	; 29
 
 	TIMSK0 = 0x00; //timer 0 interrupt sources
  cc:	10 92 6e 00 	sts	0x006E, r1
 	TIMSK1 = 0x01; //timer 1 interrupt sources
  d0:	81 e0       	ldi	r24, 0x01	; 1
  d2:	80 93 6f 00 	sts	0x006F, r24
 	TIMSK2 = 0x00; //timer 2 interrupt sources
  d6:	10 92 70 00 	sts	0x0070, r1
 	
 	asm("sei");
  da:	78 94       	sei
  dc:	08 95       	ret

000000de <delay>:
}



void delay(uint t)
{
	uint i,j,k;
	
	for(i=0;i<t;i++)
  de:	60 e0       	ldi	r22, 0x00	; 0
  e0:	70 e0       	ldi	r23, 0x00	; 0
  e2:	68 17       	cp	r22, r24
  e4:	79 07       	cpc	r23, r25
  e6:	88 f4       	brcc	.+34     	; 0x10a <delay+0x2c>
	{
		for(j=0;j<2000;j++)
  e8:	40 e0       	ldi	r20, 0x00	; 0
  ea:	50 e0       	ldi	r21, 0x00	; 0
  ec:	23 ef       	ldi	r18, 0xF3	; 243
  ee:	31 e0       	ldi	r19, 0x01	; 1
		{
			for(k=0;k<500;k++);;
  f0:	22 53       	subi	r18, 0x32	; 50
  f2:	30 40       	sbci	r19, 0x00	; 0
  f4:	37 ff       	sbrs	r19, 7
  f6:	fc cf       	rjmp	.-8      	; 0xf0 <delay+0x12>
  f8:	4f 5f       	subi	r20, 0xFF	; 255
  fa:	5f 4f       	sbci	r21, 0xFF	; 255
  fc:	27 e0       	ldi	r18, 0x07	; 7
  fe:	40 3d       	cpi	r20, 0xD0	; 208
 100:	52 07       	cpc	r21, r18
 102:	a0 f3       	brcs	.-24     	; 0xec <delay+0xe>
 104:	6f 5f       	subi	r22, 0xFF	; 255
 106:	7f 4f       	sbci	r23, 0xFF	; 255
 108:	ec cf       	rjmp	.-40     	; 0xe2 <delay+0x4>
 10a:	08 95       	ret

0000010c <buz_set>:
		}
	}
}
/*---------------------------------------------------------------
   			BUZ 控制
----------------------------------------------------------------*/

void buz_set(uchar i)
{
	TCCR2B = 0x02; //start
 10c:	92 e0       	ldi	r25, 0x02	; 2
 10e:	90 93 b1 00 	sts	0x00B1, r25
	buz_t = 0;
 112:	10 92 0a 01 	sts	0x010A, r1
	buz = i;
 116:	80 93 02 01 	sts	0x0102, r24
 11a:	08 95       	ret

0000011c <I_auto_set>:
}

/*---------------------------------------------------------------
   			恒流控制
----------------------------------------------------------------*/

void I_auto_set(void)
{
	uint I_data;
	
	if(power) 
 11c:	80 91 03 01 	lds	r24, 0x0103
 120:	88 23       	and	r24, r24
 122:	11 f1       	breq	.+68     	; 0x168 <I_auto_set+0x4c>
	{	
		SET_LED1;
 124:	2e 9a       	sbi	0x05, 6	; 5
		
		I_data = adc_colect(2);	// 读电流值
 126:	82 e0       	ldi	r24, 0x02	; 2
 128:	90 e0       	ldi	r25, 0x00	; 0
 12a:	4c d1       	rcall	.+664    	; 0x3c4 <adc_colect>
	
		if(I_data<IREF) 
 12c:	20 91 0d 01 	lds	r18, 0x010D
 130:	30 91 0e 01 	lds	r19, 0x010E
 134:	82 17       	cp	r24, r18
 136:	93 07       	cpc	r25, r19
 138:	30 f4       	brcc	.+12     	; 0x146 <I_auto_set+0x2a>
		{
			if(pwm_data<254) pwm_data ++;
 13a:	80 91 12 01 	lds	r24, 0x0112
 13e:	8e 3f       	cpi	r24, 0xFE	; 254
 140:	70 f4       	brcc	.+28     	; 0x15e <I_auto_set+0x42>
 142:	8f 5f       	subi	r24, 0xFF	; 255
 144:	0a c0       	rjmp	.+20     	; 0x15a <I_auto_set+0x3e>
		}
		else if(I_data>(IREF+5)) 
 146:	2b 5f       	subi	r18, 0xFB	; 251
 148:	3f 4f       	sbci	r19, 0xFF	; 255
 14a:	28 17       	cp	r18, r24
 14c:	39 07       	cpc	r19, r25
 14e:	38 f4       	brcc	.+14     	; 0x15e <I_auto_set+0x42>
		{	
			if(pwm_data>2) pwm_data --;
 150:	80 91 12 01 	lds	r24, 0x0112
 154:	83 30       	cpi	r24, 0x03	; 3
 156:	18 f0       	brcs	.+6      	; 0x15e <I_auto_set+0x42>
 158:	81 50       	subi	r24, 0x01	; 1
 15a:	80 93 12 01 	sts	0x0112, r24
		}
	
		Pwm_set(pwm_data);	// 设置占空比
 15e:	80 91 12 01 	lds	r24, 0x0112
 162:	99 27       	eor	r25, r25
 164:	84 d1       	rcall	.+776    	; 0x46e <Pwm_set>
 166:	08 95       	ret
	}
	else 
	{	
		TCCR0B = 0x00; 		//start timer
 168:	85 bd       	out	0x25, r24	; 37
		TCCR0A = 0x00; 
 16a:	84 bd       	out	0x24, r24	; 36
		CLR_PWM;
 16c:	5d 98       	cbi	0x0b, 5	; 11
		CLR_LED1;
 16e:	2e 98       	cbi	0x05, 6	; 5
 170:	08 95       	ret

00000172 <V_auto_set>:
	}
}

/*---------------------------------------------------------------
   			电压检测
----------------------------------------------------------------*/

void V_auto_set(void)
{
 172:	cf 93       	push	r28
 174:	df 93       	push	r29
	uint temp;
		
	temp = adc_colect(2);	// 读电流值
 176:	82 e0       	ldi	r24, 0x02	; 2
 178:	90 e0       	ldi	r25, 0x00	; 0
 17a:	24 d1       	rcall	.+584    	; 0x3c4 <adc_colect>
	
	if(temp>10)
 17c:	0b 97       	sbiw	r24, 0x0b	; 11
 17e:	c0 f1       	brcs	.+112    	; 0x1f0 <V_auto_set+0x7e>
	{
		TCCR0A = 0x00;	//0x23; 
 180:	14 bc       	out	0x24, r1	; 36
 		TCCR0B = 0x00; 	//start timer
 182:	15 bc       	out	0x25, r1	; 37
		delay(120);
 184:	88 e7       	ldi	r24, 0x78	; 120
 186:	90 e0       	ldi	r25, 0x00	; 0
 188:	aa df       	rcall	.-172    	; 0xde <delay>
		
		temp = adc_colect(4);	// 读电流值
 18a:	84 e0       	ldi	r24, 0x04	; 4
 18c:	90 e0       	ldi	r25, 0x00	; 0
 18e:	1a d1       	rcall	.+564    	; 0x3c4 <adc_colect>
		temp = adc_colect(4);	// 读电流值
 190:	84 e0       	ldi	r24, 0x04	; 4
 192:	90 e0       	ldi	r25, 0x00	; 0
 194:	17 d1       	rcall	.+558    	; 0x3c4 <adc_colect>
 196:	ec 01       	movw	r28, r24
		
		if(VREF>=temp) stop ++;
 198:	80 91 00 01 	lds	r24, 0x0100
 19c:	90 91 01 01 	lds	r25, 0x0101
 1a0:	8c 17       	cp	r24, r28
 1a2:	9d 07       	cpc	r25, r29
 1a4:	30 f0       	brcs	.+12     	; 0x1b2 <V_auto_set+0x40>
 1a6:	80 91 11 01 	lds	r24, 0x0111
 1aa:	8f 5f       	subi	r24, 0xFF	; 255
 1ac:	80 93 11 01 	sts	0x0111, r24
 1b0:	02 c0       	rjmp	.+4      	; 0x1b6 <V_auto_set+0x44>
		else stop = 0;
 1b2:	10 92 11 01 	sts	0x0111, r1
		
		if(stop>stop_num)		// 3分钟电压无变化电已充满
 1b6:	90 91 11 01 	lds	r25, 0x0111
 1ba:	80 91 0c 01 	lds	r24, 0x010C
 1be:	89 17       	cp	r24, r25
 1c0:	90 f4       	brcc	.+36     	; 0x1e6 <V_auto_set+0x74>
		{
			stop  = 0;
 1c2:	10 92 11 01 	sts	0x0111, r1
			power = 0;
 1c6:	10 92 03 01 	sts	0x0103, r1
			CLR_LED1;
 1ca:	2e 98       	cbi	0x05, 6	; 5
			SET_LED2;
 1cc:	2f 9a       	sbi	0x05, 7	; 5
 1ce:	c2 e0       	ldi	r28, 0x02	; 2
 1d0:	d0 e0       	ldi	r29, 0x00	; 0
			for(temp=0;temp<3;temp++)
			{
				buz_set(200);
 1d2:	88 ec       	ldi	r24, 0xC8	; 200
 1d4:	9b df       	rcall	.-202    	; 0x10c <buz_set>
				delay(180);
 1d6:	84 eb       	ldi	r24, 0xB4	; 180
 1d8:	90 e0       	ldi	r25, 0x00	; 0
 1da:	81 df       	rcall	.-254    	; 0xde <delay>
 1dc:	21 97       	sbiw	r28, 0x01	; 1
 1de:	d7 ff       	sbrs	r29, 7
 1e0:	f8 cf       	rjmp	.-16     	; 0x1d2 <V_auto_set+0x60>
 1e2:	c3 e0       	ldi	r28, 0x03	; 3
 1e4:	d0 e0       	ldi	r29, 0x00	; 0
			}
		}
		VREF = temp;	
 1e6:	d0 93 01 01 	sts	0x0101, r29
 1ea:	c0 93 00 01 	sts	0x0100, r28
 1ee:	02 c0       	rjmp	.+4      	; 0x1f4 <V_auto_set+0x82>
	}
	else power = 0;		// 没接电池关机
 1f0:	10 92 03 01 	sts	0x0103, r1
 1f4:	df 91       	pop	r29
 1f6:	cf 91       	pop	r28
 1f8:	08 95       	ret

000001fa <__vector_13>:
}


/*---------------------------------------------------------------
   			T1 5ms 中断
----------------------------------------------------------------*/

SIGNAL(SIG_OVERFLOW1) 
{
 1fa:	1f 92       	push	r1
 1fc:	0f 92       	push	r0
 1fe:	0f b6       	in	r0, 0x3f	; 63
 200:	0f 92       	push	r0
 202:	11 24       	eor	r1, r1
 204:	8f 93       	push	r24
 206:	9f 93       	push	r25
	TCNT1H = 0x63; 		//reload counter high value
 208:	83 e6       	ldi	r24, 0x63	; 99
 20a:	80 93 85 00 	sts	0x0085, r24
 	TCNT1L = 0xC0; 		//reload counter low value
 20e:	80 ec       	ldi	r24, 0xC0	; 192

⌨️ 快捷键说明

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