📄 main.lss
字号:
main.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 000001a4 00000000 00000000 00000054 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .debug_aranges 00000020 00000000 00000000 000001f8 2**0
CONTENTS, READONLY, DEBUGGING
2 .debug_pubnames 00000049 00000000 00000000 00000218 2**0
CONTENTS, READONLY, DEBUGGING
3 .debug_info 000001ab 00000000 00000000 00000261 2**0
CONTENTS, READONLY, DEBUGGING
4 .debug_abbrev 000000d6 00000000 00000000 0000040c 2**0
CONTENTS, READONLY, DEBUGGING
5 .debug_line 00000271 00000000 00000000 000004e2 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_frame 00000060 00000000 00000000 00000754 2**2
CONTENTS, READONLY, DEBUGGING
7 .debug_str 0000009b 00000000 00000000 000007b4 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_loc 000000bb 00000000 00000000 0000084f 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 12 c0 rjmp .+36 ; 0x26 <__ctors_end>
2: 2c c0 rjmp .+88 ; 0x5c <__bad_interrupt>
4: 2b c0 rjmp .+86 ; 0x5c <__bad_interrupt>
6: 2a c0 rjmp .+84 ; 0x5c <__bad_interrupt>
8: 29 c0 rjmp .+82 ; 0x5c <__bad_interrupt>
a: 28 c0 rjmp .+80 ; 0x5c <__bad_interrupt>
c: 27 c0 rjmp .+78 ; 0x5c <__bad_interrupt>
e: 26 c0 rjmp .+76 ; 0x5c <__bad_interrupt>
10: 25 c0 rjmp .+74 ; 0x5c <__bad_interrupt>
12: 24 c0 rjmp .+72 ; 0x5c <__bad_interrupt>
14: 23 c0 rjmp .+70 ; 0x5c <__bad_interrupt>
16: 22 c0 rjmp .+68 ; 0x5c <__bad_interrupt>
18: 21 c0 rjmp .+66 ; 0x5c <__bad_interrupt>
1a: 20 c0 rjmp .+64 ; 0x5c <__bad_interrupt>
1c: 1f c0 rjmp .+62 ; 0x5c <__bad_interrupt>
1e: 1e c0 rjmp .+60 ; 0x5c <__bad_interrupt>
20: 1d c0 rjmp .+58 ; 0x5c <__bad_interrupt>
22: 1c c0 rjmp .+56 ; 0x5c <__bad_interrupt>
24: 1b c0 rjmp .+54 ; 0x5c <__bad_interrupt>
00000026 <__ctors_end>:
26: 11 24 eor r1, r1
28: 1f be out 0x3f, r1 ; 63
2a: cf e5 ldi r28, 0x5F ; 95
2c: d4 e0 ldi r29, 0x04 ; 4
2e: de bf out 0x3e, r29 ; 62
30: cd bf out 0x3d, r28 ; 61
00000032 <__do_copy_data>:
32: 10 e0 ldi r17, 0x00 ; 0
34: a0 e6 ldi r26, 0x60 ; 96
36: b0 e0 ldi r27, 0x00 ; 0
38: e4 ea ldi r30, 0xA4 ; 164
3a: f1 e0 ldi r31, 0x01 ; 1
3c: 02 c0 rjmp .+4 ; 0x42 <.do_copy_data_start>
0000003e <.do_copy_data_loop>:
3e: 05 90 lpm r0, Z+
40: 0d 92 st X+, r0
00000042 <.do_copy_data_start>:
42: a0 36 cpi r26, 0x60 ; 96
44: b1 07 cpc r27, r17
46: d9 f7 brne .-10 ; 0x3e <.do_copy_data_loop>
00000048 <__do_clear_bss>:
48: 10 e0 ldi r17, 0x00 ; 0
4a: a0 e6 ldi r26, 0x60 ; 96
4c: b0 e0 ldi r27, 0x00 ; 0
4e: 01 c0 rjmp .+2 ; 0x52 <.do_clear_bss_start>
00000050 <.do_clear_bss_loop>:
50: 1d 92 st X+, r1
00000052 <.do_clear_bss_start>:
52: a0 36 cpi r26, 0x60 ; 96
54: b1 07 cpc r27, r17
56: e1 f7 brne .-8 ; 0x50 <.do_clear_bss_loop>
58: 94 d0 rcall .+296 ; 0x182 <main>
5a: a2 c0 rjmp .+324 ; 0x1a0 <_exit>
0000005c <__bad_interrupt>:
5c: d1 cf rjmp .-94 ; 0x0 <__vectors>
0000005e <error>:
www.iccavr.com
*/
//#include "iom16v.h" I2C总线主机模式错误处理
void error(unsigned char type)
{
5e: 90 e0 ldi r25, 0x00 ; 0
60: 88 7f andi r24, 0xF8 ; 248
62: 90 70 andi r25, 0x00 ; 0
64: 80 33 cpi r24, 0x30 ; 48
66: 91 05 cpc r25, r1
68: 29 f0 breq .+10 ; 0x74 <error+0x16>
6a: 88 34 cpi r24, 0x48 ; 72
6c: 91 05 cpc r25, r1
6e: 29 f0 breq .+10 ; 0x7a <error+0x1c>
70: 80 97 sbiw r24, 0x20 ; 32
72: 29 f4 brne .+10 ; 0x7e <error+0x20>
/*stop 停止*/
TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWSTO);
break;
case 0x30: /*数据写失败*/
/*stop 停止*/
TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWSTO);
74: 84 e9 ldi r24, 0x94 ; 148
76: 86 bf out 0x36, r24 ; 54
78: 08 95 ret
break;
case 0x38: /*仲裁失败*/
break;
case 0x48: /*址址读失败*/
/*stop 停止*/
TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWSTO);
7a: 84 e9 ldi r24, 0x94 ; 148
7c: 86 bf out 0x36, r24 ; 54
7e: 08 95 ret
00000080 <twi_write>:
/*I2C总线单字节写入*/
unsigned char twi_write(unsigned char addr, unsigned char dd)
{
80: 98 2f mov r25, r24
TWBR = 2; /*start 启动*/
82: 82 e0 ldi r24, 0x02 ; 2
84: 80 b9 out 0x00, r24 ; 0
TWCR = (1 << TWINT) | (1 << TWSTA) | (1 << TWEN);
86: 84 ea ldi r24, 0xA4 ; 164
88: 86 bf out 0x36, r24 ; 54
while (!(TWCR & (1 << TWINT)))
8a: 06 b6 in r0, 0x36 ; 54
8c: 07 fe sbrs r0, 7
8e: fd cf rjmp .-6 ; 0x8a <twi_write+0xa>
;
if ((TWSR & 0xF8) != 0x08)
90: 81 b1 in r24, 0x01 ; 1
92: 88 7f andi r24, 0xF8 ; 248
94: 88 30 cpi r24, 0x08 ; 8
96: f9 f4 brne .+62 ; 0xd6 <twi_write+0x56>
{
error(TWSR);
return 0;
}
/*SLA_W 芯片地址*/
TWDR = 0xA0;
98: 80 ea ldi r24, 0xA0 ; 160
9a: 83 b9 out 0x03, r24 ; 3
TWCR = (1 << TWINT) | (1 << TWEN);
9c: 84 e8 ldi r24, 0x84 ; 132
9e: 86 bf out 0x36, r24 ; 54
while (!(TWCR & (1 << TWINT)))
a0: 06 b6 in r0, 0x36 ; 54
a2: 07 fe sbrs r0, 7
a4: fd cf rjmp .-6 ; 0xa0 <twi_write+0x20>
;
if ((TWSR & 0xF8) != 0x18)
a6: 81 b1 in r24, 0x01 ; 1
a8: 88 7f andi r24, 0xF8 ; 248
aa: 88 31 cpi r24, 0x18 ; 24
ac: a1 f4 brne .+40 ; 0xd6 <twi_write+0x56>
{
error(TWSR);
return 0;
}
/*addr 操作地址*/
TWDR = addr;
ae: 93 b9 out 0x03, r25 ; 3
TWCR = (1 << TWINT) | (1 << TWEN);
b0: 84 e8 ldi r24, 0x84 ; 132
b2: 86 bf out 0x36, r24 ; 54
while (!(TWCR & (1 << TWINT)))
b4: 06 b6 in r0, 0x36 ; 54
b6: 07 fe sbrs r0, 7
b8: fd cf rjmp .-6 ; 0xb4 <twi_write+0x34>
;
if ((TWSR & 0xF8) != 0x28)
ba: 81 b1 in r24, 0x01 ; 1
bc: 88 7f andi r24, 0xF8 ; 248
be: 88 32 cpi r24, 0x28 ; 40
c0: 51 f4 brne .+20 ; 0xd6 <twi_write+0x56>
error(TWSR);
return 0;
}
/*dd 写入数据*/
TWDR = dd;
c2: 63 b9 out 0x03, r22 ; 3
TWCR = (1 << TWINT) | (1 << TWEN);
c4: 84 e8 ldi r24, 0x84 ; 132
c6: 86 bf out 0x36, r24 ; 54
while (!(TWCR & (1 << TWINT)))
c8: 06 b6 in r0, 0x36 ; 54
ca: 07 fe sbrs r0, 7
cc: fd cf rjmp .-6 ; 0xc8 <twi_write+0x48>
;
if ((TWSR & 0xF8) != 0x28) {
ce: 81 b1 in r24, 0x01 ; 1
d0: 88 7f andi r24, 0xF8 ; 248
d2: 88 32 cpi r24, 0x28 ; 40
d4: 21 f0 breq .+8 ; 0xde <twi_write+0x5e>
error(TWSR);
d6: 81 b1 in r24, 0x01 ; 1
d8: c2 df rcall .-124 ; 0x5e <error>
da: 80 e0 ldi r24, 0x00 ; 0
dc: 08 95 ret
return 0;
}
/*stop 停止*/
TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWSTO);
de: 84 e9 ldi r24, 0x94 ; 148
e0: 86 bf out 0x36, r24 ; 54
e2: 81 e0 ldi r24, 0x01 ; 1
return 1;
}
e4: 08 95 ret
000000e6 <twi_read>:
/*I2C总线单字节读取*/
unsigned char twi_read(unsigned char addr, unsigned char *dd)
{
e6: 98 2f mov r25, r24
e8: fb 01 movw r30, r22
TWBR = 2; /*start 启动*/
ea: 82 e0 ldi r24, 0x02 ; 2
ec: 80 b9 out 0x00, r24 ; 0
TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
ee: 84 ea ldi r24, 0xA4 ; 164
f0: 86 bf out 0x36, r24 ; 54
while(!(TWCR&(1<<TWINT)))
f2: 06 b6 in r0, 0x36 ; 54
f4: 07 fe sbrs r0, 7
f6: fd cf rjmp .-6 ; 0xf2 <twi_read+0xc>
;
if ((TWSR & 0xF8) != 0x08)
f8: 81 b1 in r24, 0x01 ; 1
fa: 88 7f andi r24, 0xF8 ; 248
fc: 88 30 cpi r24, 0x08 ; 8
fe: 91 f5 brne .+100 ; 0x164 <twi_read+0x7e>
error(TWSR);
return 0;
}
/*SLA_W 芯片地址*/
TWDR = 0xA0;
100: 80 ea ldi r24, 0xA0 ; 160
102: 83 b9 out 0x03, r24 ; 3
TWCR = (1 << TWINT) | (1 << TWEN);
104: 84 e8 ldi r24, 0x84 ; 132
106: 86 bf out 0x36, r24 ; 54
while (!(TWCR & (1 << TWINT)))
108: 06 b6 in r0, 0x36 ; 54
10a: 07 fe sbrs r0, 7
10c: fd cf rjmp .-6 ; 0x108 <twi_read+0x22>
;
if ((TWSR & 0xF8) != 0x18)
10e: 81 b1 in r24, 0x01 ; 1
110: 88 7f andi r24, 0xF8 ; 248
112: 88 31 cpi r24, 0x18 ; 24
114: 39 f5 brne .+78 ; 0x164 <twi_read+0x7e>
error(TWSR);
return 0;
}
/*addr 操作地址*/
TWDR = addr;
116: 93 b9 out 0x03, r25 ; 3
TWCR = (1 << TWINT) | (1 << TWEN);
118: 84 e8 ldi r24, 0x84 ; 132
11a: 86 bf out 0x36, r24 ; 54
while (!(TWCR & (1 << TWINT)))
11c: 06 b6 in r0, 0x36 ; 54
11e: 07 fe sbrs r0, 7
120: fd cf rjmp .-6 ; 0x11c <twi_read+0x36>
;
if ((TWSR & 0xF8) != 0x28)
122: 81 b1 in r24, 0x01 ; 1
124: 88 7f andi r24, 0xF8 ; 248
126: 88 32 cpi r24, 0x28 ; 40
128: e9 f4 brne .+58 ; 0x164 <twi_read+0x7e>
error(TWSR);
return 0;
}
/*start 启动*/
TWCR = (1 << TWINT) | (1 << TWSTA) | (1 << TWEN);
12a: 84 ea ldi r24, 0xA4 ; 164
12c: 86 bf out 0x36, r24 ; 54
while (!(TWCR & (1 << TWINT)))
12e: 06 b6 in r0, 0x36 ; 54
130: 07 fe sbrs r0, 7
132: fd cf rjmp .-6 ; 0x12e <twi_read+0x48>
;
if ((TWSR & 0xF8) != 0x10)
134: 81 b1 in r24, 0x01 ; 1
136: 88 7f andi r24, 0xF8 ; 248
138: 80 31 cpi r24, 0x10 ; 16
13a: a1 f4 brne .+40 ; 0x164 <twi_read+0x7e>
error(TWSR);
return 0;
}
/*SLA_R 芯片地址*/
TWDR = 0xA1;
13c: 81 ea ldi r24, 0xA1 ; 161
13e: 83 b9 out 0x03, r24 ; 3
TWCR = (1 << TWINT) | (1 << TWEN);
140: 84 e8 ldi r24, 0x84 ; 132
142: 86 bf out 0x36, r24 ; 54
while (!(TWCR & (1 << TWINT)))
144: 06 b6 in r0, 0x36 ; 54
146: 07 fe sbrs r0, 7
148: fd cf rjmp .-6 ; 0x144 <twi_read+0x5e>
;
if ((TWSR & 0xF8) != 0x40)
14a: 81 b1 in r24, 0x01 ; 1
14c: 88 7f andi r24, 0xF8 ; 248
14e: 80 34 cpi r24, 0x40 ; 64
150: 49 f4 brne .+18 ; 0x164 <twi_read+0x7e>
{
error(TWSR);
return 0;
}
/*读取数据*/
TWCR = (1 << TWINT) | (1 << TWEN);
152: 84 e8 ldi r24, 0x84 ; 132
154: 86 bf out 0x36, r24 ; 54
while (!(TWCR & (1 << TWINT)))
156: 06 b6 in r0, 0x36 ; 54
158: 07 fe sbrs r0, 7
15a: fd cf rjmp .-6 ; 0x156 <twi_read+0x70>
;
if ((TWSR & 0xF8) != 0x58)
15c: 81 b1 in r24, 0x01 ; 1
15e: 88 7f andi r24, 0xF8 ; 248
160: 88 35 cpi r24, 0x58 ; 88
162: 21 f0 breq .+8 ; 0x16c <twi_read+0x86>
{
error(TWSR);
164: 81 b1 in r24, 0x01 ; 1
166: 7b df rcall .-266 ; 0x5e <error>
168: 80 e0 ldi r24, 0x00 ; 0
16a: 08 95 ret
return 0;
}
*dd = TWDR;
16c: 83 b1 in r24, 0x03 ; 3
16e: 80 83 st Z, r24
/*stop 停止*/
TWCR = (1 << TWINT) | (1 << TWSTO) | (1 << TWEN);
170: 84 e9 ldi r24, 0x94 ; 148
172: 86 bf out 0x36, r24 ; 54
174: 81 e0 ldi r24, 0x01 ; 1
return 1;
176: 08 95 ret
00000178 <port>:
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <I2C.H>
void port (void)
{
178: 8a 9a sbi 0x11, 2 ; 17
DDRD|=(1<<PD2); //485 cs
PORTD&=~(1<<PD2);
17a: 92 98 cbi 0x12, 2 ; 18
DDRB|=(1<<PB0); //power 灯
17c: b8 9a sbi 0x17, 0 ; 23
PORTB&=~(1<<PB0);
17e: c0 98 cbi 0x18, 0 ; 24
}
180: 08 95 ret
00000182 <main>:
//--------------------------------------------------------------------------------------------
main(void)
{
182: 8a 9a sbi 0x11, 2 ; 17
#include <I2C.H>
void port (void)
{
DDRD|=(1<<PD2); //485 cs
PORTD&=~(1<<PD2);
184: 92 98 cbi 0x12, 2 ; 18
DDRB|=(1<<PB0); //power 灯
186: b8 9a sbi 0x17, 0 ; 23
PORTB&=~(1<<PB0);
188: c0 98 cbi 0x18, 0 ; 24
main(void)
{
unsigned long int d=0,p[12],n=0,m=0;
unsigned char aa=0,a=0,b=0,c=0,i=0;
port(); //端口初始化
TWCR|=5;
18a: 86 b7 in r24, 0x36 ; 54
18c: 85 60 ori r24, 0x05 ; 5
18e: 86 bf out 0x36, r24 ; 54
TWBR=2;
190: 82 e0 ldi r24, 0x02 ; 2
192: 80 b9 out 0x00, r24 ; 0
TWSR=0;
194: 11 b8 out 0x01, r1 ; 1
sei();
196: 78 94 sei
while(1)
{
twi_write(0x80, 0x01);
198: 61 e0 ldi r22, 0x01 ; 1
19a: 80 e8 ldi r24, 0x80 ; 128
19c: 71 df rcall .-286 ; 0x80 <twi_write>
19e: fc cf rjmp .-8 ; 0x198 <main+0x16>
000001a0 <_exit>:
1a0: f8 94 cli
000001a2 <__stop_program>:
1a2: ff cf rjmp .-2 ; 0x1a2 <__stop_program>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -