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

📄 main.lss

📁 单片机源代码
💻 LSS
📖 第 1 页 / 共 5 页
字号:

main.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000d76  00000000  00000000  00000094  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         0000000e  00800060  00000d76  00000e0a  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          0000001a  0080006e  0080006e  00000e18  2**0
                  ALLOC
  3 .noinit       00000000  00800088  00800088  00000e18  2**0
                  CONTENTS
  4 .eeprom       00000000  00810000  00810000  00000e18  2**0
                  CONTENTS
  5 .stab         00000834  00000000  00000000  00000e18  2**2
                  CONTENTS, READONLY, DEBUGGING
  6 .stabstr      0000063f  00000000  00000000  0000164c  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	12 c0       	rjmp	.+36     	; 0x26
   2:	2b c0       	rjmp	.+86     	; 0x5a
   4:	2a c0       	rjmp	.+84     	; 0x5a
   6:	29 c0       	rjmp	.+82     	; 0x5a
   8:	28 c0       	rjmp	.+80     	; 0x5a
   a:	27 c0       	rjmp	.+78     	; 0x5a
   c:	26 c0       	rjmp	.+76     	; 0x5a
   e:	25 c0       	rjmp	.+74     	; 0x5a
  10:	24 c0       	rjmp	.+72     	; 0x5a
  12:	23 c0       	rjmp	.+70     	; 0x5a
  14:	22 c0       	rjmp	.+68     	; 0x5a
  16:	21 c0       	rjmp	.+66     	; 0x5a
  18:	20 c0       	rjmp	.+64     	; 0x5a
  1a:	1f c0       	rjmp	.+62     	; 0x5a
  1c:	1e c0       	rjmp	.+60     	; 0x5a
  1e:	1d c0       	rjmp	.+58     	; 0x5a
  20:	1c c0       	rjmp	.+56     	; 0x5a
  22:	1b c0       	rjmp	.+54     	; 0x5a
  24:	1a c0       	rjmp	.+52     	; 0x5a

00000026 <__ctors_end>:
  26:	11 24       	eor	r1, r1
  28:	1f be       	out	0x3f, r1	; 63
  2a:	cf e5       	ldi	r28, 0x5F	; 95
  2c:	d4 e0       	ldi	r29, 0x04	; 4
  2e:	de bf       	out	0x3e, r29	; 62
  30:	cd bf       	out	0x3d, r28	; 61

00000032 <__do_copy_data>:
  32:	10 e0       	ldi	r17, 0x00	; 0
  34:	a0 e6       	ldi	r26, 0x60	; 96
  36:	b0 e0       	ldi	r27, 0x00	; 0
  38:	e6 e7       	ldi	r30, 0x76	; 118
  3a:	fd e0       	ldi	r31, 0x0D	; 13
  3c:	02 c0       	rjmp	.+4      	; 0x42

0000003e <.do_copy_data_loop>:
  3e:	05 90       	lpm	r0, Z+
  40:	0d 92       	st	X+, r0

00000042 <.do_copy_data_start>:
  42:	ae 36       	cpi	r26, 0x6E	; 110
  44:	b1 07       	cpc	r27, r17
  46:	d9 f7       	brne	.-10     	; 0x3e

00000048 <__do_clear_bss>:
  48:	10 e0       	ldi	r17, 0x00	; 0
  4a:	ae e6       	ldi	r26, 0x6E	; 110
  4c:	b0 e0       	ldi	r27, 0x00	; 0
  4e:	01 c0       	rjmp	.+2      	; 0x52

00000050 <.do_clear_bss_loop>:
  50:	1d 92       	st	X+, r1

00000052 <.do_clear_bss_start>:
  52:	a8 38       	cpi	r26, 0x88	; 136
  54:	b1 07       	cpc	r27, r17
  56:	e1 f7       	brne	.-8      	; 0x50
  58:	79 c0       	rjmp	.+242    	; 0x14c

0000005a <__bad_interrupt>:
  5a:	d2 cf       	rjmp	.-92     	; 0x0

0000005c <AdcConvert>:
void IoInit(void);


uint AdcConvert(void)
{
  5c:	cf 93       	push	r28
	uchar i;
	uint ret;
	uchar max_id,min_id,max_value,min_value;
	
	ADMUX=0Xc0;//内部2.56V参考电压,0通道
  5e:	80 ec       	ldi	r24, 0xC0	; 192
  60:	87 b9       	out	0x07, r24	; 7
	ADCSRA=_BV(ADEN);//使能ADC,单次转换模式
  62:	80 e8       	ldi	r24, 0x80	; 128
  64:	86 b9       	out	0x06, r24	; 6
	
	//连续转换8次
	for(i=0;i<8;i++)
  66:	40 e0       	ldi	r20, 0x00	; 0
  68:	ee e6       	ldi	r30, 0x6E	; 110
  6a:	f0 e0       	ldi	r31, 0x00	; 0
	{
		ADCSRA|=_BV(ADSC);
  6c:	36 9a       	sbi	0x06, 6	; 6

/* 8-bit count, 3 cycles/loop */
static inline void
_delay_loop_1(unsigned char __count)
{
  6e:	8c e3       	ldi	r24, 0x3C	; 60
	asm volatile (
  70:	8a 95       	dec	r24
  72:	f1 f7       	brne	.-4      	; 0x70
		_delay_loop_1(60);
		while(ADCSRA&_BV(ADSC))
  74:	36 9b       	sbis	0x06, 6	; 6
  76:	05 c0       	rjmp	.+10     	; 0x82

/* 8-bit count, 3 cycles/loop */
static inline void
_delay_loop_1(unsigned char __count)
{
  78:	8c e3       	ldi	r24, 0x3C	; 60
	asm volatile (
  7a:	8a 95       	dec	r24
  7c:	f1 f7       	brne	.-4      	; 0x7a
  7e:	36 99       	sbic	0x06, 6	; 6
  80:	fb cf       	rjmp	.-10     	; 0x78
			_delay_loop_1(60);
		ret=ADCL;
  82:	84 b1       	in	r24, 0x04	; 4
  84:	68 2f       	mov	r22, r24
  86:	77 27       	eor	r23, r23
		ret|=(uint)(ADCH<<8);
  88:	85 b1       	in	r24, 0x05	; 5
  8a:	99 27       	eor	r25, r25
  8c:	98 2f       	mov	r25, r24
  8e:	88 27       	eor	r24, r24
  90:	86 2b       	or	r24, r22
  92:	97 2b       	or	r25, r23
		g_aAdValue[i]=ret;
  94:	81 93       	st	Z+, r24
  96:	91 93       	st	Z+, r25
  98:	4f 5f       	subi	r20, 0xFF	; 255
  9a:	48 30       	cpi	r20, 0x08	; 8
  9c:	38 f3       	brcs	.-50     	; 0x6c
	}
	ret=0;
  9e:	60 e0       	ldi	r22, 0x00	; 0
  a0:	70 e0       	ldi	r23, 0x00	; 0
	for(i=1;i<8;i++)
  a2:	41 e0       	ldi	r20, 0x01	; 1
  a4:	e0 e7       	ldi	r30, 0x70	; 112
  a6:	f0 e0       	ldi	r31, 0x00	; 0
		ret+=g_aAdValue[i];
  a8:	81 91       	ld	r24, Z+
  aa:	91 91       	ld	r25, Z+
  ac:	68 0f       	add	r22, r24
  ae:	79 1f       	adc	r23, r25
  b0:	4f 5f       	subi	r20, 0xFF	; 255
  b2:	48 30       	cpi	r20, 0x08	; 8
  b4:	c8 f3       	brcs	.-14     	; 0xa8
	
	//找到最大和最小值索引	
	ret/=7;
  b6:	cb 01       	movw	r24, r22
  b8:	67 e0       	ldi	r22, 0x07	; 7
  ba:	70 e0       	ldi	r23, 0x00	; 0
  bc:	cd d5       	rcall	.+2970   	; 0xc58
	max_id=min_id=1;
  be:	b1 e0       	ldi	r27, 0x01	; 1
  c0:	cb 2f       	mov	r28, r27
	max_value=min_value=0;
  c2:	50 e0       	ldi	r21, 0x00	; 0
  c4:	a5 2f       	mov	r26, r21
	for(i=1;i<8;i++)
  c6:	4b 2f       	mov	r20, r27
  c8:	e0 e7       	ldi	r30, 0x70	; 112
  ca:	f0 e0       	ldi	r31, 0x00	; 0
	{
		if(g_aAdValue[i]>ret)
  cc:	20 81       	ld	r18, Z
  ce:	31 81       	ldd	r19, Z+1	; 0x01
  d0:	62 17       	cp	r22, r18
  d2:	73 07       	cpc	r23, r19
  d4:	58 f4       	brcc	.+22     	; 0xec
		{
			if(g_aAdValue[i]-ret>max_value)
  d6:	26 1b       	sub	r18, r22
  d8:	37 0b       	sbc	r19, r23
  da:	8a 2f       	mov	r24, r26
  dc:	99 27       	eor	r25, r25
  de:	82 17       	cp	r24, r18
  e0:	93 07       	cpc	r25, r19
  e2:	88 f4       	brcc	.+34     	; 0x106
			{
				max_value=g_aAdValue[i]-ret;
  e4:	a0 81       	ld	r26, Z
  e6:	a6 1b       	sub	r26, r22
				max_id=i;
  e8:	c4 2f       	mov	r28, r20
  ea:	0d c0       	rjmp	.+26     	; 0x106
			}
		}
		else
		{
			if(ret-g_aAdValue[i]>min_value)
  ec:	cb 01       	movw	r24, r22
  ee:	82 1b       	sub	r24, r18
  f0:	93 0b       	sbc	r25, r19
  f2:	9c 01       	movw	r18, r24
  f4:	85 2f       	mov	r24, r21
  f6:	99 27       	eor	r25, r25
  f8:	82 17       	cp	r24, r18
  fa:	93 07       	cpc	r25, r19
  fc:	20 f4       	brcc	.+8      	; 0x106
			{
				min_value=ret-g_aAdValue[i];
  fe:	80 81       	ld	r24, Z
 100:	56 2f       	mov	r21, r22
 102:	58 1b       	sub	r21, r24
				min_id=i;
 104:	b4 2f       	mov	r27, r20
 106:	4f 5f       	subi	r20, 0xFF	; 255
 108:	32 96       	adiw	r30, 0x02	; 2
 10a:	48 30       	cpi	r20, 0x08	; 8
 10c:	f8 f2       	brcs	.-66     	; 0xcc
			}
		}
	}
	
	//去掉第一个和最大最小值后的平均值
	ret=0;
 10e:	60 e0       	ldi	r22, 0x00	; 0
 110:	70 e0       	ldi	r23, 0x00	; 0
	for(i=1;i<8;i++)
 112:	41 e0       	ldi	r20, 0x01	; 1
 114:	e0 e7       	ldi	r30, 0x70	; 112
 116:	f0 e0       	ldi	r31, 0x00	; 0
	{
		if((i!=min_id)&&(i!=max_id))
 118:	4b 17       	cp	r20, r27
 11a:	31 f0       	breq	.+12     	; 0x128
 11c:	4c 17       	cp	r20, r28
 11e:	21 f0       	breq	.+8      	; 0x128
			ret+=g_aAdValue[i];     
 120:	80 81       	ld	r24, Z
 122:	91 81       	ldd	r25, Z+1	; 0x01
 124:	68 0f       	add	r22, r24
 126:	79 1f       	adc	r23, r25
 128:	4f 5f       	subi	r20, 0xFF	; 255
 12a:	32 96       	adiw	r30, 0x02	; 2
 12c:	48 30       	cpi	r20, 0x08	; 8
 12e:	a0 f3       	brcs	.-24     	; 0x118
	}
	if(min_id!=max_id)
 130:	bc 17       	cp	r27, r28
 132:	21 f0       	breq	.+8      	; 0x13c
		ret/=5;
 134:	cb 01       	movw	r24, r22
 136:	65 e0       	ldi	r22, 0x05	; 5
 138:	70 e0       	ldi	r23, 0x00	; 0
 13a:	03 c0       	rjmp	.+6      	; 0x142
	else  
		ret/=6;
 13c:	cb 01       	movw	r24, r22
 13e:	66 e0       	ldi	r22, 0x06	; 6
 140:	70 e0       	ldi	r23, 0x00	; 0
 142:	8a d5       	rcall	.+2836   	; 0xc58

	ADCSRA=0;//关闭ADC
 144:	16 b8       	out	0x06, r1	; 6
	
	return ret;
}
 146:	cb 01       	movw	r24, r22
 148:	cf 91       	pop	r28
 14a:	08 95       	ret

0000014c <main>:

int main(void)
{
 14c:	ce e5       	ldi	r28, 0x5E	; 94
 14e:	d4 e0       	ldi	r29, 0x04	; 4
 150:	de bf       	out	0x3e, r29	; 62
 152:	cd bf       	out	0x3d, r28	; 61
	uchar i;
	IoInit();
 154:	2f d0       	rcall	.+94     	; 0x1b4
	
	while(1)
	{
		scanf("%c",&i);
 156:	ce 01       	movw	r24, r28
 158:	01 96       	adiw	r24, 0x01	; 1
 15a:	9f 93       	push	r25
 15c:	8f 93       	push	r24
 15e:	80 e6       	ldi	r24, 0x60	; 96
 160:	90 e0       	ldi	r25, 0x00	; 0
 162:	9f 93       	push	r25
 164:	8f 93       	push	r24
 166:	17 d4       	rcall	.+2094   	; 0x996
		if(i=='c')
 168:	89 81       	ldd	r24, Y+1	; 0x01
 16a:	0f 90       	pop	r0
 16c:	0f 90       	pop	r0
 16e:	0f 90       	pop	r0
 170:	0f 90       	pop	r0
 172:	83 36       	cpi	r24, 0x63	; 99
 174:	81 f7       	brne	.-32     	; 0x156
			printf("%d\n",AdcConvert());
 176:	72 df       	rcall	.-284    	; 0x5c
 178:	9f 93       	push	r25
 17a:	8f 93       	push	r24
 17c:	83 e6       	ldi	r24, 0x63	; 99
 17e:	90 e0       	ldi	r25, 0x00	; 0
 180:	9f 93       	push	r25
 182:	8f 93       	push	r24
 184:	f4 d3       	rcall	.+2024   	; 0x96e
 186:	0f 90       	pop	r0
 188:	0f 90       	pop	r0
 18a:	0f 90       	pop	r0
 18c:	0f 90       	pop	r0
 18e:	e3 cf       	rjmp	.-58     	; 0x156

00000190 <usart_putchar>:
#include <stdio.h>

//uart写一字节数据
int usart_putchar(char c)
{
 190:	cf 93       	push	r28
 192:	c8 2f       	mov	r28, r24
	if(c=='\n')
 194:	8a 30       	cpi	r24, 0x0A	; 10
 196:	11 f4       	brne	.+4      	; 0x19c
		usart_putchar('\r');
 198:	8d e0       	ldi	r24, 0x0D	; 13
 19a:	fa df       	rcall	.-12     	; 0x190
	loop_until_bit_is_set(UCSRA,UDRE);
 19c:	5d 9b       	sbis	0x0b, 5	; 11
 19e:	fe cf       	rjmp	.-4      	; 0x19c
	UDR=c;
 1a0:	cc b9       	out	0x0c, r28	; 12
	return 0;
}
 1a2:	80 e0       	ldi	r24, 0x00	; 0
 1a4:	90 e0       	ldi	r25, 0x00	; 0
 1a6:	cf 91       	pop	r28
 1a8:	08 95       	ret

000001aa <usart_getchar>:
//uart读一字节数据
int usart_getchar(void)
{
	loop_until_bit_is_set(UCSRA,RXC);
 1aa:	5f 9b       	sbis	0x0b, 7	; 11
 1ac:	fe cf       	rjmp	.-4      	; 0x1aa
	return UDR;
 1ae:	8c b1       	in	r24, 0x0c	; 12
 1b0:	99 27       	eor	r25, r25
}
 1b2:	08 95       	ret

000001b4 <IoInit>:

void IoInit(void)
{
	//初始化uart
	UCSRB=_BV(RXEN)|_BV(TXEN);/*(1<<RXCIE)|(1<<TXCIE)|*/
 1b4:	88 e1       	ldi	r24, 0x18	; 24
 1b6:	8a b9       	out	0x0a, r24	; 10
	UBRRL=25;	//9600 baud 6MHz:38  4MHz:25	
 1b8:	89 e1       	ldi	r24, 0x19	; 25
 1ba:	89 b9       	out	0x09, r24	; 9

⌨️ 快捷键说明

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