📄 main.lss
字号:
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 + -