📄 main.lss
字号:
main.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00000474 00000000 00000000 00000094 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 0000006c 00800060 00000474 00000508 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 0000000a 008000cc 008000cc 00000574 2**0
ALLOC
3 .noinit 00000000 008000d6 008000d6 00000574 2**0
CONTENTS
4 .eeprom 00000000 00810000 00810000 00000574 2**0
CONTENTS
5 .debug_aranges 00000014 00000000 00000000 00000574 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_pubnames 00000187 00000000 00000000 00000588 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_info 00000514 00000000 00000000 0000070f 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_abbrev 00000187 00000000 00000000 00000c23 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_line 0000060d 00000000 00000000 00000daa 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_str 000001fc 00000000 00000000 000013b7 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 10 c0 rjmp .+32 ; 0x22
2: 29 c0 rjmp .+82 ; 0x56
4: 28 c0 rjmp .+80 ; 0x56
6: 27 c0 rjmp .+78 ; 0x56
8: 26 c0 rjmp .+76 ; 0x56
a: 25 c0 rjmp .+74 ; 0x56
c: 24 c0 rjmp .+72 ; 0x56
e: 23 c0 rjmp .+70 ; 0x56
10: 22 c0 rjmp .+68 ; 0x56
12: 21 c0 rjmp .+66 ; 0x56
14: 20 c0 rjmp .+64 ; 0x56
16: 1f c0 rjmp .+62 ; 0x56
18: 1e c0 rjmp .+60 ; 0x56
1a: 1d c0 rjmp .+58 ; 0x56
1c: 1c c0 rjmp .+56 ; 0x56
1e: 1b c0 rjmp .+54 ; 0x56
20: 1a c0 rjmp .+52 ; 0x56
00000022 <__ctors_end>:
22: 11 24 eor r1, r1
24: 1f be out 0x3f, r1 ; 63
26: cf e5 ldi r28, 0x5F ; 95
28: d2 e0 ldi r29, 0x02 ; 2
2a: de bf out 0x3e, r29 ; 62
2c: cd bf out 0x3d, r28 ; 61
0000002e <__do_copy_data>:
2e: 10 e0 ldi r17, 0x00 ; 0
30: a0 e6 ldi r26, 0x60 ; 96
32: b0 e0 ldi r27, 0x00 ; 0
34: e4 e7 ldi r30, 0x74 ; 116
36: f4 e0 ldi r31, 0x04 ; 4
38: 02 c0 rjmp .+4 ; 0x3e
0000003a <.do_copy_data_loop>:
3a: 05 90 lpm r0, Z+
3c: 0d 92 st X+, r0
0000003e <.do_copy_data_start>:
3e: ac 3c cpi r26, 0xCC ; 204
40: b1 07 cpc r27, r17
42: d9 f7 brne .-10 ; 0x3a
00000044 <__do_clear_bss>:
44: 10 e0 ldi r17, 0x00 ; 0
46: ac ec ldi r26, 0xCC ; 204
48: b0 e0 ldi r27, 0x00 ; 0
4a: 01 c0 rjmp .+2 ; 0x4e
0000004c <.do_clear_bss_loop>:
4c: 1d 92 st X+, r1
0000004e <.do_clear_bss_start>:
4e: a6 3d cpi r26, 0xD6 ; 214
50: b1 07 cpc r27, r17
52: e1 f7 brne .-8 ; 0x4c
54: e3 c1 rjmp .+966 ; 0x41c
00000056 <__bad_interrupt>:
56: d4 cf rjmp .-88 ; 0x0
00000058 <delay_nms>:
/********************************************************/
void delay_nms(uint n)
{
uint i=0 ;
for (i=0 ;i<n ;i++)
58: 00 97 sbiw r24, 0x00 ; 0
5a: 41 f0 breq .+16 ; 0x6c
5c: 9c 01 movw r18, r24
milliseconds can be achieved.
*/
static __inline__ void
_delay_loop_2(uint16_t __count)
{
5e: 80 ed ldi r24, 0xD0 ; 208
60: 97 e0 ldi r25, 0x07 ; 7
__asm__ volatile (
62: 01 97 sbiw r24, 0x01 ; 1
64: f1 f7 brne .-4 ; 0x62
66: 21 50 subi r18, 0x01 ; 1
68: 30 40 sbci r19, 0x00 ; 0
6a: c9 f7 brne .-14 ; 0x5e
6c: 08 95 ret
0000006e <Delay>:
milliseconds can be achieved.
*/
static __inline__ void
_delay_loop_2(uint16_t __count)
{
6e: 88 0f add r24, r24
70: 99 1f adc r25, r25
__asm__ volatile (
72: 01 97 sbiw r24, 0x01 ; 1
74: f1 f7 brne .-4 ; 0x72
76: 08 95 ret
00000078 <beep>:
_delay_loop_2(250*FREQ) ;
}
/********************************************************/
/* */
/* y*us延时函数 */
/* */
/********************************************************/
void Delay(uint y)
{
_delay_loop_2(2*y);
}
/********************************************************/
/* */
/* 蜂鸣器驱动函数 */
/* */
/********************************************************/
void beep(void)
{
78: cf 93 push r28
7a: c3 e6 ldi r28, 0x63 ; 99
uchar i;
for (i=0;i<100;i++)
{
PORTD&=~_BV(BEEP);
7c: 97 98 cbi 0x12, 7 ; 18
Delay(500);
7e: 84 ef ldi r24, 0xF4 ; 244
80: 91 e0 ldi r25, 0x01 ; 1
82: f5 df rcall .-22 ; 0x6e
PORTD=_BV(BEEP);
84: 80 e8 ldi r24, 0x80 ; 128
86: 82 bb out 0x12, r24 ; 18
Delay(500);
88: 84 ef ldi r24, 0xF4 ; 244
8a: 91 e0 ldi r25, 0x01 ; 1
8c: f0 df rcall .-32 ; 0x6e
8e: c1 50 subi r28, 0x01 ; 1
90: c7 ff sbrs r28, 7
92: f4 cf rjmp .-24 ; 0x7c
}
PORTD|=_BV(BEEP); //关闭蜂鸣器
94: 97 9a sbi 0x12, 7 ; 18
delay_nms(200);
96: 88 ec ldi r24, 0xC8 ; 200
98: 90 e0 ldi r25, 0x00 ; 0
9a: de df rcall .-68 ; 0x58
9c: cf 91 pop r28
9e: 08 95 ret
000000a0 <init_io>:
}
/********************************************************/
/* */
/* IO口初始化 */
/* */
/********************************************************/
void init_io(void)
{
DDRA=0xFF; //置PA口输出
a0: 8f ef ldi r24, 0xFF ; 255
a2: 8a bb out 0x1a, r24 ; 26
PORTA=0xFF; //PA口设置内部上拉电阻
a4: 8b bb out 0x1b, r24 ; 27
DDRB=0xFF; //置PB口输出
a6: 87 bb out 0x17, r24 ; 23
PORTB=0xFF; //PB口设置内部上拉电阻
a8: 88 bb out 0x18, r24 ; 24
DDRC=0xFF; //置PC口输出
aa: 84 bb out 0x14, r24 ; 20
PORTC=0xFF; //PC口设置内部上拉电阻
ac: 85 bb out 0x15, r24 ; 21
DDRD=0xFF; //置PD口输出
ae: 81 bb out 0x11, r24 ; 17
PORTD=0xFF; //PD口设置内部上拉电阻
b0: 82 bb out 0x12, r24 ; 18
b2: 08 95 ret
000000b4 <Init_DS18B20>:
}
/*********************************************************/
/* */
/* 初始化DS18B20 */
/* */
/*********************************************************/
int Init_DS18B20(void)
{
PORTD|=_BV(DQ); //DQ复位
b4: 93 9a sbi 0x12, 3 ; 18
Delay(70); //稍做延时70us
b6: 86 e4 ldi r24, 0x46 ; 70
b8: 90 e0 ldi r25, 0x00 ; 0
ba: d9 df rcall .-78 ; 0x6e
PORTD&=~_BV(DQ); //将DQ拉低
bc: 93 98 cbi 0x12, 3 ; 18
Delay(780); //精确延时780us 大于 480us
be: 8c e0 ldi r24, 0x0C ; 12
c0: 93 e0 ldi r25, 0x03 ; 3
c2: d5 df rcall .-86 ; 0x6e
PORTD|=_BV(DQ); //拉高总线
c4: 93 9a sbi 0x12, 3 ; 18
DDRD&=~_BV(DQ); //置PD3为输入
c6: 8b 98 cbi 0x11, 3 ; 17
Delay(70); //稍做延时
c8: 86 e4 ldi r24, 0x46 ; 70
ca: 90 e0 ldi r25, 0x00 ; 0
cc: d0 df rcall .-96 ; 0x6e
if(PIND&_BV(DQ)) //如果=0则初始化成功 =1则初始化失败
ce: 83 9b sbis 0x10, 3 ; 16
d0: 04 c0 rjmp .+8 ; 0xda
presence = 1;
d2: 81 e0 ldi r24, 0x01 ; 1
d4: 80 93 d4 00 sts 0x00D4, r24
d8: 02 c0 rjmp .+4 ; 0xde
else
presence = 0;
da: 10 92 d4 00 sts 0x00D4, r1
Delay(870); //精确延时870us
de: 86 e6 ldi r24, 0x66 ; 102
e0: 93 e0 ldi r25, 0x03 ; 3
e2: c5 df rcall .-118 ; 0x6e
DDRD |=_BV(DQ); //置PD3为输出
e4: 8b 9a sbi 0x11, 3 ; 17
PORTD |=_BV(DQ); //释放总线
e6: 93 9a sbi 0x12, 3 ; 18
return(presence); //返回信号,0=presence,1= no presence
e8: 80 91 d4 00 lds r24, 0x00D4
}
ec: 99 27 eor r25, r25
ee: 08 95 ret
000000f0 <ReadOneChar>:
/*********************************************************/
/* */
/* 读一个字节 */
/* */
/*********************************************************/
int ReadOneChar(void)
{
f0: 1f 93 push r17
f2: cf 93 push r28
uchar i = 0;
f4: c0 e0 ldi r28, 0x00 ; 0
uchar dat = 0;
for (i = 8; i > 0; i--)
f6: 18 e0 ldi r17, 0x08 ; 8
{
PORTD&=~_BV(DQ); //总线为低电平
f8: 93 98 cbi 0x12, 3 ; 18
dat >>= 1;
fa: c6 95 lsr r28
PORTD|=_BV(DQ); //总线为高电平(释放总线)
fc: 93 9a sbi 0x12, 3 ; 18
DDRD&=~_BV(DQ); //置PD3为输入
fe: 8b 98 cbi 0x11, 3 ; 17
if(PIND&_BV(DQ))
100: 83 99 sbic 0x10, 3 ; 16
dat |= 0x80;
102: c0 68 ori r28, 0x80 ; 128
Delay(70);
104: 86 e4 ldi r24, 0x46 ; 70
106: 90 e0 ldi r25, 0x00 ; 0
108: b2 df rcall .-156 ; 0x6e
DDRD |=_BV(DQ);
10a: 8b 9a sbi 0x11, 3 ; 17
PORTD|=_BV(DQ);
10c: 93 9a sbi 0x12, 3 ; 18
10e: 11 50 subi r17, 0x01 ; 1
110: 99 f7 brne .-26 ; 0xf8
}
return (dat);
}
112: 8c 2f mov r24, r28
114: 99 27 eor r25, r25
116: cf 91 pop r28
118: 1f 91 pop r17
11a: 08 95 ret
0000011c <WriteOneChar>:
/**********************************************************/
/* */
/* 写一个字节 */
/* */
/**********************************************************/
void WriteOneChar(uchar dat)
{
11c: 1f 93 push r17
11e: cf 93 push r28
120: c8 2f mov r28, r24
uchar i = 0;
for (i = 8; i > 0; i--)
122: 18 e0 ldi r17, 0x08 ; 8
{
PORTD&=~_BV(DQ);
124: 93 98 cbi 0x12, 3 ; 18
if(dat&0x01)
126: c0 ff sbrs r28, 0
128: 02 c0 rjmp .+4 ; 0x12e
PORTD|=_BV(DQ); //写"1"
12a: 93 9a sbi 0x12, 3 ; 18
12c: 01 c0 rjmp .+2 ; 0x130
else
PORTD&=~_BV(DQ); //写"0"
12e: 93 98 cbi 0x12, 3 ; 18
Delay(70);
130: 86 e4 ldi r24, 0x46 ; 70
132: 90 e0 ldi r25, 0x00 ; 0
134: 9c df rcall .-200 ; 0x6e
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -