📄 main.lss
字号:
main.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 000003f6 00000000 00000000 00000094 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 0000001e 00800060 000003f6 0000048a 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000002 0080007e 0080007e 000004a8 2**0
ALLOC
3 .noinit 00000000 00800080 00800080 000004a8 2**0
CONTENTS
4 .eeprom 00000000 00810000 00810000 000004a8 2**0
CONTENTS
5 .stab 00001014 00000000 00000000 000004a8 2**2
CONTENTS, READONLY, DEBUGGING
6 .stabstr 0000088d 00000000 00000000 000014bc 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 0c 94 2a 00 jmp 0x54
4: 0c 94 45 00 jmp 0x8a
8: 0c 94 45 00 jmp 0x8a
c: 0c 94 45 00 jmp 0x8a
10: 0c 94 45 00 jmp 0x8a
14: 0c 94 45 00 jmp 0x8a
18: 0c 94 45 00 jmp 0x8a
1c: 0c 94 45 00 jmp 0x8a
20: 0c 94 45 00 jmp 0x8a
24: 0c 94 45 00 jmp 0x8a
28: 0c 94 45 00 jmp 0x8a
2c: 0c 94 45 00 jmp 0x8a
30: 0c 94 45 00 jmp 0x8a
34: 0c 94 45 00 jmp 0x8a
38: 0c 94 45 00 jmp 0x8a
3c: 0c 94 45 00 jmp 0x8a
40: 0c 94 45 00 jmp 0x8a
44: 0c 94 45 00 jmp 0x8a
48: 0c 94 45 00 jmp 0x8a
4c: 0c 94 45 00 jmp 0x8a
50: 0c 94 45 00 jmp 0x8a
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 ef ldi r30, 0xF6 ; 246
68: f3 e0 ldi r31, 0x03 ; 3
6a: 02 c0 rjmp .+4 ; 0x70
0000006c <.do_copy_data_loop>:
6c: 05 90 lpm r0, Z+
6e: 0d 92 st X+, r0
00000070 <.do_copy_data_start>:
70: ae 37 cpi r26, 0x7E ; 126
72: b1 07 cpc r27, r17
74: d9 f7 brne .-10 ; 0x6c
00000076 <__do_clear_bss>:
76: 10 e0 ldi r17, 0x00 ; 0
78: ae e7 ldi r26, 0x7E ; 126
7a: b0 e0 ldi r27, 0x00 ; 0
7c: 01 c0 rjmp .+2 ; 0x80
0000007e <.do_clear_bss_loop>:
7e: 1d 92 st X+, r1
00000080 <.do_clear_bss_start>:
80: a0 38 cpi r26, 0x80 ; 128
82: b1 07 cpc r27, r17
84: e1 f7 brne .-8 ; 0x7e
86: 0c 94 c2 01 jmp 0x384
0000008a <__bad_interrupt>:
8a: 0c 94 00 00 jmp 0x0
0000008e <DELAY_1ms>:
/**************************************************************************************/
void DELAY_1ms(void) //1ms延时函数
{
unsigned int i;
for (i=0;i<(unsigned int)(XTAL*143-2);i++);
8e: 8f e1 ldi r24, 0x1F ; 31
90: 96 e0 ldi r25, 0x06 ; 6
92: 04 97 sbiw r24, 0x04 ; 4
94: 97 ff sbrs r25, 7
96: fd cf rjmp .-6 ; 0x92
98: 08 95 ret
0000009a <DELAY_nms>:
}
/**************************************************************************************/
//函数名 :main
//属性 :私有
//功能 :主函数
//输入参数 :
//输出参数 :
//返回值 :
//修改日期 :
//修改人 :
/**************************************************************************************/
void DELAY_nms(unsigned int n) //N ms延时函数
{
9a: cf 93 push r28
9c: df 93 push r29
unsigned int i=0;
for (i=0;i<n;i++)
9e: 00 97 sbiw r24, 0x00 ; 0
a0: 29 f0 breq .+10 ; 0xac
a2: ec 01 movw r28, r24
DELAY_1ms();
a4: 0e 94 47 00 call 0x8e
a8: 21 97 sbiw r28, 0x01 ; 1
aa: e1 f7 brne .-8 ; 0xa4
ac: df 91 pop r29
ae: cf 91 pop r28
b0: 08 95 ret
000000b2 <ds18b20_config>:
* 配置(使能)AVR与DS18B20的接口
*/
void ds18b20_config(void)
{
DDRD &= ~DQ_18B20; // 输入模式(上电时为高电平)
b2: 8b 98 cbi 0x11, 3 ; 17
PORTD &= ~DQ_18B20; // 输出锁存器写0,以后不再更改
b4: 93 98 cbi 0x12, 3 ; 18
b6: 08 95 ret
000000b8 <ds18b20_reset>:
}
/*-------------------------------------------------------
* 复位1-wire总线,并探测是否有温度芯片DS18B20(TO-92
* 封装)挂在总线上,有返回SUCC,没有返回FAIL
*/
unsigned char ds18b20_reset(void)
{
unsigned char bus_flag;
DQ_TO_0(); // 设置1-wire总线为低电平(占领总线)...
b8: 8b 9a sbi 0x11, 3 ; 17
milliseconds can be achieved.
*/
static __inline__ void
_delay_loop_2(uint16_t __count)
{
ba: 83 e7 ldi r24, 0x73 ; 115
bc: 97 e0 ldi r25, 0x07 ; 7
__asm__ volatile (
be: 01 97 sbiw r24, 0x01 ; 1
c0: f1 f7 brne .-4 ; 0xbe
把抖动留给系统(比如在延迟期间发生中断导致延迟变长)。
*/
wait_us(690); // 490us
cli(); // 下面这段时间要求比较严格,为保险起见,关中断
c2: f8 94 cli
DQ_TO_1(); // 设置1-wire总线为高电平(释放总线)
c4: 8b 98 cbi 0x11, 3 ; 17
milliseconds can be achieved.
*/
static __inline__ void
_delay_loop_2(uint16_t __count)
{
c6: 81 ef ldi r24, 0xF1 ; 241
c8: 90 e0 ldi r25, 0x00 ; 0
__asm__ volatile (
ca: 01 97 sbiw r24, 0x01 ; 1
cc: f1 f7 brne .-4 ; 0xca
*/
wait_us(87.5); // 最佳时间: 60us+7.5us!(忙延时,只是一种策略)
// 探测总线上是否有器件
if(DQ_status()) bus_flag=FAIL; // 复位单总线但没有发现有器件在线
ce: 83 9b sbis 0x10, 3 ; 16
d0: 02 c0 rjmp .+4 ; 0xd6
d2: 20 e0 ldi r18, 0x00 ; 0
d4: 01 c0 rjmp .+2 ; 0xd8
else bus_flag=SUCC; // 复位单总线并发现有器件在线
d6: 21 e0 ldi r18, 0x01 ; 1
sei(); // 退出临界代码区(开中断)
d8: 78 94 sei
milliseconds can be achieved.
*/
static __inline__ void
_delay_loop_2(uint16_t __count)
{
da: 81 e8 ldi r24, 0x81 ; 129
dc: 96 e0 ldi r25, 0x06 ; 6
__asm__ volatile (
de: 01 97 sbiw r24, 0x01 ; 1
e0: f1 f7 brne .-4 ; 0xde
*/
wait_us(690-87.5); // 490-67.5us
return(bus_flag);
}
e2: 82 2f mov r24, r18
e4: 99 27 eor r25, r25
e6: 08 95 ret
000000e8 <ds18b20_write>:
/*--------------------------------------------------------
* 写命令或数据到温度芯片DS18B20(发送一个字节)
*/
void ds18b20_write(unsigned char dat)
{
e8: 28 2f mov r18, r24
ea: 37 e0 ldi r19, 0x07 ; 7
unsigned char count;
// 每个字节共8位,一次发一位
for(count=0; count<8; count++) {
cli(); // 保证绝对不会发生中断!
ec: f8 94 cli
DQ_TO_0(); // 设置1-wire总线为低电平
ee: 8b 9a sbi 0x11, 3 ; 17
milliseconds can be achieved.
*/
static __inline__ void
_delay_loop_2(uint16_t __count)
{
f0: 8b e0 ldi r24, 0x0B ; 11
f2: 90 e0 ldi r25, 0x00 ; 0
__asm__ volatile (
f4: 01 97 sbiw r24, 0x01 ; 1
f6: f1 f7 brne .-4 ; 0xf4
cli(); // 保证绝对不会发生中断!
DQ_TO_0(); // 设置1-wire总线为低电平
wait_us(4); // about 2us
if(dat&0x01) DQ_TO_1(); // 并串转换,先低位后高位
f8: 20 ff sbrs r18, 0
fa: 02 c0 rjmp .+4 ; 0x100
fc: 8b 98 cbi 0x11, 3 ; 17
fe: 01 c0 rjmp .+2 ; 0x102
else DQ_TO_0();
100: 8b 9a sbi 0x11, 3 ; 17
dat >>= 1; // 下一位做好准备
102: 26 95 lsr r18
milliseconds can be achieved.
*/
static __inline__ void
_delay_loop_2(uint16_t __count)
{
104: 82 ee ldi r24, 0xE2 ; 226
106: 90 e0 ldi r25, 0x00 ; 0
__asm__ volatile (
108: 01 97 sbiw r24, 0x01 ; 1
10a: f1 f7 brne .-4 ; 0x108
// 60us~120us(实际不能到120us, 因为其它语句也用时间了!)
wait_us(82); // 62us
DQ_TO_1();
10c: 8b 98 cbi 0x11, 3 ; 17
sei(); // 恢复系统中断
10e: 78 94 sei
milliseconds can be achieved.
*/
static __inline__ void
_delay_loop_2(uint16_t __count)
{
110: 8b e0 ldi r24, 0x0B ; 11
112: 90 e0 ldi r25, 0x00 ; 0
__asm__ volatile (
114: 01 97 sbiw r24, 0x01 ; 1
116: f1 f7 brne .-4 ; 0x114
{
unsigned char count;
// 每个字节共8位,一次发一位
for(count=0; count<8; count++) {
118: 31 50 subi r19, 0x01 ; 1
11a: 37 ff sbrs r19, 7
11c: e7 cf rjmp .-50 ; 0xec
11e: 08 95 ret
00000120 <ds18b20_read>:
cli(); // 保证绝对不会发生中断!
DQ_TO_0(); // 设置1-wire总线为低电平
wait_us(4); // about 2us
if(dat&0x01) DQ_TO_1(); // 并串转换,先低位后高位
else DQ_TO_0();
dat >>= 1; // 下一位做好准备
// 60us~120us(实际不能到120us, 因为其它语句也用时间了!)
wait_us(82); // 62us
DQ_TO_1();
sei(); // 恢复系统中断
wait_us(4); // 2us
}
}
/*---------------------------------------------------------
* 从温度芯片DS18B20读配置或数据(接收一个字节)
*/
unsigned char ds18b20_read(void)
{
unsigned char count,dat;
dat = 0x00; // 数据接收准备
120: 20 e0 ldi r18, 0x00 ; 0
122: 37 e0 ldi r19, 0x07 ; 7
// 每个字节共8位,一次收一位
for(count=0; count<8; count++) {
cli(); // 保证绝对不会发生中断!
124: f8 94 cli
// 从总线拉低到读总线状态,不能大于15us!
DQ_TO_0(); // 设置1-wire总线为低电平(拉低总线以同步)
126: 8b 9a sbi 0x11, 3 ; 17
milliseconds can be achieved.
*/
static __inline__ void
_delay_loop_2(uint16_t __count)
{
128: 8b e0 ldi r24, 0x0B ; 11
12a: 90 e0 ldi r25, 0x00 ; 0
__asm__ volatile (
12c: 01 97 sbiw r24, 0x01 ; 1
12e: f1 f7 brne .-4 ; 0x12c
// 从总线拉低到读总线状态,不能大于15us!
DQ_TO_0(); // 设置1-wire总线为低电平(拉低总线以同步)
wait_us(4); // 2us
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -