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

📄 main.lss

📁 AD592温度传感器在Atmega8L下的测量程序
💻 LSS
📖 第 1 页 / 共 4 页
字号:

main.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000c2c  00000000  00000000  00000094  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000006  00800060  00000c2c  00000cc0  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          0000001a  00800066  00800066  00000cc6  2**0
                  ALLOC
  3 .noinit       00000000  00800080  00800080  00000cc6  2**0
                  CONTENTS
  4 .eeprom       00000000  00810000  00810000  00000cc6  2**0
                  CONTENTS
  5 .debug_aranges 00000014  00000000  00000000  00000cc6  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_pubnames 00000061  00000000  00000000  00000cda  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_info   0000028b  00000000  00000000  00000d3b  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_abbrev 0000014a  00000000  00000000  00000fc6  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_line   0000028e  00000000  00000000  00001110  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_str    0000013c  00000000  00000000  0000139e  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	36 c0       	rjmp	.+108    	; 0x6e
   2:	4f c0       	rjmp	.+158    	; 0xa2
   4:	4e c0       	rjmp	.+156    	; 0xa2
   6:	4d c0       	rjmp	.+154    	; 0xa2
   8:	4c c0       	rjmp	.+152    	; 0xa2
   a:	4b c0       	rjmp	.+150    	; 0xa2
   c:	4a c0       	rjmp	.+148    	; 0xa2
   e:	49 c0       	rjmp	.+146    	; 0xa2
  10:	48 c0       	rjmp	.+144    	; 0xa2
  12:	47 c0       	rjmp	.+142    	; 0xa2
  14:	46 c0       	rjmp	.+140    	; 0xa2
  16:	45 c0       	rjmp	.+138    	; 0xa2
  18:	44 c0       	rjmp	.+136    	; 0xa2
  1a:	43 c0       	rjmp	.+134    	; 0xa2
  1c:	42 c0       	rjmp	.+132    	; 0xa2
  1e:	41 c0       	rjmp	.+130    	; 0xa2
  20:	40 c0       	rjmp	.+128    	; 0xa2
  22:	3f c0       	rjmp	.+126    	; 0xa2
  24:	3e c0       	rjmp	.+124    	; 0xa2

00000026 <__ctors_end>:
  26:	43 75       	andi	r20, 0x53	; 83
  28:	72 72       	andi	r23, 0x22	; 34
  2a:	65 6e       	ori	r22, 0xE5	; 229
  2c:	74 20       	and	r7, r4
  2e:	54 65       	ori	r21, 0x54	; 84
  30:	6d 70       	andi	r22, 0x0D	; 13
  32:	65 72       	andi	r22, 0x25	; 37
  34:	61 74       	andi	r22, 0x41	; 65
  36:	75 72       	andi	r23, 0x25	; 37
  38:	65 3a       	cpi	r22, 0xA5	; 165
  3a:	20 25       	eor	r18, r0
  3c:	64 2e       	mov	r6, r20
  3e:	35 20       	and	r3, r5
  40:	64 65       	ori	r22, 0x54	; 84
  42:	67 72       	andi	r22, 0x27	; 39
  44:	65 65       	ori	r22, 0x55	; 85
  46:	73 2e       	mov	r7, r19
  48:	0d 0a       	sbc	r0, r29
	...

0000004b <__c.1>:
  4b:	43 75 72 72 65 6e 74 20 54 65 6d 70 65 72 61 74     Current Temperat
  5b:	75 72 65 3a 20 25 64 20 64 65 67 72 65 65 73 2e     ure: %d degrees.
  6b:	0d 0a 00                                            ...

0000006e <__init>:
  6e:	11 24       	eor	r1, r1
  70:	1f be       	out	0x3f, r1	; 63
  72:	cf e5       	ldi	r28, 0x5F	; 95
  74:	d4 e0       	ldi	r29, 0x04	; 4
  76:	de bf       	out	0x3e, r29	; 62
  78:	cd bf       	out	0x3d, r28	; 61

0000007a <__do_copy_data>:
  7a:	10 e0       	ldi	r17, 0x00	; 0
  7c:	a0 e6       	ldi	r26, 0x60	; 96
  7e:	b0 e0       	ldi	r27, 0x00	; 0
  80:	ec e2       	ldi	r30, 0x2C	; 44
  82:	fc e0       	ldi	r31, 0x0C	; 12
  84:	02 c0       	rjmp	.+4      	; 0x8a

00000086 <.do_copy_data_loop>:
  86:	05 90       	lpm	r0, Z+
  88:	0d 92       	st	X+, r0

0000008a <.do_copy_data_start>:
  8a:	a6 36       	cpi	r26, 0x66	; 102
  8c:	b1 07       	cpc	r27, r17
  8e:	d9 f7       	brne	.-10     	; 0x86

00000090 <__do_clear_bss>:
  90:	10 e0       	ldi	r17, 0x00	; 0
  92:	a6 e6       	ldi	r26, 0x66	; 102
  94:	b0 e0       	ldi	r27, 0x00	; 0
  96:	01 c0       	rjmp	.+2      	; 0x9a

00000098 <.do_clear_bss_loop>:
  98:	1d 92       	st	X+, r1

0000009a <.do_clear_bss_start>:
  9a:	a0 38       	cpi	r26, 0x80	; 128
  9c:	b1 07       	cpc	r27, r17
  9e:	e1 f7       	brne	.-8      	; 0x98
  a0:	a3 c0       	rjmp	.+326    	; 0x1e8

000000a2 <__bad_interrupt>:
  a2:	ae cf       	rjmp	.-164    	; 0x0

000000a4 <delayms>:

void delayms(uint t)
{
     uint i;
	 for(i=0;i<t;i++)
  a4:	00 97       	sbiw	r24, 0x00	; 0
  a6:	41 f0       	breq	.+16     	; 0xb8
  a8:	9c 01       	movw	r18, r24
    milliseconds can be achieved.
 */
static __inline__ void
_delay_loop_2(uint16_t __count)
{
  aa:	88 ee       	ldi	r24, 0xE8	; 232
  ac:	93 e0       	ldi	r25, 0x03	; 3
	__asm__ volatile (
  ae:	01 97       	sbiw	r24, 0x01	; 1
  b0:	f1 f7       	brne	.-4      	; 0xae
  b2:	21 50       	subi	r18, 0x01	; 1
  b4:	30 40       	sbci	r19, 0x00	; 0
  b6:	c9 f7       	brne	.-14     	; 0xaa
  b8:	08 95       	ret

000000ba <usart_putchar>:
	     _delay_loop_2(1000);
}

//////////////////////////
/////////串口部分/////////
/////////////////////////
int usart_putchar(char ch)
{
  ba:	cf 93       	push	r28
  bc:	c8 2f       	mov	r28, r24
	if(ch=='\n')
  be:	8a 30       	cpi	r24, 0x0A	; 10
  c0:	11 f4       	brne	.+4      	; 0xc6
		usart_putchar('\r');
  c2:	8d e0       	ldi	r24, 0x0D	; 13
  c4:	fa df       	rcall	.-12     	; 0xba
	loop_until_bit_is_set(UCSRA,UDRE);
  c6:	5d 9b       	sbis	0x0b, 5	; 11
  c8:	fe cf       	rjmp	.-4      	; 0xc6
	UDR=ch;
  ca:	cc b9       	out	0x0c, r28	; 12
	return 0;
}
  cc:	80 e0       	ldi	r24, 0x00	; 0
  ce:	90 e0       	ldi	r25, 0x00	; 0
  d0:	cf 91       	pop	r28
  d2:	08 95       	ret

000000d4 <usart_getchar>:

int usart_getchar(void)
{
	loop_until_bit_is_set(UCSRA,RXC);
  d4:	5f 9b       	sbis	0x0b, 7	; 11
  d6:	fe cf       	rjmp	.-4      	; 0xd4
	return UDR;
  d8:	8c b1       	in	r24, 0x0c	; 12
}
  da:	99 27       	eor	r25, r25
  dc:	08 95       	ret

000000de <IoInit>:
////

void IoInit(void)
{

	PORTC=0x00;
  de:	15 ba       	out	0x15, r1	; 21
	DDRC=0x00;
  e0:	14 ba       	out	0x14, r1	; 20
	
	//uart初始化
	UCSRB=_BV(RXEN)|_BV(TXEN);
  e2:	88 e1       	ldi	r24, 0x18	; 24
  e4:	8a b9       	out	0x0a, r24	; 10
	UBRRL=25;				//9600bps
  e6:	89 e1       	ldi	r24, 0x19	; 25
  e8:	89 b9       	out	0x09, r24	; 9
	
	//IO流UART连接
	fdevopen(usart_putchar,usart_getchar,0);
  ea:	40 e0       	ldi	r20, 0x00	; 0
  ec:	50 e0       	ldi	r21, 0x00	; 0
  ee:	6a e6       	ldi	r22, 0x6A	; 106
  f0:	70 e0       	ldi	r23, 0x00	; 0
  f2:	8d e5       	ldi	r24, 0x5D	; 93
  f4:	90 e0       	ldi	r25, 0x00	; 0
  f6:	a5 d0       	rcall	.+330    	; 0x242
  f8:	08 95       	ret

000000fa <GetAdc>:
}


int GetAdc()
{
  fa:	cf 93       	push	r28
	
	uchar i;
	uint ret;
	uchar max_id,min_id,max_value,min_value;
	
	ADMUX=0XC2;				//内部2.56V参考电压
  fc:	82 ec       	ldi	r24, 0xC2	; 194
  fe:	87 b9       	out	0x07, r24	; 7
	ADCSRA=_BV(ADEN);
 100:	80 e8       	ldi	r24, 0x80	; 128
 102:	86 b9       	out	0x06, r24	; 6
 104:	47 e0       	ldi	r20, 0x07	; 7
 106:	e6 e6       	ldi	r30, 0x66	; 102
 108:	f0 e0       	ldi	r31, 0x00	; 0
	
	for (i=0;i<8;i++)
	{	
		ADCSRA|=_BV(ADSC);
 10a:	36 9a       	sbi	0x06, 6	; 6
    can be achieved.
*/
static __inline__ void
_delay_loop_1(uint8_t __count)
{
 10c:	8c e3       	ldi	r24, 0x3C	; 60
	__asm__ volatile (
 10e:	8a 95       	dec	r24
 110:	f1 f7       	brne	.-4      	; 0x10e
 112:	36 9b       	sbis	0x06, 6	; 6
 114:	05 c0       	rjmp	.+10     	; 0x120
 116:	8c e3       	ldi	r24, 0x3C	; 60
 118:	8a 95       	dec	r24
 11a:	f1 f7       	brne	.-4      	; 0x118
 11c:	36 99       	sbic	0x06, 6	; 6
 11e:	fb cf       	rjmp	.-10     	; 0x116
		_delay_loop_1(60);
		while(ADCSRA&_BV(ADSC))
			_delay_loop_1(60);
		ret=ADCL;
 120:	84 b1       	in	r24, 0x04	; 4
 122:	68 2f       	mov	r22, r24
 124:	77 27       	eor	r23, r23
		ret|=(uint)(ADCH<<8);
 126:	85 b1       	in	r24, 0x05	; 5
 128:	99 27       	eor	r25, r25
 12a:	98 2f       	mov	r25, r24
 12c:	88 27       	eor	r24, r24
 12e:	86 2b       	or	r24, r22
 130:	97 2b       	or	r25, r23
		AdConvertBuff[i]=ret;	//暂存数据
 132:	81 93       	st	Z+, r24
 134:	91 93       	st	Z+, r25
 136:	41 50       	subi	r20, 0x01	; 1
 138:	47 ff       	sbrs	r20, 7
 13a:	e7 cf       	rjmp	.-50     	; 0x10a
	}
	
	ret=0;
 13c:	60 e0       	ldi	r22, 0x00	; 0
 13e:	70 e0       	ldi	r23, 0x00	; 0
 140:	46 e0       	ldi	r20, 0x06	; 6
 142:	e8 e6       	ldi	r30, 0x68	; 104
 144:	f0 e0       	ldi	r31, 0x00	; 0
	
	for(i=1;i<8;i++)
	{
		ret+=AdConvertBuff[i];
 146:	81 91       	ld	r24, Z+
 148:	91 91       	ld	r25, Z+
 14a:	68 0f       	add	r22, r24
 14c:	79 1f       	adc	r23, r25
 14e:	41 50       	subi	r20, 0x01	; 1
 150:	47 ff       	sbrs	r20, 7
 152:	f9 cf       	rjmp	.-14     	; 0x146
	}
	
	ret/=7;						//取后7个数据平均数
 154:	cb 01       	movw	r24, r22
 156:	67 e0       	ldi	r22, 0x07	; 7
 158:	70 e0       	ldi	r23, 0x00	; 0
 15a:	fb d4       	rcall	.+2550   	; 0xb52
	max_id=min_id=1;
 15c:	b1 e0       	ldi	r27, 0x01	; 1
 15e:	cb 2f       	mov	r28, r27
	max_value=min_value=0;
 160:	a0 e0       	ldi	r26, 0x00	; 0
 162:	5a 2f       	mov	r21, r26
	
	
	for(i=1;i<8;i++)
 164:	4b 2f       	mov	r20, r27
 166:	e8 e6       	ldi	r30, 0x68	; 104
 168:	f0 e0       	ldi	r31, 0x00	; 0
	{
		if(AdConvertBuff[i]>ret)			//寻找最大值
 16a:	20 81       	ld	r18, Z
 16c:	31 81       	ldd	r19, Z+1	; 0x01
 16e:	62 17       	cp	r22, r18
 170:	73 07       	cpc	r23, r19
 172:	58 f4       	brcc	.+22     	; 0x18a
		{
			if(AdConvertBuff[i]-ret>max_value)
 174:	26 1b       	sub	r18, r22
 176:	37 0b       	sbc	r19, r23
 178:	85 2f       	mov	r24, r21
 17a:	99 27       	eor	r25, r25
 17c:	82 17       	cp	r24, r18
 17e:	93 07       	cpc	r25, r19
 180:	88 f4       	brcc	.+34     	; 0x1a4
			{
				max_value=AdConvertBuff[i]-ret;
 182:	50 81       	ld	r21, Z
 184:	56 1b       	sub	r21, r22
				max_id=i;
 186:	c4 2f       	mov	r28, r20
 188:	0d c0       	rjmp	.+26     	; 0x1a4
			}
		}
		else								//寻找最小值
		{
			if(ret-AdConvertBuff[i]>min_value)
 18a:	cb 01       	movw	r24, r22
 18c:	82 1b       	sub	r24, r18
 18e:	93 0b       	sbc	r25, r19
 190:	9c 01       	movw	r18, r24
 192:	8a 2f       	mov	r24, r26
 194:	99 27       	eor	r25, r25
 196:	82 17       	cp	r24, r18
 198:	93 07       	cpc	r25, r19
 19a:	20 f4       	brcc	.+8      	; 0x1a4
			{
				min_value=ret-AdConvertBuff[i];
 19c:	80 81       	ld	r24, Z
 19e:	a6 2f       	mov	r26, r22
 1a0:	a8 1b       	sub	r26, r24
				min_id=i;
 1a2:	b4 2f       	mov	r27, r20
 1a4:	4f 5f       	subi	r20, 0xFF	; 255
 1a6:	32 96       	adiw	r30, 0x02	; 2
 1a8:	48 30       	cpi	r20, 0x08	; 8
 1aa:	f8 f2       	brcs	.-66     	; 0x16a
			}
		}
	}
	
	//抛弃第一个不可靠数据、以及上面找到的最大最小值,计算其余数据的平均值
	ret=0;
 1ac:	60 e0       	ldi	r22, 0x00	; 0
 1ae:	70 e0       	ldi	r23, 0x00	; 0
	for(i=1;i<8;i++)
 1b0:	41 e0       	ldi	r20, 0x01	; 1
 1b2:	e8 e6       	ldi	r30, 0x68	; 104
 1b4:	f0 e0       	ldi	r31, 0x00	; 0
	{
		if((i!=max_id)&&(i!=min_id))
 1b6:	4c 17       	cp	r20, r28
 1b8:	31 f0       	breq	.+12     	; 0x1c6
 1ba:	4b 17       	cp	r20, r27
 1bc:	21 f0       	breq	.+8      	; 0x1c6
		{
			ret+=AdConvertBuff[i];
 1be:	80 81       	ld	r24, Z
 1c0:	91 81       	ldd	r25, Z+1	; 0x01
 1c2:	68 0f       	add	r22, r24
 1c4:	79 1f       	adc	r23, r25
 1c6:	4f 5f       	subi	r20, 0xFF	; 255
 1c8:	32 96       	adiw	r30, 0x02	; 2
 1ca:	48 30       	cpi	r20, 0x08	; 8
 1cc:	a0 f3       	brcs	.-24     	; 0x1b6
		}
	}
	
	//考虑到可能最大最小值为同一数据
	if(max_id!=min_id)
 1ce:	cb 17       	cp	r28, r27
 1d0:	21 f0       	breq	.+8      	; 0x1da
	{
		ret/=5;
 1d2:	cb 01       	movw	r24, r22
 1d4:	65 e0       	ldi	r22, 0x05	; 5
 1d6:	70 e0       	ldi	r23, 0x00	; 0
 1d8:	03 c0       	rjmp	.+6      	; 0x1e0
	}
	else
	{
		ret/=6;
 1da:	cb 01       	movw	r24, r22
 1dc:	66 e0       	ldi	r22, 0x06	; 6
 1de:	70 e0       	ldi	r23, 0x00	; 0
 1e0:	b8 d4       	rcall	.+2416   	; 0xb52
	}
	
	return ret;	
}
 1e2:	cb 01       	movw	r24, r22
 1e4:	cf 91       	pop	r28
 1e6:	08 95       	ret

000001e8 <main>:

void main()
{
 1e8:	cf e5       	ldi	r28, 0x5F	; 95
 1ea:	d4 e0       	ldi	r29, 0x04	; 4
 1ec:	de bf       	out	0x3e, r29	; 62
 1ee:	cd bf       	out	0x3d, r28	; 61
	uchar i;
	int ret;
	IoInit();
 1f0:	76 df       	rcall	.-276    	; 0xde
	delayms(10);
 1f2:	8a e0       	ldi	r24, 0x0A	; 10
 1f4:	90 e0       	ldi	r25, 0x00	; 0
 1f6:	56 df       	rcall	.-340    	; 0xa4
	
	while(1)
	{
		ret=GetAdc();

⌨️ 快捷键说明

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