📄 main.lss
字号:
main.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 000004b0 00000000 00000000 00000094 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000026 00800060 000004b0 00000544 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000003 00800086 00800086 0000056a 2**0
ALLOC
3 .stab 0000036c 00000000 00000000 0000056c 2**2
CONTENTS, READONLY, DEBUGGING
4 .stabstr 00000084 00000000 00000000 000008d8 2**0
CONTENTS, READONLY, DEBUGGING
5 .debug_aranges 00000020 00000000 00000000 0000095c 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_pubnames 000000e9 00000000 00000000 0000097c 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_info 0000077d 00000000 00000000 00000a65 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_abbrev 00000234 00000000 00000000 000011e2 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_line 00000684 00000000 00000000 00001416 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_frame 000000d0 00000000 00000000 00001a9a 2**0
CONTENTS, READONLY, DEBUGGING
11 .debug_str 0000019c 00000000 00000000 00001b6a 2**0
CONTENTS, READONLY, DEBUGGING
12 .debug_loc 0000023c 00000000 00000000 00001d06 2**0
CONTENTS, READONLY, DEBUGGING
13 .debug_ranges 000000f0 00000000 00000000 00001f42 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 19 01 jmp 0x232 ; 0x232 <__vector_11>
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: e0 eb ldi r30, 0xB0 ; 176
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: a9 38 cpi r26, 0x89 ; 137
82: b1 07 cpc r27, r17
84: e1 f7 brne .-8 ; 0x7e <.do_clear_bss_loop>
86: 0c 94 29 01 jmp 0x252 ; 0x252 <main>
0000008a <__bad_interrupt>:
8a: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
0000008e <Port_Init>:
}
//端口状态初始化设置函数
void Port_Init()
{
8e: 12 ba out 0x12, r1 ; 18
PORTD = 0X00; //USART的发送接收端口分别为PD0和PD1
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 <Port_DS18b20>:
}
void Port_DS18b20()
{
9a: d2 98 cbi 0x1a, 2 ; 26
DDRA &= ~(1 << PA2); // 输入模式(上电时为高电平)
PORTA &= ~(1 << PA2); // 输出锁存器写0,以后不再更改
9c: da 98 cbi 0x1b, 2 ; 27
9e: 08 95 ret
000000a0 <Usart_Init>:
}
//USART寄存器配置函数
void Usart_Init()
{
a0: 1b b8 out 0x0b, r1 ; 11
UCSRA = 0X00;
UCSRC |= (1<<URSEL) | (1 << UCSZ1) | (1 << UCSZ0); //异步,数据格式8,N,1
a2: 80 b5 in r24, 0x20 ; 32
a4: 86 68 ori r24, 0x86 ; 134
a6: 80 bd out 0x20, r24 ; 32
//UCSRC寄存器与UBRRH寄存器共用相同的I/O地址,写 UCSRC 时, URSEL 应设置为 1。
UBRRL = (F_CPU / BAUD / 16 - 1) % 256; //波特率设置
a8: 8d e4 ldi r24, 0x4D ; 77
aa: 89 b9 out 0x09, r24 ; 9
UBRRH = (F_CPU / BAUD / 16 - 1) / 256;
ac: 10 bc out 0x20, r1 ; 32
UCSRB |= (1 << RXCIE) | (1 << RXEN) | (1 << TXEN); //发送使能
ae: 8a b1 in r24, 0x0a ; 10
b0: 88 69 ori r24, 0x98 ; 152
b2: 8a b9 out 0x0a, r24 ; 10
b4: 08 95 ret
000000b6 <Usart_PutChar>:
}
//字节发送函数
void Usart_PutChar(unsigned char cTXData)
{
b6: 5d 9b sbis 0x0b, 5 ; 11
b8: fe cf rjmp .-4 ; 0xb6 <Usart_PutChar>
while( !(UCSRA & (1 << UDRE)) ); //只有数据寄存器为空时才能发送数据
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: fc 01 movw r30, r24
c0: 04 c0 rjmp .+8 ; 0xca <Usart_PutString+0xc>
c2: 5d 9b sbis 0x0b, 5 ; 11
c4: fe cf rjmp .-4 ; 0xc2 <Usart_PutString+0x4>
while (*pcString)
{
Usart_PutChar(*pcString++);
c6: 31 96 adiw r30, 0x01 ; 1
c8: 8c b9 out 0x0c, r24 ; 12
ca: 80 81 ld r24, Z
cc: 88 23 and r24, r24
ce: c9 f7 brne .-14 ; 0xc2 <Usart_PutString+0x4>
d0: 08 95 ret
000000d2 <DS18B20_Init>:
}
}
//DS18B20初始化
unsigned char DS18B20_Init()
{
d2: d2 9a sbi 0x1a, 2 ; 26
d4: 29 ee ldi r18, 0xE9 ; 233
d6: 31 e0 ldi r19, 0x01 ; 1
d8: e3 e0 ldi r30, 0x03 ; 3
da: f0 e0 ldi r31, 0x00 ; 0
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
dc: cf 01 movw r24, r30
de: 01 97 sbiw r24, 0x01 ; 1
e0: f1 f7 brne .-4 ; 0xde <DS18B20_Init+0xc>
SET_OUT; //PA2设置为输出口(相当于拉低数据线上的电平)
Delayus(490); //延时大于480us
SET_IN; //输入 释放数据线(相当于拉高数据线上的电平)
Delayus(68); //延时大于60US,
//while(DQ_IN); //可以用两个while()死循环来判断复位是否成功,当数据线被拉低,说明
//while(!(DQ_IN)); //18b20开始复位应答,当数据线变高,说明应答完毕
if(DQ_IN) //判断DS18B20是否拉低数据线
{
OK_Flag = 0; // 数据线是高?复位失败
}
else
{
OK_Flag = 1; // 数据线是低?复位成功
}
Delayus(422); //有复位应答信号后,应当再延时一段时间(480-68),以等待应答完毕
return OK_Flag; //返回复位标志
}
//从DS18B20读取一个字节数据
unsigned char Read_18b20()
{
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字节数据
}
//向DS18B20写1字节数据
void Write_18b20(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--)
e2: 21 50 subi r18, 0x01 ; 1
e4: 30 40 sbci r19, 0x00 ; 0
e6: 8f ef ldi r24, 0xFF ; 255
e8: 2f 3f cpi r18, 0xFF ; 255
ea: 38 07 cpc r19, r24
ec: b9 f7 brne .-18 ; 0xdc <DS18B20_Init+0xa>
ee: d2 98 cbi 0x1a, 2 ; 26
f0: 23 e4 ldi r18, 0x43 ; 67
f2: 30 e0 ldi r19, 0x00 ; 0
f4: e3 e0 ldi r30, 0x03 ; 3
f6: f0 e0 ldi r31, 0x00 ; 0
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
f8: cf 01 movw r24, r30
fa: 01 97 sbiw r24, 0x01 ; 1
fc: f1 f7 brne .-4 ; 0xfa <DS18B20_Init+0x28>
fe: 21 50 subi r18, 0x01 ; 1
100: 30 40 sbci r19, 0x00 ; 0
102: 8f ef ldi r24, 0xFF ; 255
104: 2f 3f cpi r18, 0xFF ; 255
106: 38 07 cpc r19, r24
108: b9 f7 brne .-18 ; 0xf8 <DS18B20_Init+0x26>
10a: ca 9b sbis 0x19, 2 ; 25
10c: 03 c0 rjmp .+6 ; 0x114 <DS18B20_Init+0x42>
10e: 10 92 88 00 sts 0x0088, r1
112: 03 c0 rjmp .+6 ; 0x11a <DS18B20_Init+0x48>
114: 81 e0 ldi r24, 0x01 ; 1
116: 80 93 88 00 sts 0x0088, r24
11a: 25 ea ldi r18, 0xA5 ; 165
11c: 31 e0 ldi r19, 0x01 ; 1
11e: e3 e0 ldi r30, 0x03 ; 3
120: f0 e0 ldi r31, 0x00 ; 0
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
122: cf 01 movw r24, r30
124: 01 97 sbiw r24, 0x01 ; 1
126: f1 f7 brne .-4 ; 0x124 <DS18B20_Init+0x52>
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: b9 f7 brne .-18 ; 0x122 <DS18B20_Init+0x50>
134: 80 91 88 00 lds r24, 0x0088
138: 99 27 eor r25, r25
13a: 08 95 ret
0000013c <Read_18b20>:
13c: 50 e0 ldi r21, 0x00 ; 0
13e: 40 e0 ldi r20, 0x00 ; 0
140: e3 e0 ldi r30, 0x03 ; 3
142: f0 e0 ldi r31, 0x00 ; 0
144: d2 9a sbi 0x1a, 2 ; 26
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
146: cf 01 movw r24, r30
148: 01 97 sbiw r24, 0x01 ; 1
14a: f1 f7 brne .-4 ; 0x148 <Read_18b20+0xc>
14c: cf 01 movw r24, r30
14e: 01 97 sbiw r24, 0x01 ; 1
150: f1 f7 brne .-4 ; 0x14e <Read_18b20+0x12>
152: d2 98 cbi 0x1a, 2 ; 26
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
154: cf 01 movw r24, r30
156: 01 97 sbiw r24, 0x01 ; 1
158: f1 f7 brne .-4 ; 0x156 <Read_18b20+0x1a>
15a: cf 01 movw r24, r30
15c: 01 97 sbiw r24, 0x01 ; 1
15e: f1 f7 brne .-4 ; 0x15c <Read_18b20+0x20>
160: cf 01 movw r24, r30
162: 01 97 sbiw r24, 0x01 ; 1
164: f1 f7 brne .-4 ; 0x162 <Read_18b20+0x26>
166: cf 01 movw r24, r30
168: 01 97 sbiw r24, 0x01 ; 1
16a: f1 f7 brne .-4 ; 0x168 <Read_18b20+0x2c>
16c: 46 95 lsr r20
16e: ca 99 sbic 0x19, 2 ; 25
170: 40 68 ori r20, 0x80 ; 128
172: 2d e3 ldi r18, 0x3D ; 61
174: 30 e0 ldi r19, 0x00 ; 0
176: a3 e0 ldi r26, 0x03 ; 3
178: b0 e0 ldi r27, 0x00 ; 0
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
17a: cd 01 movw r24, r26
17c: 01 97 sbiw r24, 0x01 ; 1
17e: f1 f7 brne .-4 ; 0x17c <Read_18b20+0x40>
180: 21 50 subi r18, 0x01 ; 1
182: 30 40 sbci r19, 0x00 ; 0
184: 8f ef ldi r24, 0xFF ; 255
186: 2f 3f cpi r18, 0xFF ; 255
188: 38 07 cpc r19, r24
18a: b9 f7 brne .-18 ; 0x17a <Read_18b20+0x3e>
18c: 5f 5f subi r21, 0xFF ; 255
18e: 58 30 cpi r21, 0x08 ; 8
190: c9 f6 brne .-78 ; 0x144 <Read_18b20+0x8>
192: 84 2f mov r24, r20
194: 99 27 eor r25, r25
196: 08 95 ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -