📄 ds18b20.lss
字号:
ds18b20.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00000396 00000000 00000000 00000074 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000012 00800060 00000396 0000040a 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000006 00800072 000003a8 0000041c 2**0
ALLOC
3 .stab 0000036c 00000000 00000000 0000041c 2**2
CONTENTS, READONLY, DEBUGGING
4 .stabstr 00000084 00000000 00000000 00000788 2**0
CONTENTS, READONLY, DEBUGGING
5 .debug_aranges 00000040 00000000 00000000 0000080c 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_pubnames 0000010c 00000000 00000000 0000084c 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_info 00000651 00000000 00000000 00000958 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_abbrev 000002db 00000000 00000000 00000fa9 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_line 00000534 00000000 00000000 00001284 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_frame 00000100 00000000 00000000 000017b8 2**0
CONTENTS, READONLY, DEBUGGING
11 .debug_str 00000185 00000000 00000000 000018b8 2**0
CONTENTS, READONLY, DEBUGGING
12 .debug_loc 000001f7 00000000 00000000 00001a3d 2**0
CONTENTS, READONLY, DEBUGGING
13 .debug_ranges 00000018 00000000 00000000 00001c34 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 0c 94 2a 00 jmp 0x54 ; 0x54 <__ctors_end>
4: 0c 94 45 00 jmp 0x8a ; 0x8a <__bad_interrupt>
8: 0c 94 45 00 jmp 0x8a ; 0x8a <__bad_interrupt>
c: 0c 94 45 00 jmp 0x8a ; 0x8a <__bad_interrupt>
10: 0c 94 45 00 jmp 0x8a ; 0x8a <__bad_interrupt>
14: 0c 94 45 00 jmp 0x8a ; 0x8a <__bad_interrupt>
18: 0c 94 45 00 jmp 0x8a ; 0x8a <__bad_interrupt>
1c: 0c 94 45 00 jmp 0x8a ; 0x8a <__bad_interrupt>
20: 0c 94 45 00 jmp 0x8a ; 0x8a <__bad_interrupt>
24: 0c 94 45 00 jmp 0x8a ; 0x8a <__bad_interrupt>
28: 0c 94 45 00 jmp 0x8a ; 0x8a <__bad_interrupt>
2c: 0c 94 45 00 jmp 0x8a ; 0x8a <__bad_interrupt>
30: 0c 94 45 00 jmp 0x8a ; 0x8a <__bad_interrupt>
34: 0c 94 45 00 jmp 0x8a ; 0x8a <__bad_interrupt>
38: 0c 94 45 00 jmp 0x8a ; 0x8a <__bad_interrupt>
3c: 0c 94 45 00 jmp 0x8a ; 0x8a <__bad_interrupt>
40: 0c 94 45 00 jmp 0x8a ; 0x8a <__bad_interrupt>
44: 0c 94 45 00 jmp 0x8a ; 0x8a <__bad_interrupt>
48: 0c 94 45 00 jmp 0x8a ; 0x8a <__bad_interrupt>
4c: 0c 94 45 00 jmp 0x8a ; 0x8a <__bad_interrupt>
50: 0c 94 45 00 jmp 0x8a ; 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: e6 e9 ldi r30, 0x96 ; 150
68: f3 e0 ldi r31, 0x03 ; 3
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: a2 37 cpi r26, 0x72 ; 114
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: a2 e7 ldi r26, 0x72 ; 114
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 37 cpi r26, 0x78 ; 120
82: b1 07 cpc r27, r17
84: e1 f7 brne .-8 ; 0x7e <.do_clear_bss_loop>
86: 0c 94 5e 01 jmp 0x2bc ; 0x2bc <main>
0000008a <__bad_interrupt>:
8a: 0c 94 00 00 jmp 0 ; 0x0 <__heap_end>
0000008e <DS18b20_config>:
/*----------------------------------------------------------
* 配置avr和18b20的接口
*/
void DS18b20_config(void)
{
8e: 8b 98 cbi 0x11, 3 ; 17
DDRD &= ~OW_18B20; //输入模式(上电为高电平)
PORTD &= ~OW_18B20; //输出锁存器写0,以后不改
90: 93 98 cbi 0x12, 3 ; 18
92: 08 95 ret
00000094 <DS18b20_rest>:
}
/*----------------------------------------------------------
* 复位操作(每一次操作前都要复危)flag 表示是否探测到18b20
*/
uint8_t DS18b20_rest(void)
{
94: 8b 9a sbi 0x11, 3 ; 17
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
96: 8a ee ldi r24, 0xEA ; 234
98: 91 e0 ldi r25, 0x01 ; 1
9a: 01 97 sbiw r24, 0x01 ; 1
9c: f1 f7 brne .-4 ; 0x9a <DS18b20_rest+0x6>
uint8_t flag;
flag = 0;
OW_TO_L(); //设置总线为低电平
wait_us(490); //至少480us
cli();
9e: f8 94 cli
OW_TO_H(); //设置总线为高电平
a0: 8b 98 cbi 0x11, 3 ; 17
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
a2: 83 e4 ldi r24, 0x43 ; 67
a4: 90 e0 ldi r25, 0x00 ; 0
a6: 01 97 sbiw r24, 0x01 ; 1
a8: f1 f7 brne .-4 ; 0xa6 <DS18b20_rest+0x12>
wait_us(67.5); //18b20等待(15-60us)+ 18b20拉低电平(60-240us)
if (OW_STATUS())
aa: 80 b3 in r24, 0x10 ; 16
{
flag = 0; //没有18b20
}
else
{
flag = 1; //有18b20
};
sei();
ac: 78 94 sei
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
ae: e6 ea ldi r30, 0xA6 ; 166
b0: f1 e0 ldi r31, 0x01 ; 1
b2: 31 97 sbiw r30, 0x01 ; 1
b4: f1 f7 brne .-4 ; 0xb2 <DS18b20_rest+0x1e>
b6: 86 95 lsr r24
b8: 86 95 lsr r24
ba: 86 95 lsr r24
bc: 80 95 com r24
be: 81 70 andi r24, 0x01 ; 1
wait_us(490-67.5);
return(flag);
}
c0: 99 27 eor r25, r25
c2: 08 95 ret
000000c4 <DS18b20_write>:
/*-------------------------------------------------------------
* 写命令到18b20
*/
void DS18b20_write(uint8_t command)
{
c4: 28 2f mov r18, r24
c6: 30 e0 ldi r19, 0x00 ; 0
c8: e2 e0 ldi r30, 0x02 ; 2
ca: f0 e0 ldi r31, 0x00 ; 0
cc: ae e3 ldi r26, 0x3E ; 62
ce: b0 e0 ldi r27, 0x00 ; 0
uint8_t count;
for(count=0;count<8; count++)
{
cli();
d0: f8 94 cli
OW_TO_L();
d2: 8b 9a sbi 0x11, 3 ; 17
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
d4: cf 01 movw r24, r30
d6: 01 97 sbiw r24, 0x01 ; 1
d8: f1 f7 brne .-4 ; 0xd6 <DS18b20_write+0x12>
wait_us(2); //每传送一位至少要隔1us
if (command & 0X01)
da: 20 ff sbrs r18, 0
dc: 02 c0 rjmp .+4 ; 0xe2 <DS18b20_write+0x1e>
{
OW_TO_H();
de: 8b 98 cbi 0x11, 3 ; 17
e0: 01 c0 rjmp .+2 ; 0xe4 <DS18b20_write+0x20>
}
else
{
OW_TO_L();
e2: 8b 9a sbi 0x11, 3 ; 17
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
e4: cd 01 movw r24, r26
e6: 01 97 sbiw r24, 0x01 ; 1
e8: f1 f7 brne .-4 ; 0xe6 <DS18b20_write+0x22>
};
command = command>>1;
wait_us(62);
OW_TO_H();
ea: 8b 98 cbi 0x11, 3 ; 17
sei();
ec: 78 94 sei
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
ee: cf 01 movw r24, r30
f0: 01 97 sbiw r24, 0x01 ; 1
f2: f1 f7 brne .-4 ; 0xf0 <DS18b20_write+0x2c>
f4: 3f 5f subi r19, 0xFF ; 255
f6: 38 30 cpi r19, 0x08 ; 8
f8: 11 f0 breq .+4 ; 0xfe <DS18b20_write+0x3a>
fa: 26 95 lsr r18
fc: e9 cf rjmp .-46 ; 0xd0 <DS18b20_write+0xc>
fe: 08 95 ret
00000100 <DS18b20_read>:
wait_us(2);
}
}
/*-----------------------------------------------------------------
* DS18B20读配置或数据
*/
uint8_t DS18b20_read(void)
{
100: cf 93 push r28
102: df 93 push r29
104: 30 e0 ldi r19, 0x00 ; 0
106: 20 e0 ldi r18, 0x00 ; 0
108: c2 e0 ldi r28, 0x02 ; 2
10a: d0 e0 ldi r29, 0x00 ; 0
10c: a4 e0 ldi r26, 0x04 ; 4
10e: b0 e0 ldi r27, 0x00 ; 0
110: ee e3 ldi r30, 0x3E ; 62
112: f0 e0 ldi r31, 0x00 ; 0
uint8_t count,data;
data = 0x00;
for (count=0; count<8; count++)
{
cli();
114: f8 94 cli
OW_TO_L();
116: 8b 9a sbi 0x11, 3 ; 17
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
118: ce 01 movw r24, r28
11a: 01 97 sbiw r24, 0x01 ; 1
11c: f1 f7 brne .-4 ; 0x11a <DS18b20_read+0x1a>
wait_us(2);
OW_TO_H();
11e: 8b 98 cbi 0x11, 3 ; 17
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
120: cd 01 movw r24, r26
122: 01 97 sbiw r24, 0x01 ; 1
124: f1 f7 brne .-4 ; 0x122 <DS18b20_read+0x22>
wait_us(4);
data = data>>1;
126: 26 95 lsr r18
if (OW_STATUS())
128: 83 99 sbic 0x10, 3 ; 16
{
data|= 0x80; //读取总线电平,先接受低位再接受高位
12a: 20 68 ori r18, 0x80 ; 128
};
sei();
12c: 78 94 sei
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
12e: cf 01 movw r24, r30
130: 01 97 sbiw r24, 0x01 ; 1
132: f1 f7 brne .-4 ; 0x130 <DS18b20_read+0x30>
134: 3f 5f subi r19, 0xFF ; 255
136: 38 30 cpi r19, 0x08 ; 8
138: 69 f7 brne .-38 ; 0x114 <DS18b20_read+0x14>
wait_us(62);
}
return(data);
}
13a: 82 2f mov r24, r18
13c: 99 27 eor r25, r25
13e: df 91 pop r29
140: cf 91 pop r28
142: 08 95 ret
00000144 <covert_t>:
/*------------------------------------------------------------------
*开始采集温度
*/
void covert_t(void)
{
144: 0e 94 4a 00 call 0x94 ; 0x94 <DS18b20_rest>
148: 88 23 and r24, r24
14a: 31 f0 breq .+12 ; 0x158 <covert_t+0x14>
if (DS18b20_rest())
{
DS18b20_write(0xcc); //由于只有一个18b20跳过多器件识别
14c: 8c ec ldi r24, 0xCC ; 204
14e: 0e 94 62 00 call 0xc4 ; 0xc4 <DS18b20_write>
DS18b20_write(0x44); //启动温度转换
152: 84 e4 ldi r24, 0x44 ; 68
154: 0e 94 62 00 call 0xc4 ; 0xc4 <DS18b20_write>
158: 08 95 ret
0000015a <read_t>:
}
}
/*------------------------------------------------------------------
* 读出18b20采集的温度数据,
*/
uint16_t read_t(void)
{
15a: 0f 93 push r16
15c: 1f 93 push r17
uint16_t value ;
value = 0x0000;
if(DS18b20_rest())
15e: 0e 94 4a 00 call 0x94 ; 0x94 <DS18b20_rest>
162: 88 23 and r24, r24
164: 31 f0 breq .+12 ; 0x172 <read_t+0x18>
{
DS18b20_write(0xcc); //由于只有一个18b20跳过多器件识别
166: 8c ec ldi r24, 0xCC ; 204
168: 0e 94 62 00 call 0xc4 ; 0xc4 <DS18b20_write>
DS18b20_write(0xbe); //读出18b20 RAM中的内容
16c: 8e eb ldi r24, 0xBE ; 190
16e: 0e 94 62 00 call 0xc4 ; 0xc4 <DS18b20_write>
}
value = DS18b20_read(); //读出低字节
172: 0e 94 80 00 call 0x100 ; 0x100 <DS18b20_read>
176: 08 2f mov r16, r24
178: 11 27 eor r17, r17
value += DS18b20_read()<<8; //读出高字节
17a: 0e 94 80 00 call 0x100 ; 0x100 <DS18b20_read>
17e: 99 27 eor r25, r25
180: 98 2f mov r25, r24
182: 88 27 eor r24, r24
return value;
}
184: 80 0f add r24, r16
186: 91 1f adc r25, r17
188: 1f 91 pop r17
18a: 0f 91 pop r16
18c: 08 95 ret
0000018e <put_c>:
void put_c(unsigned char c) //发送采用查询方式
{
18e: 5d 9b sbis 0x0b, 5 ; 11
190: fe cf rjmp .-4 ; 0x18e <put_c>
while( !(UCSRA & (1<<UDRE)) );
UDR=c;
192: 8c b9 out 0x0c, r24 ; 12
194: 08 95 ret
00000196 <init_USART>:
}
void put_s(unsigned char *ptr)
{
while (*ptr)
{
put_c(*ptr++);
}
}
void init_USART(void)//USART 初始化
{
196: 86 e8 ldi r24, 0x86 ; 134
198: 80 bd out 0x20, r24 ; 32
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -