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

📄 adc-disp.lss

📁 在winavr上调试的一个adc程序
💻 LSS
📖 第 1 页 / 共 2 页
字号:

adc-disp.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         0000032c  00000000  00000000  00000074  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000010  00800060  0000032c  000003a0  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000014  00800070  0000033c  000003b0  2**0
                  ALLOC
  3 .debug_aranges 00000020  00000000  00000000  000003b0  2**0
                  CONTENTS, READONLY, DEBUGGING
  4 .debug_pubnames 0000004d  00000000  00000000  000003d0  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_info   000003bf  00000000  00000000  0000041d  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_abbrev 0000018f  00000000  00000000  000007dc  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_line   00000331  00000000  00000000  0000096b  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_frame  00000060  00000000  00000000  00000c9c  2**2
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_str    00000131  00000000  00000000  00000cfc  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_loc    000001ad  00000000  00000000  00000e2d  2**0
                  CONTENTS, READONLY, DEBUGGING
 11 .debug_ranges 00000120  00000000  00000000  00000fda  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	0c 94 2a 00 	jmp	0x54	; 0x54 <__ctors_end>
   4:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
   8:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
   c:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  10:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  14:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  18:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  1c:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  20:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  24:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  28:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  2c:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  30:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  34:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  38:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  3c:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  40:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  44:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  48:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  4c:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  50:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>

00000054 <__ctors_end>:
  54:	11 24       	eor	r1, r1
  56:	1f be       	out	0x3f, r1	; 63
  58:	cf e5       	ldi	r28, 0x5F	; 95
  5a:	d4 e0       	ldi	r29, 0x04	; 4
  5c:	de bf       	out	0x3e, r29	; 62
  5e:	cd bf       	out	0x3d, r28	; 61

00000060 <__do_copy_data>:
  60:	10 e0       	ldi	r17, 0x00	; 0
  62:	a0 e6       	ldi	r26, 0x60	; 96
  64:	b0 e0       	ldi	r27, 0x00	; 0
  66:	ec e2       	ldi	r30, 0x2C	; 44
  68:	f3 e0       	ldi	r31, 0x03	; 3
  6a:	02 c0       	rjmp	.+4      	; 0x70 <.do_copy_data_start>

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

00000070 <.do_copy_data_start>:
  70:	a0 37       	cpi	r26, 0x70	; 112
  72:	b1 07       	cpc	r27, r17
  74:	d9 f7       	brne	.-10     	; 0x6c <.do_copy_data_loop>

00000076 <__do_clear_bss>:
  76:	10 e0       	ldi	r17, 0x00	; 0
  78:	a0 e7       	ldi	r26, 0x70	; 112
  7a:	b0 e0       	ldi	r27, 0x00	; 0
  7c:	01 c0       	rjmp	.+2      	; 0x80 <.do_clear_bss_start>

0000007e <.do_clear_bss_loop>:
  7e:	1d 92       	st	X+, r1

00000080 <.do_clear_bss_start>:
  80:	a4 38       	cpi	r26, 0x84	; 132
  82:	b1 07       	cpc	r27, r17
  84:	e1 f7       	brne	.-8      	; 0x7e <.do_clear_bss_loop>
  86:	0e 94 50 01 	call	0x2a0	; 0x2a0 <main>
  8a:	0c 94 94 01 	jmp	0x328	; 0x328 <_exit>

0000008e <__bad_interrupt>:
  8e:	0c 94 00 00 	jmp	0	; 0x0 <__vectors>

00000092 <IoInit>:

static uint g_aAdValue[8];	//A/D转换缓冲区
static uchar g_aLed[4];

void IoInit(void)
{
  92:	d8 98       	cbi	0x1b, 0	; 27
   PORTA&=~_BV(PA0);        //初始化pa0
   DDRC=0xff;
  94:	8f ef       	ldi	r24, 0xFF	; 255
  96:	84 bb       	out	0x14, r24	; 20
   PORTC=0X00;
  98:	15 ba       	out	0x15, r1	; 21
   DDRA=0xf0;
  9a:	80 ef       	ldi	r24, 0xF0	; 240
  9c:	8a bb       	out	0x1a, r24	; 26
   PORTA=0xf0;
  9e:	8b bb       	out	0x1b, r24	; 27
}
  a0:	08 95       	ret

000000a2 <AdcConvert>:

uint AdcConvert(void)
{
  a2:	ff 92       	push	r15
  a4:	0f 93       	push	r16
  a6:	1f 93       	push	r17
  a8:	cf 93       	push	r28
  aa:	df 93       	push	r29
	uchar i;
	uint ret;
	uchar max_id,min_id,max_value,min_value;
	
	ADMUX=0xc0;//内部2.56V参考电压,0通道
  ac:	80 ec       	ldi	r24, 0xC0	; 192
  ae:	87 b9       	out	0x07, r24	; 7
	ADCSRA=_BV(ADEN);//使能ADC,单次转换模式
  b0:	80 e8       	ldi	r24, 0x80	; 128
  b2:	86 b9       	out	0x06, r24	; 6
  b4:	e0 e7       	ldi	r30, 0x70	; 112
  b6:	f0 e0       	ldi	r31, 0x00	; 0
    can be achieved.
*/
void
_delay_loop_1(uint8_t __count)
{
	__asm__ volatile (
  b8:	40 e5       	ldi	r20, 0x50	; 80
	
	//连续转换8次
	for(i=0;i<8;i++)
	{
		ADCSRA|=_BV(ADSC);
  ba:	36 9a       	sbi	0x06, 6	; 6
  bc:	84 2f       	mov	r24, r20
  be:	8a 95       	dec	r24
  c0:	f1 f7       	brne	.-4      	; 0xbe <AdcConvert+0x1c>
		_delay_us(60);
		while(ADCSRA&_BV(ADSC))
  c2:	36 99       	sbic	0x06, 6	; 6
  c4:	fb cf       	rjmp	.-10     	; 0xbc <AdcConvert+0x1a>
			_delay_us(60);
		ret=ADCL;
  c6:	84 b1       	in	r24, 0x04	; 4
  c8:	90 e0       	ldi	r25, 0x00	; 0
		ret|=(uint)(ADCH<<8);
  ca:	25 b1       	in	r18, 0x05	; 5
		g_aAdValue[i]=ret;
  cc:	32 2f       	mov	r19, r18
  ce:	20 e0       	ldi	r18, 0x00	; 0
  d0:	82 2b       	or	r24, r18
  d2:	93 2b       	or	r25, r19
  d4:	81 93       	st	Z+, r24
  d6:	91 93       	st	Z+, r25
	
	ADMUX=0xc0;//内部2.56V参考电压,0通道
	ADCSRA=_BV(ADEN);//使能ADC,单次转换模式
	
	//连续转换8次
	for(i=0;i<8;i++)
  d8:	80 e0       	ldi	r24, 0x00	; 0
  da:	e0 38       	cpi	r30, 0x80	; 128
  dc:	f8 07       	cpc	r31, r24
  de:	69 f7       	brne	.-38     	; 0xba <AdcConvert+0x18>
  e0:	ef 01       	movw	r28, r30
  e2:	2e 97       	sbiw	r28, 0x0e	; 14
  e4:	fe 01       	movw	r30, r28
  e6:	20 e0       	ldi	r18, 0x00	; 0
  e8:	30 e0       	ldi	r19, 0x00	; 0
		ret|=(uint)(ADCH<<8);
		g_aAdValue[i]=ret;
	}
	ret=0;
	for(i=1;i<8;i++)
		ret+=g_aAdValue[i];
  ea:	81 91       	ld	r24, Z+
  ec:	91 91       	ld	r25, Z+
  ee:	28 0f       	add	r18, r24
  f0:	39 1f       	adc	r19, r25
		ret=ADCL;
		ret|=(uint)(ADCH<<8);
		g_aAdValue[i]=ret;
	}
	ret=0;
	for(i=1;i<8;i++)
  f2:	80 e0       	ldi	r24, 0x00	; 0
  f4:	e0 38       	cpi	r30, 0x80	; 128
  f6:	f8 07       	cpc	r31, r24
  f8:	c1 f7       	brne	.-16     	; 0xea <AdcConvert+0x48>
		ret+=g_aAdValue[i];
	
	//找到最大和最小值索引	
	ret/=7;
  fa:	c9 01       	movw	r24, r18
  fc:	67 e0       	ldi	r22, 0x07	; 7
  fe:	70 e0       	ldi	r23, 0x00	; 0
 100:	0e 94 80 01 	call	0x300	; 0x300 <__udivmodhi4>
 104:	ab 01       	movw	r20, r22
 106:	3e 97       	sbiw	r30, 0x0e	; 14
 108:	a1 e0       	ldi	r26, 0x01	; 1
 10a:	11 e0       	ldi	r17, 0x01	; 1
 10c:	b1 e0       	ldi	r27, 0x01	; 1
 10e:	ff 24       	eor	r15, r15
 110:	00 e0       	ldi	r16, 0x00	; 0
	max_id=min_id=1;
	max_value=min_value=0;
	for(i=1;i<8;i++)
	{
		if(g_aAdValue[i]>ret)
 112:	60 81       	ld	r22, Z
 114:	71 81       	ldd	r23, Z+1	; 0x01
 116:	46 17       	cp	r20, r22
 118:	57 07       	cpc	r21, r23
 11a:	60 f4       	brcc	.+24     	; 0x134 <AdcConvert+0x92>
		{
			if(g_aAdValue[i]-ret>max_value)
 11c:	9b 01       	movw	r18, r22
 11e:	24 1b       	sub	r18, r20
 120:	35 0b       	sbc	r19, r21
 122:	8f 2d       	mov	r24, r15
 124:	90 e0       	ldi	r25, 0x00	; 0
 126:	82 17       	cp	r24, r18
 128:	93 07       	cpc	r25, r19
 12a:	78 f4       	brcc	.+30     	; 0x14a <AdcConvert+0xa8>
			{
				max_value=g_aAdValue[i]-ret;
 12c:	f6 2e       	mov	r15, r22
 12e:	f4 1a       	sub	r15, r20
 130:	1a 2f       	mov	r17, r26
 132:	0b c0       	rjmp	.+22     	; 0x14a <AdcConvert+0xa8>
				max_id=i;
			}
		}
		else
		{
			if(ret-g_aAdValue[i]>min_value)
 134:	9a 01       	movw	r18, r20
 136:	26 1b       	sub	r18, r22
 138:	37 0b       	sbc	r19, r23
 13a:	80 2f       	mov	r24, r16
 13c:	90 e0       	ldi	r25, 0x00	; 0
 13e:	82 17       	cp	r24, r18
 140:	93 07       	cpc	r25, r19
 142:	18 f4       	brcc	.+6      	; 0x14a <AdcConvert+0xa8>
			{
				min_value=ret-g_aAdValue[i];
 144:	04 2f       	mov	r16, r20
 146:	06 1b       	sub	r16, r22
 148:	ba 2f       	mov	r27, r26
	
	//找到最大和最小值索引	
	ret/=7;
	max_id=min_id=1;
	max_value=min_value=0;
	for(i=1;i<8;i++)
 14a:	af 5f       	subi	r26, 0xFF	; 255
 14c:	32 96       	adiw	r30, 0x02	; 2
 14e:	a8 30       	cpi	r26, 0x08	; 8
 150:	01 f7       	brne	.-64     	; 0x112 <AdcConvert+0x70>
 152:	41 e0       	ldi	r20, 0x01	; 1
 154:	20 e0       	ldi	r18, 0x00	; 0
 156:	30 e0       	ldi	r19, 0x00	; 0
	
	//去掉第一个和最大最小值后的平均值
	ret=0;
	for(i=1;i<8;i++)
	{
		if((i!=min_id)&&(i!=max_id))
 158:	4b 17       	cp	r20, r27
 15a:	31 f0       	breq	.+12     	; 0x168 <AdcConvert+0xc6>
 15c:	41 17       	cp	r20, r17
 15e:	21 f0       	breq	.+8      	; 0x168 <AdcConvert+0xc6>
			ret+=g_aAdValue[i];     
 160:	88 81       	ld	r24, Y
 162:	99 81       	ldd	r25, Y+1	; 0x01
 164:	28 0f       	add	r18, r24
 166:	39 1f       	adc	r19, r25
		}
	}
	
	//去掉第一个和最大最小值后的平均值
	ret=0;
	for(i=1;i<8;i++)
 168:	4f 5f       	subi	r20, 0xFF	; 255
 16a:	22 96       	adiw	r28, 0x02	; 2
 16c:	48 30       	cpi	r20, 0x08	; 8
 16e:	a1 f7       	brne	.-24     	; 0x158 <AdcConvert+0xb6>
	{
		if((i!=min_id)&&(i!=max_id))
			ret+=g_aAdValue[i];     
	}
	if(min_id!=max_id)
 170:	b1 17       	cp	r27, r17
 172:	21 f0       	breq	.+8      	; 0x17c <AdcConvert+0xda>
		ret/=5;
 174:	c9 01       	movw	r24, r18
 176:	65 e0       	ldi	r22, 0x05	; 5
 178:	70 e0       	ldi	r23, 0x00	; 0
 17a:	03 c0       	rjmp	.+6      	; 0x182 <AdcConvert+0xe0>
	else  

⌨️ 快捷键说明

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