📄 hjmcu.lss
字号:
hjmcu.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 000004e4 00000000 00000000 00000094 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000026 00800060 000004e4 00000578 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000012 00800086 00800086 0000059e 2**0
ALLOC
3 .noinit 00000000 00800098 00800098 0000059e 2**0
CONTENTS
4 .eeprom 00000000 00810000 00810000 0000059e 2**0
CONTENTS
5 .stab 0000036c 00000000 00000000 000005a0 2**2
CONTENTS, READONLY, DEBUGGING
6 .stabstr 00000084 00000000 00000000 0000090c 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_aranges 00000014 00000000 00000000 00000990 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_pubnames 000001b0 00000000 00000000 000009a4 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_info 00000477 00000000 00000000 00000b54 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_abbrev 000001a1 00000000 00000000 00000fcb 2**0
CONTENTS, READONLY, DEBUGGING
11 .debug_line 0000044e 00000000 00000000 0000116c 2**0
CONTENTS, READONLY, DEBUGGING
12 .debug_str 0000022d 00000000 00000000 000015ba 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 6e 00 jmp 0xdc <__vector_11>
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 ee ldi r30, 0xE4 ; 228
68: f4 e0 ldi r31, 0x04 ; 4
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 38 cpi r26, 0x86 ; 134
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: a6 e8 ldi r26, 0x86 ; 134
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: a8 39 cpi r26, 0x98 ; 152
82: b1 07 cpc r27, r17
84: e1 f7 brne .-8 ; 0x7e <.do_clear_bss_loop>
86: 0c 94 2d 01 jmp 0x25a <main>
0000008a <__bad_interrupt>:
8a: 0c 94 00 00 jmp 0x0 <__vectors>
0000008e <Port_Init>:
//端口状态初始化设置函数
void Port_Init()
{
PORTD = 0X00; //USART的发送接收端口分别为PD0和PD1
8e: 12 ba out 0x12, r1 ; 18
DDRD |= (1 << PD1); //PD0为接收端口,置为输入口;PD1为发送端口,置为输出口
90: 89 9a sbi 0x11, 1 ; 17
PORTB = 0x00;
92: 18 ba out 0x18, r1 ; 24
DDRB = 0xff;
94: 8f ef ldi r24, 0xFF ; 255
96: 87 bb out 0x17, r24 ; 23
98: 08 95 ret
0000009a <Usart_Init>:
}
void Port_DS18B20()
{
DDRC &= ~(1 << PC2); // 输入模式(上电时为高电平)
PORTC &= ~(1 << PC2); // 输出锁存器写0,以后不再更改
}
//USART寄存器配置函数
void Usart_Init()
{
UCSRA = 0X00;
9a: 1b b8 out 0x0b, r1 ; 11
UCSRC |= (1<<URSEL) | (1 << UCSZ1) | (1 << UCSZ0); //异步,数据格式8,N,1
9c: 80 b5 in r24, 0x20 ; 32
9e: 86 68 ori r24, 0x86 ; 134
a0: 80 bd out 0x20, r24 ; 32
//UCSRC寄存器与UBRRH寄存器共用相同的I/O地址,写 UCSRC 时, URSEL 应设置为 1。
UBRRL = (F_CPU / BAUD / 16 - 1) % 256; //波特率设置
a2: 8d e4 ldi r24, 0x4D ; 77
a4: 89 b9 out 0x09, r24 ; 9
UBRRH = (F_CPU / BAUD / 16 - 1) / 256;
a6: 10 bc out 0x20, r1 ; 32
UCSRB |= (1 << RXCIE) | (1 << RXEN) | (1 << TXEN); //发送使能
a8: 8a b1 in r24, 0x0a ; 10
aa: 88 69 ori r24, 0x98 ; 152
ac: 8a b9 out 0x0a, r24 ; 10
ae: 08 95 ret
000000b0 <Port_DS18B20>:
b0: a2 98 cbi 0x14, 2 ; 20
b2: aa 98 cbi 0x15, 2 ; 21
b4: 08 95 ret
000000b6 <Usart_PutChar>:
}
//字节发送函数
void Usart_PutChar(unsigned char cTXData)
{
while( !(UCSRA & (1 << UDRE)) ); //只有数据寄存器为空时才能发送数据
b6: 5d 9b sbis 0x0b, 5 ; 11
b8: fe cf rjmp .-4 ; 0xb6 <Usart_PutChar>
UDR = cTXData; //发送数据送USART I/O数据寄存器-UDR
ba: 8c b9 out 0x0c, r24 ; 12
bc: 08 95 ret
000000be <Usart_PutString>:
}
//接收中断函数
ISR(USART_RXC_vect )
{
unsigned char Rev;
Rev = UDR; //从USART I/O数据寄存器-UDR中读出数据
Usart_PutChar(Rev); //将接收到的数据发送
}
void Usart_PutString(unsigned char *pcString)
{
be: cf 93 push r28
c0: df 93 push r29
c2: ec 01 movw r28, r24
while (*pcString)
{
Usart_PutChar(*pcString++);
c4: 88 81 ld r24, Y
c6: 88 23 and r24, r24
c8: 31 f0 breq .+12 ; 0xd6 <Usart_PutString+0x18>
ca: 89 91 ld r24, Y+
cc: 0e 94 5b 00 call 0xb6 <Usart_PutChar>
d0: 88 81 ld r24, Y
d2: 88 23 and r24, r24
d4: d1 f7 brne .-12 ; 0xca <Usart_PutString+0xc>
d6: df 91 pop r29
d8: cf 91 pop r28
da: 08 95 ret
000000dc <__vector_11>:
dc: 1f 92 push r1
de: 0f 92 push r0
e0: 0f b6 in r0, 0x3f ; 63
e2: 0f 92 push r0
e4: 11 24 eor r1, r1
e6: 2f 93 push r18
e8: 3f 93 push r19
ea: 4f 93 push r20
ec: 5f 93 push r21
ee: 6f 93 push r22
f0: 7f 93 push r23
f2: 8f 93 push r24
f4: 9f 93 push r25
f6: af 93 push r26
f8: bf 93 push r27
fa: ef 93 push r30
fc: ff 93 push r31
fe: 8c b1 in r24, 0x0c ; 12
100: 0e 94 5b 00 call 0xb6 <Usart_PutChar>
104: ff 91 pop r31
106: ef 91 pop r30
108: bf 91 pop r27
10a: af 91 pop r26
10c: 9f 91 pop r25
10e: 8f 91 pop r24
110: 7f 91 pop r23
112: 6f 91 pop r22
114: 5f 91 pop r21
116: 4f 91 pop r20
118: 3f 91 pop r19
11a: 2f 91 pop r18
11c: 0f 90 pop r0
11e: 0f be out 0x3f, r0 ; 63
120: 0f 90 pop r0
122: 1f 90 pop r1
124: 18 95 reti
00000126 <Delayus>:
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
126: 9c 01 movw r18, r24
128: 21 50 subi r18, 0x01 ; 1
12a: 30 40 sbci r19, 0x00 ; 0
12c: 8f ef ldi r24, 0xFF ; 255
12e: 2f 3f cpi r18, 0xFF ; 255
130: 38 07 cpc r19, r24
132: 29 f0 breq .+10 ; 0x13e <Delayus+0x18>
134: 83 e0 ldi r24, 0x03 ; 3
136: 90 e0 ldi r25, 0x00 ; 0
138: 01 97 sbiw r24, 0x01 ; 1
13a: f1 f7 brne .-4 ; 0x138 <Delayus+0x12>
13c: f5 cf rjmp .-22 ; 0x128 <Delayus+0x2>
13e: 08 95 ret
00000140 <Delayms>:
}
}
//DS18B20初始化
unsigned char DS18B20_Init()
{
SET_OUT; //PA2设置为输出口(相当于拉低数据线上的电平)
Delayus(490); //延时大于480us
SET_IN; //输入 释放数据线(相当于拉高数据线上的电平)
Delayus(68); //延时大于60US,
//while(DQ_IN); //可以用两个while()死循环来判断复位是否成功,当数据线被拉低,说明
//while(!(DQ_IN)); //DS18B20开始复位应答,当数据线变高,说明应答完毕
if(DQ_IN) //判断DSDS18B20是否拉低数据线
{
OK_Flag = 0; // 数据线是高?复位失败
}
else
{
OK_Flag = 1; // 数据线是低?复位成功
}
Delayus(422); //有复位应答信号后,应当再延时一段时间(480-68),以等待应答完毕
return OK_Flag; //返回复位标志
}
//从DSDS18B20读取一个字节数据
unsigned char Read_DS18B20()
{
unsigned char i;
unsigned char dat = 0; // dat用于存储读到的数据,先清零
for(i = 0;i < 8;i++) //共读8位数据,构成一个字节
{
SET_OUT; //定义为输出(拉低数据线)
Delayus(2); //拉低2微秒
SET_IN; //定义成输入,读入数据(同时也相当于拉高数据线)
Delayus(4); //延时
dat = dat >> 1; //数据右移,读顺序:先低后高
if(DQ_IN) //读数据,
{
dat |= 0x80; //如果是高,置1,右移数据
}
Delayus(62); //延时大于60us
}
return dat; //返回读到的1字节数据
}
//向DSDS18B20写1字节数据
void Write_DS18B20(unsigned char dat)
{
unsigned char i;
for(i = 0;i < 8;i++) //写8次,一次写1位,先写低字节
{
SET_OUT; //拉低数据线2us,开始写数据
Delayus(2); //
if(dat & 0x01) //写数据
{
SET_IN; //写1
}
else
{
SET_OUT; //写0
}
dat >>= 1; //数据右移1位,先写低位
Delayus(62); //延时大于60us
SET_IN; //拉高数据线
Delayus(2); //写两位数据的时间间隔
}
}
//us级别的延时函数
void Delayus(unsigned int lus)
{
while(lus--)
{
_delay_loop_2(3); //_delay_loop_2(1)是延时4个时钟周期,参数为3则延时12
//个时钟周期,本实验用12M晶体,则12个时钟周期为12/12=1us
}
}
//ms级别的延时函数
void Delayms(unsigned int lms)
{
140: cf 93 push r28
142: df 93 push r29
while(lms--)
{
Delayus(1000); //延时1ms
144: ec 01 movw r28, r24
146: 21 97 sbiw r28, 0x01 ; 1
148: 8f ef ldi r24, 0xFF ; 255
14a: cf 3f cpi r28, 0xFF ; 255
14c: d8 07 cpc r29, r24
14e: 49 f0 breq .+18 ; 0x162 <Delayms+0x22>
150: 88 ee ldi r24, 0xE8 ; 232
152: 93 e0 ldi r25, 0x03 ; 3
154: 0e 94 93 00 call 0x126 <Delayus>
158: 21 97 sbiw r28, 0x01 ; 1
15a: 8f ef ldi r24, 0xFF ; 255
15c: cf 3f cpi r28, 0xFF ; 255
15e: d8 07 cpc r29, r24
160: b9 f7 brne .-18 ; 0x150 <Delayms+0x10>
162: df 91 pop r29
164: cf 91 pop r28
166: 08 95 ret
00000168 <DS18B20_Init>:
168: a2 9a sbi 0x14, 2 ; 20
16a: 8a ee ldi r24, 0xEA ; 234
16c: 91 e0 ldi r25, 0x01 ; 1
16e: 0e 94 93 00 call 0x126 <Delayus>
172: a2 98 cbi 0x14, 2 ; 20
174: 84 e4 ldi r24, 0x44 ; 68
176: 90 e0 ldi r25, 0x00 ; 0
178: 0e 94 93 00 call 0x126 <Delayus>
17c: 9a 9b sbis 0x13, 2 ; 19
17e: 03 c0 rjmp .+6 ; 0x186 <DS18B20_Init+0x1e>
180: 10 92 8e 00 sts 0x008E, r1
184: 03 c0 rjmp .+6 ; 0x18c <DS18B20_Init+0x24>
186: 81 e0 ldi r24, 0x01 ; 1
188: 80 93 8e 00 sts 0x008E, r24
18c: 86 ea ldi r24, 0xA6 ; 166
18e: 91 e0 ldi r25, 0x01 ; 1
190: 0e 94 93 00 call 0x126 <Delayus>
194: 80 91 8e 00 lds r24, 0x008E
198: 99 27 eor r25, r25
19a: 08 95 ret
0000019c <Read_DS18B20>:
19c: 1f 93 push r17
19e: cf 93 push r28
1a0: c0 e0 ldi r28, 0x00 ; 0
1a2: 17 e0 ldi r17, 0x07 ; 7
1a4: a2 9a sbi 0x14, 2 ; 20
1a6: 82 e0 ldi r24, 0x02 ; 2
1a8: 90 e0 ldi r25, 0x00 ; 0
1aa: 0e 94 93 00 call 0x126 <Delayus>
1ae: a2 98 cbi 0x14, 2 ; 20
1b0: 84 e0 ldi r24, 0x04 ; 4
1b2: 90 e0 ldi r25, 0x00 ; 0
1b4: 0e 94 93 00 call 0x126 <Delayus>
1b8: c6 95 lsr r28
1ba: 9a 99 sbic 0x13, 2 ; 19
1bc: c0 68 ori r28, 0x80 ; 128
1be: 8e e3 ldi r24, 0x3E ; 62
1c0: 90 e0 ldi r25, 0x00 ; 0
1c2: 0e 94 93 00 call 0x126 <Delayus>
1c6: 11 50 subi r17, 0x01 ; 1
1c8: 17 ff sbrs r17, 7
1ca: ec cf rjmp .-40 ; 0x1a4 <Read_DS18B20+0x8>
1cc: 8c 2f mov r24, r28
1ce: 99 27 eor r25, r25
1d0: cf 91 pop r28
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -