📄 main.lss
字号:
main.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00003edc 00000000 00000000 00000094 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000136 00800060 00003edc 00003f70 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000680 00800196 00800196 000040a6 2**0
ALLOC
3 .noinit 00000000 00800816 00800816 000040a6 2**0
CONTENTS
4 .eeprom 00000000 00810000 00810000 000040a6 2**0
CONTENTS
5 .stab 0000036c 00000000 00000000 000040a8 2**2
CONTENTS, READONLY, DEBUGGING
6 .stabstr 00000084 00000000 00000000 00004414 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_aranges 00000014 00000000 00000000 00004498 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_pubnames 000003a5 00000000 00000000 000044ac 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_info 00001334 00000000 00000000 00004851 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_abbrev 0000029f 00000000 00000000 00005b85 2**0
CONTENTS, READONLY, DEBUGGING
11 .debug_line 00000e5f 00000000 00000000 00005e24 2**0
CONTENTS, READONLY, DEBUGGING
12 .debug_str 000005d0 00000000 00000000 00006c83 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 0c 94 2a 00 jmp 0x54 <__ctors_end>
4: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
8: 0c 94 e6 09 jmp 0x13cc <__vector_2>
c: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
10: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
14: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
18: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
1c: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
20: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
24: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
28: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
2c: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
30: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
34: 0c 94 98 09 jmp 0x1330 <__vector_13>
38: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
3c: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
40: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
44: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
48: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
4c: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
50: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
00000054 <__ctors_end>:
54: 11 24 eor r1, r1
56: 1f be out 0x3f, r1 ; 63
58: cf e5 ldi r28, 0x5F ; 95
5a: d8 e0 ldi r29, 0x08 ; 8
5c: de bf out 0x3e, r29 ; 62
5e: cd bf out 0x3d, r28 ; 61
00000060 <__do_copy_data>:
60: 11 e0 ldi r17, 0x01 ; 1
62: a0 e6 ldi r26, 0x60 ; 96
64: b0 e0 ldi r27, 0x00 ; 0
66: ec ed ldi r30, 0xDC ; 220
68: fe e3 ldi r31, 0x3E ; 62
6a: 02 c0 rjmp .+4 ; 0x70 <.do_copy_data_start>
0000006c <.do_copy_data_loop>:
6c: 05 90 lpm r0, Z+
6e: 0d 92 st X+, r0
00000070 <.do_copy_data_start>:
70: a6 39 cpi r26, 0x96 ; 150
72: b1 07 cpc r27, r17
74: d9 f7 brne .-10 ; 0x6c <.do_copy_data_loop>
00000076 <__do_clear_bss>:
76: 18 e0 ldi r17, 0x08 ; 8
78: a6 e9 ldi r26, 0x96 ; 150
7a: b1 e0 ldi r27, 0x01 ; 1
7c: 01 c0 rjmp .+2 ; 0x80 <.do_clear_bss_start>
0000007e <.do_clear_bss_loop>:
7e: 1d 92 st X+, r1
00000080 <.do_clear_bss_start>:
80: a6 31 cpi r26, 0x16 ; 22
82: b1 07 cpc r27, r17
84: e1 f7 brne .-8 ; 0x7e <.do_clear_bss_loop>
86: 0c 94 ea 05 jmp 0xbd4 <main>
0000008a <__bad_interrupt>:
8a: 0c 94 00 00 jmp 0x0 <__vectors>
0000008e <Usart_init>:
void Usart_init(void) //串口初始化
{
UCSRA = 0x00;
8e: 1b b8 out 0x0b, r1 ; 11
UCSRB =0x08; //发送接收使能,使用中断方式
90: 88 e0 ldi r24, 0x08 ; 8
92: 8a b9 out 0x0a, r24 ; 10
UCSRC =0X86;/* 设置帧格式: 8 个数据位, 1 个停止位*/
94: 86 e8 ldi r24, 0x86 ; 134
96: 80 bd out 0x20, r24 ; 32
UBRRH =0;//8Mhz频率,设置波特率9.6k
98: 10 bc out 0x20, r1 ; 32
UBRRL =51;
9a: 83 e3 ldi r24, 0x33 ; 51
9c: 89 b9 out 0x09, r24 ; 9
9e: 08 95 ret
000000a0 <Usart_Send_Str>:
}
void Usart_Send_Str(char *p) //串口发送字符串
{
a0: dc 01 movw r26, r24
for(uchar j=0;*(p+j)!='\0';j++)
a2: 90 e0 ldi r25, 0x00 ; 0
a4: 8c 91 ld r24, X
a6: 88 23 and r24, r24
a8: 69 f0 breq .+26 ; 0xc4 <Usart_Send_Str+0x24>
{
UDR=*(p+j);//发送数据
aa: fd 01 movw r30, r26
ac: e9 0f add r30, r25
ae: f1 1d adc r31, r1
b0: 80 81 ld r24, Z
b2: 8c b9 out 0x0c, r24 ; 12
while(!(UCSRA&0x20));//等待发送完成
b4: 5d 9b sbis 0x0b, 5 ; 11
b6: fe cf rjmp .-4 ; 0xb4 <Usart_Send_Str+0x14>
b8: 9f 5f subi r25, 0xFF ; 255
ba: fd 01 movw r30, r26
bc: e9 0f add r30, r25
be: f1 1d adc r31, r1
c0: 80 81 ld r24, Z
c2: f1 cf rjmp .-30 ; 0xa6 <Usart_Send_Str+0x6>
c4: 08 95 ret
000000c6 <Usart_Send_Data>:
}
}
void Usart_Send_Data(char *p,unsigned int n) //串口发送数据
{
for(unsigned int l=0;l<n;l++)
c6: 20 e0 ldi r18, 0x00 ; 0
c8: 30 e0 ldi r19, 0x00 ; 0
ca: 26 17 cp r18, r22
cc: 37 07 cpc r19, r23
ce: 58 f4 brcc .+22 ; 0xe6 <Usart_Send_Data+0x20>
d0: fc 01 movw r30, r24
{
UDR=*(p+l);//发送数据
d2: 80 81 ld r24, Z
d4: 8c b9 out 0x0c, r24 ; 12
while(!(UCSRA&0x20));//等待发送完成
d6: 5d 9b sbis 0x0b, 5 ; 11
d8: fe cf rjmp .-4 ; 0xd6 <Usart_Send_Data+0x10>
da: 2f 5f subi r18, 0xFF ; 255
dc: 3f 4f sbci r19, 0xFF ; 255
de: 31 96 adiw r30, 0x01 ; 1
e0: 26 17 cp r18, r22
e2: 37 07 cpc r19, r23
e4: b0 f3 brcs .-20 ; 0xd2 <Usart_Send_Data+0xc>
e6: 08 95 ret
000000e8 <TWI_init>:
void TWI_init( void )
{
//DDRC|=0x00;
//PORTC|=0x03;
TWBR = 0x03;//设置波特率
e8: 83 e0 ldi r24, 0x03 ; 3
ea: 80 b9 out 0x00, r24 ; 0
TWSR= 0X1;//设置预分频因子,则SCL频率为92160Hz
ec: 81 e0 ldi r24, 0x01 ; 1
ee: 81 b9 out 0x01, r24 ; 1
f0: 08 95 ret
000000f2 <twi_write_byte>:
}
uchar twi_write_byte(uchar sla,uchar address,uchar write_data) //
{
f2: 78 2f mov r23, r24
uchar twst,n=0x0,rv=0xff;
f4: 50 e0 ldi r21, 0x00 ; 0
f6: 9f ef ldi r25, 0xFF ; 255
restart:
if(n++>=max)
f8: 85 2f mov r24, r21
fa: 5f 5f subi r21, 0xFF ; 255
fc: 83 30 cpi r24, 0x03 ; 3
fe: 08 f0 brcs .+2 ; 0x102 <twi_write_byte+0x10>
100: 47 c0 rjmp .+142 ; 0x190 <twi_write_byte+0x9e>
goto error;
begin:
TWCR = _BV(TWINT) | _BV(TWSTA) | _BV(TWEN);//发送开始信号
102: 84 ea ldi r24, 0xA4 ; 164
104: 86 bf out 0x36, r24 ; 54
while((TWCR & _BV(TWINT))==0x0);//等待发送完毕
106: 06 b6 in r0, 0x36 ; 54
108: 07 fe sbrs r0, 7
10a: fd cf rjmp .-6 ; 0x106 <twi_write_byte+0x14>
switch(twst = (TWSR&0xf8))
10c: 81 b1 in r24, 0x01 ; 1
10e: 88 7f andi r24, 0xF8 ; 248
110: 28 2f mov r18, r24
112: 33 27 eor r19, r19
114: 20 31 cpi r18, 0x10 ; 16
116: 31 05 cpc r19, r1
118: 31 f0 breq .+12 ; 0x126 <twi_write_byte+0x34>
11a: 21 31 cpi r18, 0x11 ; 17
11c: 31 05 cpc r19, r1
11e: 54 f5 brge .+84 ; 0x174 <twi_write_byte+0x82>
120: 28 30 cpi r18, 0x08 ; 8
122: 31 05 cpc r19, r1
124: a9 f5 brne .+106 ; 0x190 <twi_write_byte+0x9e>
{
case 0x10: //TW_REP_START://有可能出现
case 0x08: //TW_START:
break;
case 0x38: //TW_MT_ARB_LOST:
goto begin;
default:
goto error;
}
TWDR = sla | TW_WRITE;//发送SLA+W
126: 73 b9 out 0x03, r23 ; 3
TWCR = _BV(TWINT) | _BV(TWEN);//清TWINT,开始传输
128: 84 e8 ldi r24, 0x84 ; 132
12a: 86 bf out 0x36, r24 ; 54
while((TWCR & _BV(TWINT))==0x0);//等待传输完毕
12c: 06 b6 in r0, 0x36 ; 54
12e: 07 fe sbrs r0, 7
130: fd cf rjmp .-6 ; 0x12c <twi_write_byte+0x3a>
switch(twst = (TWSR&0xf8))
132: 81 b1 in r24, 0x01 ; 1
134: 88 7f andi r24, 0xF8 ; 248
136: 28 2f mov r18, r24
138: 33 27 eor r19, r19
13a: 20 32 cpi r18, 0x20 ; 32
13c: 31 05 cpc r19, r1
13e: e1 f2 breq .-72 ; 0xf8 <twi_write_byte+0x6>
140: 21 32 cpi r18, 0x21 ; 33
142: 31 05 cpc r19, r1
144: bc f4 brge .+46 ; 0x174 <twi_write_byte+0x82>
146: 28 31 cpi r18, 0x18 ; 24
148: 31 05 cpc r19, r1
14a: 11 f5 brne .+68 ; 0x190 <twi_write_byte+0x9e>
{
case 0x18: //TW_MT_SLA_ACK:
break;
case 0x20: //TW_MT_SLA_NACK://器件忙,有可能处于内部写周期
goto restart;
case 0x38: // TW_MT_ARB_LOST:
goto begin;
default:
goto error;
}
/* TWDR = address>>8;//传输地址高8位
TWCR = _BV(TWINT) | _BV(TWEN);//清TWINT,开始传输
while((TWCR & _BV(TWINT))==0x0);//等待传输完毕
switch((twst = TW_STATUS))
{
case TW_MT_DATA_ACK:
break;
case TW_MT_DATA_NACK:
goto quit;
case TW_MT_ARB_LOST:
goto begin;
default:
goto error;
} */
TWDR = address;//传输地址低8位
14c: 63 b9 out 0x03, r22 ; 3
TWCR = _BV(TWINT) | _BV(TWEN);//清TWINT,开始传输
14e: 84 e8 ldi r24, 0x84 ; 132
150: 86 bf out 0x36, r24 ; 54
while((TWCR & _BV(TWINT))==0x0);//等待传输完毕
152: 06 b6 in r0, 0x36 ; 54
154: 07 fe sbrs r0, 7
156: fd cf rjmp .-6 ; 0x152 <twi_write_byte+0x60>
switch(twst = (TWSR&0xf8))
158: 81 b1 in r24, 0x01 ; 1
15a: 88 7f andi r24, 0xF8 ; 248
15c: 28 2f mov r18, r24
15e: 33 27 eor r19, r19
160: 20 33 cpi r18, 0x30 ; 48
162: 31 05 cpc r19, r1
164: b1 f0 breq .+44 ; 0x192 <twi_write_byte+0xa0>
166: 21 33 cpi r18, 0x31 ; 49
168: 31 05 cpc r19, r1
16a: 24 f4 brge .+8 ; 0x174 <twi_write_byte+0x82>
16c: 28 32 cpi r18, 0x28 ; 40
16e: 31 05 cpc r19, r1
170: 29 f0 breq .+10 ; 0x17c <twi_write_byte+0x8a>
172: 0e c0 rjmp .+28 ; 0x190 <twi_write_byte+0x9e>
174: 28 33 cpi r18, 0x38 ; 56
176: 31 05 cpc r19, r1
178: 21 f2 breq .-120 ; 0x102 <twi_write_byte+0x10>
17a: 0a c0 rjmp .+20 ; 0x190 <twi_write_byte+0x9e>
{
case 0x28: //TW_MT_DATA_ACK:
break;
case 0x30: //TW_MT_DATA_NACK:
goto quit;
case 0x38: //TW_MT_ARB_LOST:
goto begin;
default:
goto error;
}
TWDR = write_data;
17c: 43 b9 out 0x03, r20 ; 3
TWCR = _BV(TWINT) | _BV(TWEN);//清TWINT,开始传输
17e: 84 e8 ldi r24, 0x84 ; 132
180: 86 bf out 0x36, r24 ; 54
while((TWCR & _BV(TWINT))==0x0);//等待传输完毕
182: 06 b6 in r0, 0x36 ; 54
184: 07 fe sbrs r0, 7
186: fd cf rjmp .-6 ; 0x182 <twi_write_byte+0x90>
switch(twst = (TWSR&0xf8))
188: 81 b1 in r24, 0x01 ; 1
18a: 88 7f andi r24, 0xF8 ; 248
18c: 88 32 cpi r24, 0x28 ; 40
18e: 09 f0 breq .+2 ; 0x192 <twi_write_byte+0xa0>
{
case 0x28: //TW_MT_DATA_ACK:
break;
default:
goto error;
}
quit:
TWCR = _BV(TWINT) | _BV(TWSTO) | _BV(TWEN);//发送停止信号
return rv;
error:
rv=0x00;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -