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

📄 main.lss

📁 AVR单片机内部AD变换 AVR内部ADC转换原理: AVR单片机内部的ADC转换为10位逐次逼近型ADC。ADC与一个8通道的模拟多路复用器连接
💻 LSS
字号:

main.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000272  00000000  00000000  00000094  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         0000000a  00800060  00000272  00000306  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000006  0080006a  0080006a  00000310  2**0
                  ALLOC
  3 .noinit       00000000  00800070  00800070  00000310  2**0
                  CONTENTS
  4 .eeprom       00000000  00810000  00810000  00000310  2**0
                  CONTENTS
  5 .stab         00000414  00000000  00000000  00000310  2**2
                  CONTENTS, READONLY, DEBUGGING
  6 .stabstr      00000591  00000000  00000000  00000724  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	0c 94 2a 00 	jmp	0x54
   4:	0c 94 45 00 	jmp	0x8a
   8:	0c 94 45 00 	jmp	0x8a
   c:	0c 94 45 00 	jmp	0x8a
  10:	0c 94 45 00 	jmp	0x8a
  14:	0c 94 45 00 	jmp	0x8a
  18:	0c 94 45 00 	jmp	0x8a
  1c:	0c 94 45 00 	jmp	0x8a
  20:	0c 94 45 00 	jmp	0x8a
  24:	0c 94 45 00 	jmp	0x8a
  28:	0c 94 45 00 	jmp	0x8a
  2c:	0c 94 45 00 	jmp	0x8a
  30:	0c 94 45 00 	jmp	0x8a
  34:	0c 94 45 00 	jmp	0x8a
  38:	0c 94 7d 00 	jmp	0xfa
  3c:	0c 94 45 00 	jmp	0x8a
  40:	0c 94 45 00 	jmp	0x8a
  44:	0c 94 45 00 	jmp	0x8a
  48:	0c 94 45 00 	jmp	0x8a
  4c:	0c 94 45 00 	jmp	0x8a
  50:	0c 94 45 00 	jmp	0x8a

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:	e2 e7       	ldi	r30, 0x72	; 114
  68:	f2 e0       	ldi	r31, 0x02	; 2
  6a:	02 c0       	rjmp	.+4      	; 0x70

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

00000070 <.do_copy_data_start>:
  70:	aa 36       	cpi	r26, 0x6A	; 106
  72:	b1 07       	cpc	r27, r17
  74:	d9 f7       	brne	.-10     	; 0x6c

00000076 <__do_clear_bss>:
  76:	10 e0       	ldi	r17, 0x00	; 0
  78:	aa e6       	ldi	r26, 0x6A	; 106
  7a:	b0 e0       	ldi	r27, 0x00	; 0
  7c:	01 c0       	rjmp	.+2      	; 0x80

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

00000080 <.do_clear_bss_start>:
  80:	a0 37       	cpi	r26, 0x70	; 112
  82:	b1 07       	cpc	r27, r17
  84:	e1 f7       	brne	.-8      	; 0x7e
  86:	0c 94 e6 00 	jmp	0x1cc

0000008a <__bad_interrupt>:
  8a:	0c 94 00 00 	jmp	0x0

0000008e <delay>:
uint8_t ledbuff[6];                              /*显示缓冲*/
void delay(uint16_t time)                        /*延时*/
{
   while(time>0)
   time--;
  8e:	00 97       	sbiw	r24, 0x00	; 0
  90:	11 f0       	breq	.+4      	; 0x96
  92:	01 97       	sbiw	r24, 0x01	; 1
  94:	fc cf       	rjmp	.-8      	; 0x8e
  96:	08 95       	ret

00000098 <leddisplay>:
 }
void leddisplay(void)                            /*数码管显示函数*/
{
  98:	cf 92       	push	r12
  9a:	df 92       	push	r13
  9c:	ff 92       	push	r15
  9e:	0f 93       	push	r16
  a0:	1f 93       	push	r17
  a2:	cf 93       	push	r28
  a4:	df 93       	push	r29
  a6:	9a e6       	ldi	r25, 0x6A	; 106
  a8:	c9 2e       	mov	r12, r25
  aa:	90 e0       	ldi	r25, 0x00	; 0
  ac:	d9 2e       	mov	r13, r25
  ae:	c0 e0       	ldi	r28, 0x00	; 0
  b0:	d0 e0       	ldi	r29, 0x00	; 0
  b2:	85 e0       	ldi	r24, 0x05	; 5
  b4:	f8 2e       	mov	r15, r24
  uint8_t i;
  for (i=0;i<6;i++)
  {   
   PORTB=ledbuff[i];                           /*需要显示缓冲区数据送到PORTB*/
  b6:	f6 01       	movw	r30, r12
  b8:	81 91       	ld	r24, Z+
  ba:	6f 01       	movw	r12, r30
  bc:	88 bb       	out	0x18, r24	; 24
   PORTD=~(1<<i);                                      
  be:	01 e0       	ldi	r16, 0x01	; 1
  c0:	10 e0       	ldi	r17, 0x00	; 0
  c2:	0c 2e       	mov	r0, r28
  c4:	02 c0       	rjmp	.+4      	; 0xca
  c6:	00 0f       	add	r16, r16
  c8:	11 1f       	adc	r17, r17
  ca:	0a 94       	dec	r0
  cc:	e2 f7       	brpl	.-8      	; 0xc6
  ce:	80 2f       	mov	r24, r16
  d0:	80 95       	com	r24
  d2:	82 bb       	out	0x12, r24	; 18
   delay(10);                                   /*每一位显示保持一定时间*/
  d4:	8a e0       	ldi	r24, 0x0A	; 10
  d6:	90 e0       	ldi	r25, 0x00	; 0
  d8:	0e 94 47 00 	call	0x8e
   PORTD|=(1<<i);                              /*关 闭显示*/  
  dc:	82 b3       	in	r24, 0x12	; 18
  de:	80 2b       	or	r24, r16
  e0:	82 bb       	out	0x12, r24	; 18
  e2:	fa 94       	dec	r15
  e4:	21 96       	adiw	r28, 0x01	; 1
  e6:	f7 fe       	sbrs	r15, 7
  e8:	e6 cf       	rjmp	.-52     	; 0xb6
  ea:	df 91       	pop	r29
  ec:	cf 91       	pop	r28
  ee:	1f 91       	pop	r17
  f0:	0f 91       	pop	r16
  f2:	ff 90       	pop	r15
  f4:	df 90       	pop	r13
  f6:	cf 90       	pop	r12
  f8:	08 95       	ret

000000fa <__vector_14>:
   }
} 
INTERRUPT(SIG_ADC)                             /*AD变换完成中断处理程序*/
{  
  fa:	78 94       	sei
  fc:	1f 92       	push	r1
  fe:	0f 92       	push	r0
 100:	0f b6       	in	r0, 0x3f	; 63
 102:	0f 92       	push	r0
 104:	11 24       	eor	r1, r1
 106:	2f 93       	push	r18
 108:	3f 93       	push	r19
 10a:	4f 93       	push	r20
 10c:	5f 93       	push	r21
 10e:	6f 93       	push	r22
 110:	7f 93       	push	r23
 112:	8f 93       	push	r24
 114:	9f 93       	push	r25
 116:	af 93       	push	r26
 118:	bf 93       	push	r27
 11a:	cf 93       	push	r28
 11c:	df 93       	push	r29
 11e:	ef 93       	push	r30
 120:	ff 93       	push	r31
  unsigned int i,temp;
  unsigned int lo_val, hi_val;					/*转换寄存器的低位与高位*/
  unsigned long val;
  lo_val=ADCL;                                    /*读出AD变换结果*/
 122:	84 b1       	in	r24, 0x04	; 4
 124:	28 2f       	mov	r18, r24
 126:	33 27       	eor	r19, r19
  hi_val=ADCH;
 128:	85 b1       	in	r24, 0x05	; 5
 12a:	99 27       	eor	r25, r25
  val=(((unsigned long)hi_val)<<8)|((unsigned long)lo_val); /*低8位和高8位数据合成16位*/
 12c:	aa 27       	eor	r26, r26
 12e:	bb 27       	eor	r27, r27
 130:	ba 2f       	mov	r27, r26
 132:	a9 2f       	mov	r26, r25
 134:	98 2f       	mov	r25, r24
 136:	88 27       	eor	r24, r24
 138:	44 27       	eor	r20, r20
 13a:	55 27       	eor	r21, r21
 13c:	82 2b       	or	r24, r18
 13e:	93 2b       	or	r25, r19
 140:	a4 2b       	or	r26, r20
 142:	b5 2b       	or	r27, r21
  temp=(unsigned int)((unsigned long)(val*vref)/1024);      /*AD变换结果转换为电压值*/
 144:	bc 01       	movw	r22, r24
 146:	cd 01       	movw	r24, r26
 148:	20 ef       	ldi	r18, 0xF0	; 240
 14a:	31 e0       	ldi	r19, 0x01	; 1
 14c:	40 e0       	ldi	r20, 0x00	; 0
 14e:	50 e0       	ldi	r21, 0x00	; 0
 150:	0e 94 06 01 	call	0x20c
 154:	dc 01       	movw	r26, r24
 156:	cb 01       	movw	r24, r22
 158:	2a e0       	ldi	r18, 0x0A	; 10
 15a:	b6 95       	lsr	r27
 15c:	a7 95       	ror	r26
 15e:	97 95       	ror	r25
 160:	87 95       	ror	r24
 162:	2a 95       	dec	r18
 164:	d1 f7       	brne	.-12     	; 0x15a
 166:	9c 01       	movw	r18, r24
 168:	ca e6       	ldi	r28, 0x6A	; 106
 16a:	d0 e0       	ldi	r29, 0x00	; 0
  for(i=0;i<3;i++)                                    /*分位显示*/
    {
	  ledbuff[i]=ledcode[temp%10];
 16c:	c9 01       	movw	r24, r18
 16e:	6a e0       	ldi	r22, 0x0A	; 10
 170:	70 e0       	ldi	r23, 0x00	; 0
 172:	0e 94 25 01 	call	0x24a
 176:	fc 01       	movw	r30, r24
 178:	e0 5a       	subi	r30, 0xA0	; 160
 17a:	ff 4f       	sbci	r31, 0xFF	; 255
 17c:	80 81       	ld	r24, Z
 17e:	89 93       	st	Y+, r24
	  temp=temp/10;
 180:	c9 01       	movw	r24, r18
 182:	6a e0       	ldi	r22, 0x0A	; 10
 184:	70 e0       	ldi	r23, 0x00	; 0
 186:	0e 94 25 01 	call	0x24a
 18a:	9b 01       	movw	r18, r22
 18c:	80 e0       	ldi	r24, 0x00	; 0
 18e:	cc 36       	cpi	r28, 0x6C	; 108
 190:	d8 07       	cpc	r29, r24
 192:	61 f3       	breq	.-40     	; 0x16c
 194:	58 f3       	brcs	.-42     	; 0x16c
	}
  ledbuff[2]|=0x80;                                   /*显示小数点*/  
 196:	80 91 6c 00 	lds	r24, 0x006C
 19a:	80 68       	ori	r24, 0x80	; 128
 19c:	80 93 6c 00 	sts	0x006C, r24
  ADCSR|=(1<<ADSC);                               /*启动下一次AD转换 */
 1a0:	36 9a       	sbi	0x06, 6	; 6
  leddisplay();
 1a2:	0e 94 4c 00 	call	0x98
 1a6:	ff 91       	pop	r31
 1a8:	ef 91       	pop	r30
 1aa:	df 91       	pop	r29
 1ac:	cf 91       	pop	r28
 1ae:	bf 91       	pop	r27
 1b0:	af 91       	pop	r26
 1b2:	9f 91       	pop	r25
 1b4:	8f 91       	pop	r24
 1b6:	7f 91       	pop	r23
 1b8:	6f 91       	pop	r22
 1ba:	5f 91       	pop	r21
 1bc:	4f 91       	pop	r20
 1be:	3f 91       	pop	r19
 1c0:	2f 91       	pop	r18
 1c2:	0f 90       	pop	r0
 1c4:	0f be       	out	0x3f, r0	; 63
 1c6:	0f 90       	pop	r0
 1c8:	1f 90       	pop	r1
 1ca:	18 95       	reti

000001cc <main>:
}
int main( void )
{
 1cc:	cf e5       	ldi	r28, 0x5F	; 95
 1ce:	d4 e0       	ldi	r29, 0x04	; 4
 1d0:	de bf       	out	0x3e, r29	; 62
 1d2:	cd bf       	out	0x3d, r28	; 61
 DDRD=0x3f;
 1d4:	8f e3       	ldi	r24, 0x3F	; 63
 1d6:	81 bb       	out	0x11, r24	; 17
 PORTD=0xff; 
 1d8:	8f ef       	ldi	r24, 0xFF	; 255
 1da:	82 bb       	out	0x12, r24	; 18
 DDRB=0xff;
 1dc:	87 bb       	out	0x17, r24	; 23
 PORTB=0xff;                                      /*I/O口初始化*/
 1de:	88 bb       	out	0x18, r24	; 24
 1e0:	90 91 60 00 	lds	r25, 0x0060
 1e4:	ea e6       	ldi	r30, 0x6A	; 106
 1e6:	f0 e0       	ldi	r31, 0x00	; 0
 1e8:	82 e0       	ldi	r24, 0x02	; 2
 uint8_t i; 
 for(i=0;i<3;i++)                                     /*清空缓冲区数据 */
 ledbuff[i]=ledcode[0];
 1ea:	91 93       	st	Z+, r25
 1ec:	81 50       	subi	r24, 0x01	; 1
 1ee:	87 ff       	sbrs	r24, 7
 1f0:	fc cf       	rjmp	.-8      	; 0x1ea
 ledbuff[3]=0x00;                                    
 1f2:	10 92 6d 00 	sts	0x006D, r1
 ledbuff[4]=0x5e;                                     /*显示'd'*/
 1f6:	8e e5       	ldi	r24, 0x5E	; 94
 1f8:	80 93 6e 00 	sts	0x006E, r24
 ledbuff[5]=0x77;                                     /*显示'A' */
 1fc:	87 e7       	ldi	r24, 0x77	; 119
 1fe:	80 93 6f 00 	sts	0x006F, r24
 ADMUX =0x00;                                     //ADC寄存器初始化
 202:	17 b8       	out	0x07, r1	; 7
 ADCSR=(1<<ADEN)|(1<<ADSC)|(1<<ADIF)|(1<<ADIE)|0X06;      
 204:	8e ed       	ldi	r24, 0xDE	; 222
 206:	86 b9       	out	0x06, r24	; 6
 sei();
 208:	78 94       	sei
 for(;;){};
 20a:	ff cf       	rjmp	.-2      	; 0x20a

0000020c <__mulsi3>:
 20c:	62 9f       	mul	r22, r18
 20e:	d0 01       	movw	r26, r0
 210:	73 9f       	mul	r23, r19
 212:	f0 01       	movw	r30, r0
 214:	82 9f       	mul	r24, r18
 216:	e0 0d       	add	r30, r0
 218:	f1 1d       	adc	r31, r1
 21a:	64 9f       	mul	r22, r20
 21c:	e0 0d       	add	r30, r0
 21e:	f1 1d       	adc	r31, r1
 220:	92 9f       	mul	r25, r18
 222:	f0 0d       	add	r31, r0
 224:	83 9f       	mul	r24, r19
 226:	f0 0d       	add	r31, r0
 228:	74 9f       	mul	r23, r20
 22a:	f0 0d       	add	r31, r0
 22c:	65 9f       	mul	r22, r21
 22e:	f0 0d       	add	r31, r0
 230:	99 27       	eor	r25, r25
 232:	72 9f       	mul	r23, r18
 234:	b0 0d       	add	r27, r0
 236:	e1 1d       	adc	r30, r1
 238:	f9 1f       	adc	r31, r25
 23a:	63 9f       	mul	r22, r19
 23c:	b0 0d       	add	r27, r0
 23e:	e1 1d       	adc	r30, r1
 240:	f9 1f       	adc	r31, r25
 242:	bd 01       	movw	r22, r26
 244:	cf 01       	movw	r24, r30
 246:	11 24       	eor	r1, r1
 248:	08 95       	ret

0000024a <__udivmodhi4>:
 24a:	aa 1b       	sub	r26, r26
 24c:	bb 1b       	sub	r27, r27
 24e:	51 e1       	ldi	r21, 0x11	; 17
 250:	07 c0       	rjmp	.+14     	; 0x260

00000252 <__udivmodhi4_loop>:
 252:	aa 1f       	adc	r26, r26
 254:	bb 1f       	adc	r27, r27
 256:	a6 17       	cp	r26, r22
 258:	b7 07       	cpc	r27, r23
 25a:	10 f0       	brcs	.+4      	; 0x260
 25c:	a6 1b       	sub	r26, r22
 25e:	b7 0b       	sbc	r27, r23

00000260 <__udivmodhi4_ep>:
 260:	88 1f       	adc	r24, r24
 262:	99 1f       	adc	r25, r25
 264:	5a 95       	dec	r21
 266:	a9 f7       	brne	.-22     	; 0x252
 268:	80 95       	com	r24
 26a:	90 95       	com	r25
 26c:	bc 01       	movw	r22, r24
 26e:	cd 01       	movw	r24, r26
 270:	08 95       	ret

⌨️ 快捷键说明

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