📄 main.lss
字号:
c4c: e0 91 dc 00 lds r30, 0x00DC
c50: f0 91 dd 00 lds r31, 0x00DD
c54: 20 95 com r18
c56: 80 81 ld r24, Z
c58: 82 23 and r24, r18
c5a: 80 83 st Z, r24
SREG=sreg; // sei();
c5c: 4f bf out 0x3f, r20 ; 63
return b;
}
c5e: 83 2f mov r24, r19
c60: 99 27 eor r25, r25
c62: 08 95 ret
00000c64 <ow_byte_wr>:
uint8_t ow_byte_wr( uint8_t b )
{ uint8_t i = 8, j;
c64: 1f 93 push r17
c66: cf 93 push r28
c68: c8 2f mov r28, r24
c6a: 18 e0 ldi r17, 0x08 ; 8
do
{ j = ow_bit_io( b & 1 );
c6c: 8c 2f mov r24, r28
c6e: 81 70 andi r24, 0x01 ; 1
c70: 0e 94 ef 05 call 0xbde
b >>= 1;
c74: c6 95 lsr r28
if( j ) b |= 0x80;
c76: 81 11 cpse r24, r1
c78: c0 68 ori r28, 0x80 ; 128
}
c7a: 11 50 subi r17, 0x01 ; 1
c7c: b9 f7 brne .-18 ; 0xc6c
while( --i );
return b;
}
c7e: 8c 2f mov r24, r28
c80: 99 27 eor r25, r25
c82: cf 91 pop r28
c84: 1f 91 pop r17
c86: 08 95 ret
00000c88 <ow_byte_rd>:
uint8_t ow_byte_rd( void )
{ // read by sending 0xff (a dontcare?)
return ow_byte_wr( 0xFF );
c88: 8f ef ldi r24, 0xFF ; 255
c8a: 0e 94 32 06 call 0xc64
}
c8e: 99 27 eor r25, r25
c90: 08 95 ret
00000c92 <ow_rom_search>:
uint8_t ow_rom_search( uint8_t diff, uint8_t *id )
{ uint8_t i, j, next_diff;
c92: df 92 push r13
c94: ef 92 push r14
c96: ff 92 push r15
c98: 0f 93 push r16
c9a: 1f 93 push r17
c9c: cf 93 push r28
c9e: df 93 push r29
ca0: e8 2e mov r14, r24
ca2: eb 01 movw r28, r22
uint8_t b;
if( ow_reset() )
ca4: 0e 94 61 05 call 0xac2
ca8: 18 2f mov r17, r24
caa: 88 23 and r24, r24
cac: 19 f0 breq .+6 ; 0xcb4
return OW_PRESENCE_ERR; // error, no device found
cae: 8f ef ldi r24, 0xFF ; 255
cb0: 90 e0 ldi r25, 0x00 ; 0
cb2: 32 c0 rjmp .+100 ; 0xd18
ow_byte_wr( OW_SEARCH_ROM ); // ROM search command
cb4: 80 ef ldi r24, 0xF0 ; 240
cb6: 0e 94 32 06 call 0xc64
next_diff = OW_LAST_DEVICE; // unchanged on last device
cba: d1 2e mov r13, r17
i = OW_ROMCODE_SIZE * 8; // 8 bytes
cbc: 00 e4 ldi r16, 0x40 ; 64
do
{ j = 8; // 8 bits
cbe: 88 e0 ldi r24, 0x08 ; 8
cc0: f8 2e mov r15, r24
do
{ b = ow_bit_io( 1 ); // read bit
cc2: 81 e0 ldi r24, 0x01 ; 1
cc4: 0e 94 ef 05 call 0xbde
cc8: 18 2f mov r17, r24
if( ow_bit_io( 1 ) )
cca: 81 e0 ldi r24, 0x01 ; 1
ccc: 0e 94 ef 05 call 0xbde
cd0: 88 23 and r24, r24
cd2: 29 f0 breq .+10 ; 0xcde
{ // read complement bit
if( b ) // 11
cd4: 11 23 and r17, r17
cd6: 71 f0 breq .+28 ; 0xcf4
return OW_DATA_ERR; // data error
cd8: 8e ef ldi r24, 0xFE ; 254
cda: 90 e0 ldi r25, 0x00 ; 0
cdc: 1d c0 rjmp .+58 ; 0xd18
}
else
{ if( !b )
cde: 11 23 and r17, r17
ce0: 49 f4 brne .+18 ; 0xcf4
{ // 00 = 2 devices
if( diff > i || ((*id & 1) && diff != i) )
ce2: 0e 15 cp r16, r14
ce4: 28 f0 brcs .+10 ; 0xcf0
ce6: 88 81 ld r24, Y
ce8: 80 ff sbrs r24, 0
cea: 04 c0 rjmp .+8 ; 0xcf4
cec: e0 16 cp r14, r16
cee: 11 f0 breq .+4 ; 0xcf4
{ b = 1; // now 1
cf0: 11 e0 ldi r17, 0x01 ; 1
next_diff = i; // next pass 0
cf2: d0 2e mov r13, r16
}
}
}
ow_bit_io( b ); // write bit
cf4: 81 2f mov r24, r17
cf6: 0e 94 ef 05 call 0xbde
*id >>= 1;
cfa: 88 81 ld r24, Y
cfc: 86 95 lsr r24
cfe: 88 83 st Y, r24
if( b ) *id |= 0x80; // store bit
d00: 11 23 and r17, r17
d02: 11 f0 breq .+4 ; 0xd08
d04: 80 68 ori r24, 0x80 ; 128
d06: 88 83 st Y, r24
i--;
d08: 01 50 subi r16, 0x01 ; 1
}
d0a: fa 94 dec r15
d0c: d1 f6 brne .-76 ; 0xcc2
while( --j );
id++; // next byte
d0e: 21 96 adiw r28, 0x01 ; 1
}
d10: 00 23 and r16, r16
d12: a9 f6 brne .-86 ; 0xcbe
while( i );
return next_diff; // to continue search
d14: 8d 2d mov r24, r13
d16: 99 27 eor r25, r25
d18: df 91 pop r29
d1a: cf 91 pop r28
d1c: 1f 91 pop r17
d1e: 0f 91 pop r16
d20: ff 90 pop r15
d22: ef 90 pop r14
d24: df 90 pop r13
d26: 08 95 ret
00000d28 <ow_command>:
}
void ow_command( uint8_t command, uint8_t *id )
{ uint8_t i;
d28: 0f 93 push r16
d2a: 1f 93 push r17
d2c: cf 93 push r28
d2e: df 93 push r29
d30: 08 2f mov r16, r24
d32: eb 01 movw r28, r22
ow_reset();
d34: 0e 94 61 05 call 0xac2
if( id )
d38: 20 97 sbiw r28, 0x00 ; 0
d3a: 51 f0 breq .+20 ; 0xd50
{ ow_byte_wr( OW_MATCH_ROM ); // to a single device
d3c: 85 e5 ldi r24, 0x55 ; 85
d3e: 0e 94 32 06 call 0xc64
i = OW_ROMCODE_SIZE;
d42: 18 e0 ldi r17, 0x08 ; 8
do
{ ow_byte_wr( *id );
d44: 89 91 ld r24, Y+
d46: 0e 94 32 06 call 0xc64
id++;
}
d4a: 11 50 subi r17, 0x01 ; 1
d4c: d9 f7 brne .-10 ; 0xd44
d4e: 03 c0 rjmp .+6 ; 0xd56
while( --i );
}
else
ow_byte_wr( OW_SKIP_ROM ); // to all devices
d50: 8c ec ldi r24, 0xCC ; 204
d52: 0e 94 32 06 call 0xc64
ow_byte_wr( command );
d56: 80 2f mov r24, r16
d58: 0e 94 32 06 call 0xc64
d5c: df 91 pop r29
d5e: cf 91 pop r28
d60: 1f 91 pop r17
d62: 0f 91 pop r16
d64: 08 95 ret
00000d66 <delayloop32>:
#include "delay.h"
void delayloop32(uint32_t loops)
{ __asm__ volatile ( "cp %A0,__zero_reg__ \n\t" \
d66: dc 01 movw r26, r24
d68: cb 01 movw r24, r22
d6a: 81 15 cp r24, r1
d6c: 91 05 cpc r25, r1
d6e: a1 05 cpc r26, r1
d70: b1 05 cpc r27, r1
d72: 29 f0 breq .+10 ; 0xd7e
00000d74 <L_LOOP_5>:
d74: 81 50 subi r24, 0x01 ; 1
d76: 90 40 sbci r25, 0x00 ; 0
d78: a0 40 sbci r26, 0x00 ; 0
d7a: b0 40 sbci r27, 0x00 ; 0
d7c: d9 f7 brne .-10 ; 0xd74
00000d7e <L_Exit_5>:
d7e: 08 95 ret
00000d80 <DS18X20_uart_put_temp>:
#include "uart.h"
void DS18X20_uart_put_temp(const uint8_t subzero,
const uint8_t cel, const uint8_t cel_frac_bits)
{ uint8_t buffer[sizeof(int)*8+1];
d80: ef 92 push r14
d82: ff 92 push r15
d84: 0f 93 push r16
d86: 1f 93 push r17
d88: cf 93 push r28
d8a: df 93 push r29
d8c: cd b7 in r28, 0x3d ; 61
d8e: de b7 in r29, 0x3e ; 62
d90: 61 97 sbiw r28, 0x11 ; 17
d92: 0f b6 in r0, 0x3f ; 63
d94: f8 94 cli
d96: de bf out 0x3e, r29 ; 62
d98: 0f be out 0x3f, r0 ; 63
d9a: cd bf out 0x3d, r28 ; 61
d9c: 16 2f mov r17, r22
d9e: 04 2f mov r16, r20
int i;
uart_putc((subzero)?'-':'+');
da0: 88 23 and r24, r24
da2: 11 f0 breq .+4 ; 0xda8
da4: 8d e2 ldi r24, 0x2D ; 45
da6: 01 c0 rjmp .+2 ; 0xdaa
da8: 8b e2 ldi r24, 0x2B ; 43
daa: 0e 94 73 0b call 0x16e6
uart_puti((int)cel);
dae: 81 2f mov r24, r17
db0: 99 27 eor r25, r25
db2: 0e 94 a6 0b call 0x174c
uart_puts_P(".");
db6: 8e ed ldi r24, 0xDE ; 222
db8: 93 e0 ldi r25, 0x03 ; 3
dba: 0e 94 94 0b call 0x1728
itoa(cel_frac_bits*DS18X20_FRACCONV,buffer,10);
dbe: 20 2f mov r18, r16
dc0: 33 27 eor r19, r19
dc2: 4a e0 ldi r20, 0x0A ; 10
dc4: 50 e0 ldi r21, 0x00 ; 0
dc6: be 01 movw r22, r28
dc8: 6f 5f subi r22, 0xFF ; 255
dca: 7f 4f sbci r23, 0xFF ; 255
dcc: 81 e7 ldi r24, 0x71 ; 113
dce: 92 e0 ldi r25, 0x02 ; 2
dd0: 28 9f mul r18, r24
dd2: f0 01 movw r30, r0
dd4: 29 9f mul r18, r25
dd6: f0 0d add r31, r0
dd8: 38 9f mul r19, r24
dda: f0 0d add r31, r0
ddc: 11 24 eor r1, r1
dde: cf 01 movw r24, r30
de0: 0e 94 f6 0b call 0x17ec
for (i=0;i<4-strlen(buffer);i++) uart_puts_P("0");
de4: 8e 01 movw r16, r28
de6: 0f 5f subi r16, 0xFF ; 255
de8: 1f 4f sbci r17, 0xFF ; 255
dea: f8 01 movw r30, r16
dec: 01 90 ld r0, Z+
dee: 00 20 and r0, r0
df0: e9 f7 brne .-6 ; 0xdec
df2: 35 97 sbiw r30, 0x05 ; 5
df4: ee 24 eor r14, r14
df6: ff 24 eor r15, r15
df8: e0 17 cp r30, r16
dfa: f1 07 cpc r31, r17
dfc: a9 f0 breq .+42 ; 0xe28
dfe: 80 ee ldi r24, 0xE0 ; 224
e00: 93 e0 ldi r25, 0x03 ; 3
e02: 0e 94 94 0b call 0x1728
e06: 08 94 sec
e08: e1 1c adc r14, r1
e0a: f1 1c adc r15, r1
e0c: f8 01 movw r30, r16
e0e: 01 90 ld r0, Z+
e10: 00 20 and r0, r0
e12: e9 f7 brne .-6 ; 0xe0e
e14: 31 97 sbiw r30, 0x01 ; 1
e16: e0 1b sub r30, r16
e18: f1 0b sbc r31, r17
e1a: 84 e0 ldi r24, 0x04 ; 4
e1c: 90 e0 ldi r25, 0x00 ; 0
e1e: 8e 1b sub r24, r30
e20: 9f 0b sbc r25, r31
e22: e8 16 cp r14, r24
e24: f9 06 cpc r15, r25
e26: 58 f3 brcs .-42 ; 0xdfe
uart_puts(buffer);
e28: ce 01 movw r24, r28
e2a: 01 96 adiw r24, 0x01 ; 1
e2c: 0e 94 85 0b call 0x170a
uart_puts_P("癈");
e30: 82 ee ldi r24, 0xE2 ; 226
e32: 93 e0 ldi r25, 0x03 ; 3
e34: 0e 94 94 0b call 0x1728
e38: 61 96 adiw r28, 0x11 ; 17
e3a: 0f b6 in r0, 0x3f ; 63
e3c: f8 94 cli
e3e: de bf out 0x3e, r29 ; 62
e40: 0f be out 0x3f, r0 ; 63
e42: cd bf out 0x3d, r28 ; 61
e44: df 91 pop r29
e46: cf 91 pop r28
e48: 1f 91 pop r17
e4a: 0f 91 pop r16
e4c: ff 90 pop r15
e4e: ef 90 pop r14
e50: 08 95 ret
00000e52 <DS18X20_show_id_uart>:
}
void D
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -