?? 18b20.lss
字號:
18b20.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 0000043a 00000000 00000000 00000094 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000014 00800060 0000043a 000004ce 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000002 00800074 00800074 000004e2 2**0
ALLOC
3 .noinit 00000000 00800076 00800076 000004e2 2**0
CONTENTS
4 .eeprom 00000000 00810000 00810000 000004e2 2**0
CONTENTS
5 .debug_aranges 00000014 00000000 00000000 000004e2 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_pubnames 000000e7 00000000 00000000 000004f6 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_info 00000527 00000000 00000000 000005dd 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_abbrev 00000163 00000000 00000000 00000b04 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_line 0000037e 00000000 00000000 00000c67 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_str 000001a6 00000000 00000000 00000fe5 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 12 c0 rjmp .+36 ; 0x26
2: 2b c0 rjmp .+86 ; 0x5a
4: 2a c0 rjmp .+84 ; 0x5a
6: 29 c0 rjmp .+82 ; 0x5a
8: 28 c0 rjmp .+80 ; 0x5a
a: 27 c0 rjmp .+78 ; 0x5a
c: 26 c0 rjmp .+76 ; 0x5a
e: 25 c0 rjmp .+74 ; 0x5a
10: 24 c0 rjmp .+72 ; 0x5a
12: 23 c0 rjmp .+70 ; 0x5a
14: 22 c0 rjmp .+68 ; 0x5a
16: 21 c0 rjmp .+66 ; 0x5a
18: 20 c0 rjmp .+64 ; 0x5a
1a: 1f c0 rjmp .+62 ; 0x5a
1c: 1e c0 rjmp .+60 ; 0x5a
1e: 1d c0 rjmp .+58 ; 0x5a
20: 1c c0 rjmp .+56 ; 0x5a
22: 1b c0 rjmp .+54 ; 0x5a
24: 1a c0 rjmp .+52 ; 0x5a
00000026 <__ctors_end>:
26: 11 24 eor r1, r1
28: 1f be out 0x3f, r1 ; 63
2a: cf e5 ldi r28, 0x5F ; 95
2c: d4 e0 ldi r29, 0x04 ; 4
2e: de bf out 0x3e, r29 ; 62
30: cd bf out 0x3d, r28 ; 61
00000032 <__do_copy_data>:
32: 10 e0 ldi r17, 0x00 ; 0
34: a0 e6 ldi r26, 0x60 ; 96
36: b0 e0 ldi r27, 0x00 ; 0
38: ea e3 ldi r30, 0x3A ; 58
3a: f4 e0 ldi r31, 0x04 ; 4
3c: 02 c0 rjmp .+4 ; 0x42
0000003e <.do_copy_data_loop>:
3e: 05 90 lpm r0, Z+
40: 0d 92 st X+, r0
00000042 <.do_copy_data_start>:
42: a4 37 cpi r26, 0x74 ; 116
44: b1 07 cpc r27, r17
46: d9 f7 brne .-10 ; 0x3e
00000048 <__do_clear_bss>:
48: 10 e0 ldi r17, 0x00 ; 0
4a: a4 e7 ldi r26, 0x74 ; 116
4c: b0 e0 ldi r27, 0x00 ; 0
4e: 01 c0 rjmp .+2 ; 0x52
00000050 <.do_clear_bss_loop>:
50: 1d 92 st X+, r1
00000052 <.do_clear_bss_start>:
52: a6 37 cpi r26, 0x76 ; 118
54: b1 07 cpc r27, r17
56: e1 f7 brne .-8 ; 0x50
58: 10 c1 rjmp .+544 ; 0x27a
0000005a <__bad_interrupt>:
5a: d2 cf rjmp .-92 ; 0x0
0000005c <spi_init>:
void spi_init(void)
{
/* 設置MOSI 和SCK 為輸出,其他為輸入 */
PORTB = (1<<PB3)|(1<<PB5);
5c: 88 e2 ldi r24, 0x28 ; 40
5e: 88 bb out 0x18, r24 ; 24
/* 使能SPI 主機模式,設置時鐘速率為fck/16 */
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
60: 81 e5 ldi r24, 0x51 ; 81
62: 8d b9 out 0x0d, r24 ; 13
64: 08 95 ret
00000066 <spi_send>:
//SPCR=0x76;//主機模式
//SPSR=0X01;//時鐘加位,Focs/2
}
void spi_send(uchar dd)
{
/* 啟動數據傳輸 */
SPDR = dd;
66: 8f b9 out 0x0f, r24 ; 15
/* 等待傳輸結束 */
//while(!(SPSR & 0x80));
//SPDR=dd;
while((SPSR&0X80) == 0);
68: 77 9b sbis 0x0e, 7 ; 14
6a: fe cf rjmp .-4 ; 0x68
SPSR &= 0X7F;
6c: 77 98 cbi 0x0e, 7 ; 14
6e: 08 95 ret
00000070 <Init_R>:
//PORTB &= ~0X01;
}
/****************初始化I/O口************************************************/
void Init_R(void)
{
DDRB=0xef;
70: 8f ee ldi r24, 0xEF ; 239
72: 87 bb out 0x17, r24 ; 23
PORTB=0xFF;
74: 8f ef ldi r24, 0xFF ; 255
76: 88 bb out 0x18, r24 ; 24
DDRC = 0XFF;
78: 84 bb out 0x14, r24 ; 20
PORTC=0xFF;
7a: 85 bb out 0x15, r24 ; 21
DDRD = 0XFF;
7c: 81 bb out 0x11, r24 ; 17
PORTD=0xFF;
7e: 82 bb out 0x12, r24 ; 18
spi_init();
80: ed df rcall .-38 ; 0x5c
82: 08 95 ret
00000084 <Init_DS18B20>:
}
/*-------------------------溫度傳感程序------------------------*/
void Init_DS18B20(void)//初始化ds1820
{
unsigned char x = 0;
DDRC |= 0X01;
84: a0 9a sbi 0x14, 0 ; 20
PORTC |= 0X01; // DQO = 1; //DQ復位
86: a8 9a sbi 0x15, 0 ; 21
__ticks = 1;
else if (__tmp > 255)
__ticks = 0; /* i.e. 256 */
else
__ticks = (uint8_t)__tmp;
88: 80 e1 ldi r24, 0x10 ; 16
8a: 8a 95 dec r24
8c: f1 f7 brne .-4 ; 0x8a
_delay_us(50); // Time_Delay(8); //稍做延時
PORTC &= 0XFE; // DQO = 0; //單片機將DQ拉低
8e: a8 98 cbi 0x15, 0 ; 21
__ticks = 1;
else if (__tmp > 255)
__ticks = 0; /* i.e. 256 */
else
__ticks = (uint8_t)__tmp;
90: 80 ea ldi r24, 0xA0 ; 160
92: 8a 95 dec r24
94: f1 f7 brne .-4 ; 0x92
_delay_us(480); //Time_Delay(80); //精確延時 大于 480us
PORTC |= 0X01; //DQO = 1; //拉高總線
96: a8 9a sbi 0x15, 0 ; 21
__ticks = 1;
else if (__tmp > 255)
__ticks = 0; /* i.e. 256 */
else
__ticks = (uint8_t)__tmp;
98: 84 e1 ldi r24, 0x14 ; 20
9a: 8a 95 dec r24
9c: f1 f7 brne .-4 ; 0x9a
_delay_us(60);//Time_Delay(14);
DDRC &= 0XFE;
9e: a0 98 cbi 0x14, 0 ; 20
x = PINC&0X01;//DQI; //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗
a0: 83 b3 in r24, 0x13 ; 19
__ticks = 1;
else if (__tmp > 255)
__ticks = 0; /* i.e. 256 */
else
__ticks = (uint8_t)__tmp;
a2: 88 e2 ldi r24, 0x28 ; 40
a4: 8a 95 dec r24
a6: f1 f7 brne .-4 ; 0xa4
a8: 08 95 ret
000000aa <read_ds18b20>:
_delay_us(120);//Time_Delay(20);
}
/*--------------------------------------------------------*/
unsigned char read_ds18b20(void)//讀一個字節
{
unsigned char i = 0;
aa: 90 e0 ldi r25, 0x00 ; 0
unsigned char dat = 0;
for (i = 8; i > 0; i--)
ac: 78 e0 ldi r23, 0x08 ; 8
ae: 61 e0 ldi r22, 0x01 ; 1
b0: 24 e1 ldi r18, 0x14 ; 20
b2: 30 e0 ldi r19, 0x00 ; 0
b4: 40 e0 ldi r20, 0x00 ; 0
b6: 50 e0 ldi r21, 0x00 ; 0
{
DDRC |= 0X01;
b8: a0 9a sbi 0x14, 0 ; 20
PORTC &= 0XFE; //DQO = 0; // 給脈沖信號
ba: a8 98 cbi 0x15, 0 ; 21
*/
static __inline__ void
_delay_loop_1(uint8_t __count)
{
__asm__ volatile (
bc: 86 2f mov r24, r22
be: 8a 95 dec r24
c0: f1 f7 brne .-4 ; 0xbe
_delay_us(1);//1us
dat >>= 1;
c2: 96 95 lsr r25
PORTC |= 0X01; //DQO = 1; // 給脈沖信號
c4: a8 9a sbi 0x15, 0 ; 21
DDRC &= 0XFE;
c6: a0 98 cbi 0x14, 0 ; 20
*/
static __inline__ void
_delay_loop_1(uint8_t __count)
{
__asm__ volatile (
c8: 86 2f mov r24, r22
ca: 8a 95 dec r24
cc: f1 f7 brne .-4 ; 0xca
_delay_us(2);//2us
if((PINC&0X01) == 1)
ce: 98 99 sbic 0x13, 0 ; 19
dat |= 0x80;
d0: 90 68 ori r25, 0x80 ; 128
*/
static __inline__ void
_delay_loop_1(uint8_t __count)
{
__asm__ volatile (
d2: 82 2f mov r24, r18
d4: 8a 95 dec r24
d6: f1 f7 brne .-4 ; 0xd4
d8: 71 50 subi r23, 0x01 ; 1
da: 71 f7 brne .-36 ; 0xb8
_delay_us(60);//Time_Delay(4);
}
return (dat);
}
dc: 89 2f mov r24, r25
de: 99 27 eor r25, r25
e0: 08 95 ret
000000e2 <write_ds18b20>:
/**********************************************************************************/
void write_ds18b20(unsigned char dat)//寫一個字節
{
e2: 98 2f mov r25, r24
unsigned char i = 0;
for (i = 8; i > 0; i--)
e4: 68 e0 ldi r22, 0x08 ; 8
e6: 2a e0 ldi r18, 0x0A ; 10
e8: 30 e0 ldi r19, 0x00 ; 0
ea: 40 e0 ldi r20, 0x00 ; 0
ec: 50 e0 ldi r21, 0x00 ; 0
{
DDRC |= 0X01;
ee: a0 9a sbi 0x14, 0 ; 20
PORTC &= 0XFE; //DQO = 0;
f0: a8 98 cbi 0x15, 0 ; 21
PORTC = dat&0x01; //DQO = dat&0x01;
f2: 89 2f mov r24, r25
f4: 81 70 andi r24, 0x01 ; 1
f6: 85 bb out 0x15, r24 ; 21
*/
static __inline__ void
_delay_loop_1(uint8_t __count)
{
__asm__ volatile (
f8: 82 2f mov r24, r18
fa: 8a 95 dec r24
fc: f1 f7 brne .-4 ; 0xfa
_delay_us(30);//Time_Delay(5);
PORTC |= 0X01; //DQO = 1;
fe: a8 9a sbi 0x15, 0 ; 21
dat>>=1;
100: 96 95 lsr r25
102: 61 50 subi r22, 0x01 ; 1
104: a1 f7 brne .-24 ; 0xee
106: 08 95 ret
00000108 <read_temperature>:
}
}
void read_temperature(void)
{
108: ff 92 push r15
10a: 0f 93 push r16
10c: 1f 93 push r17
10e: cf 93 push r28
110: df 93 push r29
float tt = 0;
uchar temp,a,b,dot;
uchar data=0;
Init_DS18B20();
112: b8 df rcall .-144 ; 0x84
write_ds18b20(0xCC); // 跳過讀序號列號的操作
114: 8c ec ldi r24, 0xCC ; 204
116: e5 df rcall .-54 ; 0xe2
write_ds18b20(0x44); // 啟動溫度轉換
118: 84 e4 ldi r24, 0x44 ; 68
11a: e3 df rcall .-58 ; 0xe2
Init_DS18B20();
11c: b3 df rcall .-154 ; 0x84
write_ds18b20(0xCC); //跳過讀序號列號的操作
11e: 8c ec ldi r24, 0xCC ; 204
120: e0 df rcall .-64 ; 0xe2
write_ds18b20(0xBE); //讀取溫度寄存器
122: 8e eb ldi r24, 0xBE ; 190
124: de df rcall .-68 ; 0xe2
temperature_low = read_ds18b20(); //先讀取低字節
126: c1 df rcall .-126 ; 0xaa
128: 80 93 75 00 sts 0x0075, r24
temperature_high= read_ds18b20(); //后讀取高字節
12c: be df rcall .-132 ; 0xaa
12e: 80 93 74 00 sts 0x0074, r24
temp=temperature_high<<4; //取高字節的低四位
132: f8 2e mov r15, r24
134: ff 0c add r15, r15
136: ff 0c add r15, r15
138: ff 0c add r15, r15
13a: ff 0c add r15, r15
temp+=temperature_low>>4; //取低字節的高四位再相加得溫度計數的整數部分數值
13c: 80 91 75 00 lds r24, 0x0075
140: 98 2f mov r25, r24
142: 92 95 swap r25
144: 9f 70 andi r25, 0x0F ; 15
146: f9 0e add r15, r25
dot = temperature_low&0x0f; //取低字節的低四位得小數部分的相對值
148: 8f 70 andi r24, 0x0F ; 15
14a: 99 27 eor r25, r25
if(temp>0x80)//負數
14c: 20 e8 ldi r18, 0x80 ; 128
14e: 2f 15 cp r18, r15
150: d0 f4 brcc .+52 ; 0x186
{
tt=((~(dot-1))&0x0f)*0.0625; //求相對值的原碼再*0.0625得小數部分的真實值
152: 90 95 com r25
154: 81 95 neg r24
156: 9f 4f sbci r25, 0xFF ; 255
158: 8f 70 andi r24, 0x0F ; 15
15a: 90 70 andi r25, 0x00 ; 0
15c: aa 27 eor r26, r26
15e: 97 fd sbrc r25, 7
160: a0 95 com r26
162: ba 2f mov r27, r26
164: bc 01 movw r22, r24
166: cd 01 movw r24, r26
168: ad d0 rcall .+346 ; 0x2c4
16a: dc 01 movw r26, r24
16c: cb 01 movw r24, r22
16e: 20 e0 ldi r18, 0x00 ; 0
170: 30 e0 ldi r19, 0x00 ; 0
172: 40 e8 ldi r20, 0x80 ; 128
174: 5d e3 ldi r21, 0x3D ; 61
176: bc 01 movw r22, r24
178: cd 01 movw r24, r26
17a: ee d0 rcall .+476 ; 0x358
17c: ec 01 movw r28, r24
17e: db 01 movw r26, r22
temp=~temp;
180: f0 94 com r15
DISP_BUFFER[0] = 10; //Write_Data( '-' ); //bit0為負,顯示'-'
182: 8a e0 ldi r24, 0x0A ; 10
184: 18 c0 rjmp .+48 ; 0x1b6
}
else
{
tt=dot*0.0625; //求相對值的原碼再*0.0625得小數部分的真實值
186: aa 27 eor r26, r26
188: 97 fd sbrc r25, 7
18a: a0 95 com r26
18c: ba 2f mov r27, r26
18e: bc 01 movw r22, r24
190: cd 01 movw r24, r26
192: 98 d0 rcall .+304 ; 0x2c4
194: dc 01 movw r26, r24
196: cb 01 movw r24, r22
198: 20 e0 ldi r18, 0x00 ; 0
19a: 30 e0 ldi r19, 0x00 ; 0
19c: 40 e8 ldi r20, 0x80 ; 128
19e: 5d e3 ldi r21, 0x3D ; 61
1a0: bc 01 movw r22, r24
1a2: cd 01 movw r24, r26
1a4: d9 d0 rcall .+434 ; 0x358
1a6: ec 01 movw r28, r24
1a8: db 01 movw r26, r22
data=temp/100;
1aa: 8f 2d mov r24, r15
1ac: 64 e6 ldi r22, 0x64 ; 100
1ae: 25 d1 rcall .+586 ; 0x3fa
if(data==1)
1b0: 81 30 cpi r24, 0x01 ; 1
1b2: 09 f0 breq .+2 ; 0x1b6
DISP_BUFFER[0] = data;//Write_Data( flash_array[ data ] ); //bit0,如果最高位為1則顯示
else
DISP_BUFFER[0] = 11;//Write_Data( ' ' ); //bit0,如果最高位為0則消隱
1b4: 8b e0 ldi r24, 0x0B ; 11
1b6: 80 93 60 00 sts 0x0060, r24
}
//小數部分
tt = tt*1000; //放大一1000位
1ba: 20 e0 ldi r18, 0x00 ; 0
1bc: 30 e0 ldi r19, 0x00 ; 0
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -