📄 hjmcu.lss
字号:
hjmcu.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 000002d4 00000000 00000000 00000094 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000000 00800060 000002d4 00000368 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000000 00800060 000002d4 00000368 2**0
ALLOC
3 .noinit 00000000 00800060 00800060 00000368 2**0
CONTENTS
4 .eeprom 00000000 00810000 00810000 00000368 2**0
CONTENTS
5 .stab 0000036c 00000000 00000000 00000368 2**2
CONTENTS, READONLY, DEBUGGING
6 .stabstr 00000084 00000000 00000000 000006d4 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_aranges 00000014 00000000 00000000 00000758 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_pubnames 000000a7 00000000 00000000 0000076c 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_info 00000259 00000000 00000000 00000813 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_abbrev 0000013c 00000000 00000000 00000a6c 2**0
CONTENTS, READONLY, DEBUGGING
11 .debug_line 0000031d 00000000 00000000 00000ba8 2**0
CONTENTS, READONLY, DEBUGGING
12 .debug_str 000000fa 00000000 00000000 00000ec5 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 45 00 jmp 0x8a <__bad_interrupt>
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 45 00 jmp 0x8a <__bad_interrupt>
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: d4 e0 ldi r29, 0x04 ; 4
5c: de bf out 0x3e, r29 ; 62
5e: cd bf out 0x3d, r28 ; 61
00000060 <__do_copy_data>:
60: 10 e0 ldi r17, 0x00 ; 0
62: a0 e6 ldi r26, 0x60 ; 96
64: b0 e0 ldi r27, 0x00 ; 0
66: e4 ed ldi r30, 0xD4 ; 212
68: f2 e0 ldi r31, 0x02 ; 2
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: a0 36 cpi r26, 0x60 ; 96
72: b1 07 cpc r27, r17
74: d9 f7 brne .-10 ; 0x6c <.do_copy_data_loop>
00000076 <__do_clear_bss>:
76: 10 e0 ldi r17, 0x00 ; 0
78: a0 e6 ldi r26, 0x60 ; 96
7a: b0 e0 ldi r27, 0x00 ; 0
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: a0 36 cpi r26, 0x60 ; 96
82: b1 07 cpc r27, r17
84: e1 f7 brne .-8 ; 0x7e <.do_clear_bss_loop>
86: 0c 94 4e 01 jmp 0x29c <main>
0000008a <__bad_interrupt>:
8a: 0c 94 00 00 jmp 0x0 <__vectors>
0000008e <Delayus>:
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
8e: 9c 01 movw r18, r24
90: 21 50 subi r18, 0x01 ; 1
92: 30 40 sbci r19, 0x00 ; 0
94: 8f ef ldi r24, 0xFF ; 255
96: 2f 3f cpi r18, 0xFF ; 255
98: 38 07 cpc r19, r24
9a: 29 f0 breq .+10 ; 0xa6 <Delayus+0x18>
9c: 83 e0 ldi r24, 0x03 ; 3
9e: 90 e0 ldi r25, 0x00 ; 0
a0: 01 97 sbiw r24, 0x01 ; 1
a2: f1 f7 brne .-4 ; 0xa0 <Delayus+0x12>
a4: f5 cf rjmp .-22 ; 0x90 <Delayus+0x2>
a6: 08 95 ret
000000a8 <I2C_Init>:
//I2C初始化函数
void I2C_Init(void)
{
SCL_LOW; //SCL的PORT状态锁定为0,以后不再改变
a8: a9 98 cbi 0x15, 1 ; 21
SCL_INPUT; //SCL设置为输入口
aa: a1 98 cbi 0x14, 1 ; 20
SDA_LOW; //SDA的PORT状态锁定为0,以后不再改变
ac: a8 98 cbi 0x15, 0 ; 21
SDA_INPUT; //SDA设置为输入口
ae: a0 98 cbi 0x14, 0 ; 20
Delayus(10);
b0: 8a e0 ldi r24, 0x0A ; 10
b2: 90 e0 ldi r25, 0x00 ; 0
b4: 0e 94 47 00 call 0x8e <Delayus>
b8: 08 95 ret
000000ba <I2C_Start>:
}
//I2C起始条件
unsigned char I2C_Start(void)
{
Delayus(10);
ba: 8a e0 ldi r24, 0x0A ; 10
bc: 90 e0 ldi r25, 0x00 ; 0
be: 0e 94 47 00 call 0x8e <Delayus>
SDA_INPUT; //SDA高电平
c2: a0 98 cbi 0x14, 0 ; 20
Delayus(10); //延时一段时间,使单片机时钟频率符合I2C时钟
c4: 8a e0 ldi r24, 0x0A ; 10
c6: 90 e0 ldi r25, 0x00 ; 0
c8: 0e 94 47 00 call 0x8e <Delayus>
SCL_INPUT; //SCL高电平
cc: a1 98 cbi 0x14, 1 ; 20
Delayus(10);
ce: 8a e0 ldi r24, 0x0A ; 10
d0: 90 e0 ldi r25, 0x00 ; 0
d2: 0e 94 47 00 call 0x8e <Delayus>
SDA_OUTPUT; //SDA变低,产生由高到低的变化
d6: a0 9a sbi 0x14, 0 ; 20
Delayus(10);
d8: 8a e0 ldi r24, 0x0A ; 10
da: 90 e0 ldi r25, 0x00 ; 0
dc: 0e 94 47 00 call 0x8e <Delayus>
SCL_OUTPUT; //SCL变低,占用总线
e0: a1 9a sbi 0x14, 1 ; 20
Delayus(10);
e2: 8a e0 ldi r24, 0x0A ; 10
e4: 90 e0 ldi r25, 0x00 ; 0
e6: 0e 94 47 00 call 0x8e <Delayus>
return 1;
}
ea: 81 e0 ldi r24, 0x01 ; 1
ec: 90 e0 ldi r25, 0x00 ; 0
ee: 08 95 ret
000000f0 <I2C_Stop>:
//I2C结束条件
void I2C_Stop(void)
{
Delayus(10);
f0: 8a e0 ldi r24, 0x0A ; 10
f2: 90 e0 ldi r25, 0x00 ; 0
f4: 0e 94 47 00 call 0x8e <Delayus>
SDA_OUTPUT; //SDA低电平
f8: a0 9a sbi 0x14, 0 ; 20
Delayus(10);
fa: 8a e0 ldi r24, 0x0A ; 10
fc: 90 e0 ldi r25, 0x00 ; 0
fe: 0e 94 47 00 call 0x8e <Delayus>
SCL_INPUT; //SCL高电平
102: a1 98 cbi 0x14, 1 ; 20
Delayus(10);
104: 8a e0 ldi r24, 0x0A ; 10
106: 90 e0 ldi r25, 0x00 ; 0
108: 0e 94 47 00 call 0x8e <Delayus>
SDA_INPUT; //SDA变为高电平,产生由低到高的变化
10c: a0 98 cbi 0x14, 0 ; 20
Delayus(10);
10e: 8a e0 ldi r24, 0x0A ; 10
110: 90 e0 ldi r25, 0x00 ; 0
112: 0e 94 47 00 call 0x8e <Delayus>
116: 08 95 ret
00000118 <I2C_WriteByte>:
}
//向I2C写一个字节
unsigned char I2C_WriteByte(unsigned char dat)
{
118: 1f 93 push r17
11a: cf 93 push r28
11c: c8 2f mov r28, r24
11e: 17 e0 ldi r17, 0x07 ; 7
unsigned char i,ack; //ack为应答信号
for(i = 0;i < 8; i++) //写8位(1个字节)数据
{
if(dat & 0x80) //写入数据,左移,从最高位写入
120: c7 ff sbrs r28, 7
122: 02 c0 rjmp .+4 ; 0x128 <I2C_WriteByte+0x10>
{
SDA_INPUT; //如果该位为1,SDA拉高电平
124: a0 98 cbi 0x14, 0 ; 20
126: 01 c0 rjmp .+2 ; 0x12a <I2C_WriteByte+0x12>
}
else
{
SDA_OUTPUT; // 如果该位为0,SDA拉低电平
128: a0 9a sbi 0x14, 0 ; 20
}
SCL_INPUT; //SCL高电平,保持数据
12a: a1 98 cbi 0x14, 1 ; 20
Delayus(10);
12c: 8a e0 ldi r24, 0x0A ; 10
12e: 90 e0 ldi r25, 0x00 ; 0
130: 0e 94 47 00 call 0x8e <Delayus>
SCL_OUTPUT; //SCL低电平,数据被送入I2C
134: a1 9a sbi 0x14, 1 ; 20
dat <<= 1; //需要写入的数据左移一位,送最高位
136: cc 0f add r28, r28
Delayus(10); //
138: 8a e0 ldi r24, 0x0A ; 10
13a: 90 e0 ldi r25, 0x00 ; 0
13c: 0e 94 47 00 call 0x8e <Delayus>
140: 11 50 subi r17, 0x01 ; 1
142: 17 ff sbrs r17, 7
144: ed cf rjmp .-38 ; 0x120 <I2C_WriteByte+0x8>
}
Delayus(10);
146: 8a e0 ldi r24, 0x0A ; 10
148: 90 e0 ldi r25, 0x00 ; 0
14a: 0e 94 47 00 call 0x8e <Delayus>
SDA_INPUT; //SDA拉高,同时变为输入口
14e: a0 98 cbi 0x14, 0 ; 20
Delayus(10);
150: 8a e0 ldi r24, 0x0A ; 10
152: 90 e0 ldi r25, 0x00 ; 0
154: 0e 94 47 00 call 0x8e <Delayus>
SCL_INPUT; //SCL拉高,准备读取应答信号
158: a1 98 cbi 0x14, 1 ; 20
Delayus(10);
15a: 8a e0 ldi r24, 0x0A ; 10
15c: 90 e0 ldi r25, 0x00 ; 0
15e: 0e 94 47 00 call 0x8e <Delayus>
if(SDA_INDATA)
162: 98 9b sbis 0x13, 0 ; 19
164: 03 c0 rjmp .+6 ; 0x16c <I2C_WriteByte+0x54>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -