📄 main.lss
字号:
55e: de bf out 0x3e, r29 ; 62
560: cd bf out 0x3d, r28 ; 61
00000562 <__do_copy_data>:
562: 10 e0 ldi r17, 0x00 ; 0
564: a0 e6 ldi r26, 0x60 ; 96
566: b0 e0 ldi r27, 0x00 ; 0
568: e4 ea ldi r30, 0xA4 ; 164
56a: f8 e1 ldi r31, 0x18 ; 24
56c: 02 c0 rjmp .+4 ; 0x572
0000056e <.do_copy_data_loop>:
56e: 05 90 lpm r0, Z+
570: 0d 92 st X+, r0
00000572 <.do_copy_data_start>:
572: aa 36 cpi r26, 0x6A ; 106
574: b1 07 cpc r27, r17
576: d9 f7 brne .-10 ; 0x56e
00000578 <__do_clear_bss>:
578: 10 e0 ldi r17, 0x00 ; 0
57a: aa e6 ldi r26, 0x6A ; 106
57c: b0 e0 ldi r27, 0x00 ; 0
57e: 01 c0 rjmp .+2 ; 0x582
00000580 <.do_clear_bss_loop>:
580: 1d 92 st X+, r1
00000582 <.do_clear_bss_start>:
582: ae 3d cpi r26, 0xDE ; 222
584: b1 07 cpc r27, r17
586: e1 f7 brne .-8 ; 0x580
588: 0c 94 8f 03 jmp 0x71e
0000058c <__bad_interrupt>:
58c: 0c 94 00 00 jmp 0x0
00000590 <search_sensors>:
uint8_t gSensorIDs[MAXSENSORS][OW_ROMCODE_SIZE];
uint8_t search_sensors(void)
{ uint8_t i;
590: 1f 93 push r17
592: cf 93 push r28
594: df 93 push r29
596: cd b7 in r28, 0x3d ; 61
598: de b7 in r29, 0x3e ; 62
59a: 29 97 sbiw r28, 0x09 ; 9
59c: 0f b6 in r0, 0x3f ; 63
59e: f8 94 cli
5a0: de bf out 0x3e, r29 ; 62
5a2: 0f be out 0x3f, r0 ; 63
5a4: cd bf out 0x3d, r28 ; 61
uint8_t id[OW_ROMCODE_SIZE];
uint8_t diff, nSensors;
uart_puts_P( "\rScanning Bus for DS18X20\r" );
5a6: 84 e5 ldi r24, 0x54 ; 84
5a8: 90 e0 ldi r25, 0x00 ; 0
5aa: 0e 94 94 0b call 0x1728
nSensors = 0;
5ae: 10 e0 ldi r17, 0x00 ; 0
for( diff = OW_SEARCH_FIRST; diff != OW_LAST_DEVICE && nSensors < MAXSENSORS ; )
5b0: 8f ef ldi r24, 0xFF ; 255
5b2: 89 87 std Y+9, r24 ; 0x09
{ DS18X20_find_sensor( &diff, &id[0] );
5b4: be 01 movw r22, r28
5b6: 6f 5f subi r22, 0xFF ; 255
5b8: 7f 4f sbci r23, 0xFF ; 255
5ba: ce 01 movw r24, r28
5bc: 09 96 adiw r24, 0x09 ; 9
5be: 0e 94 3f 09 call 0x127e
if( diff == OW_PRESENCE_ERR )
5c2: 29 85 ldd r18, Y+9 ; 0x09
5c4: 2f 3f cpi r18, 0xFF ; 255
5c6: 19 f4 brne .+6 ; 0x5ce
{ uart_puts_P( "No Sensor found\r" );
5c8: 8f e6 ldi r24, 0x6F ; 111
5ca: 90 e0 ldi r25, 0x00 ; 0
5cc: 04 c0 rjmp .+8 ; 0x5d6
break;
}
if( diff == OW_DATA_ERR )
5ce: 2e 3f cpi r18, 0xFE ; 254
5d0: 29 f4 brne .+10 ; 0x5dc
{ uart_puts_P( "Bus Error\r" );
5d2: 80 e8 ldi r24, 0x80 ; 128
5d4: 90 e0 ldi r25, 0x00 ; 0
5d6: 0e 94 94 0b call 0x1728
break;
5da: 16 c0 rjmp .+44 ; 0x608
5dc: e1 2f mov r30, r17
5de: ff 27 eor r31, r31
5e0: 83 e0 ldi r24, 0x03 ; 3
5e2: ee 0f add r30, r30
5e4: ff 1f adc r31, r31
5e6: 8a 95 dec r24
5e8: e1 f7 brne .-8 ; 0x5e2
5ea: e1 55 subi r30, 0x51 ; 81
5ec: ff 4f sbci r31, 0xFF ; 255
5ee: de 01 movw r26, r28
5f0: 11 96 adiw r26, 0x01 ; 1
5f2: 97 e0 ldi r25, 0x07 ; 7
}
for (i=0;i<OW_ROMCODE_SIZE;i++)
gSensorIDs[nSensors][i]=id[i];
5f4: 8d 91 ld r24, X+
5f6: 81 93 st Z+, r24
5f8: 91 50 subi r25, 0x01 ; 1
5fa: 97 ff sbrs r25, 7
5fc: fb cf rjmp .-10 ; 0x5f4
nSensors++;
5fe: 1f 5f subi r17, 0xFF ; 255
600: 22 23 and r18, r18
602: 11 f0 breq .+4 ; 0x608
604: 15 30 cpi r17, 0x05 ; 5
606: b0 f2 brcs .-84 ; 0x5b4
}
return nSensors;
}
608: 81 2f mov r24, r17
60a: 99 27 eor r25, r25
60c: 29 96 adiw r28, 0x09 ; 9
60e: 0f b6 in r0, 0x3f ; 63
610: f8 94 cli
612: de bf out 0x3e, r29 ; 62
614: 0f be out 0x3f, r0 ; 63
616: cd bf out 0x3d, r28 ; 61
618: df 91 pop r29
61a: cf 91 pop r28
61c: 1f 91 pop r17
61e: 08 95 ret
00000620 <uart_put_temp>:
void uart_put_temp(const uint8_t subzero, uint8_t cel, uint8_t cel_frac_bits)
{ uint8_t buffer[sizeof(int)*8+1];
620: ef 92 push r14
622: ff 92 push r15
624: 0f 93 push r16
626: 1f 93 push r17
628: cf 93 push r28
62a: df 93 push r29
62c: cd b7 in r28, 0x3d ; 61
62e: de b7 in r29, 0x3e ; 62
630: 61 97 sbiw r28, 0x11 ; 17
632: 0f b6 in r0, 0x3f ; 63
634: f8 94 cli
636: de bf out 0x3e, r29 ; 62
638: 0f be out 0x3f, r0 ; 63
63a: cd bf out 0x3d, r28 ; 61
63c: 18 2f mov r17, r24
63e: e6 2e mov r14, r22
640: f4 2e mov r15, r20
uint16_t decicelsius;
uint8_t i, j;
uart_putc((subzero)?'-':'+');
642: 88 23 and r24, r24
644: 11 f0 breq .+4 ; 0x64a
646: 8d e2 ldi r24, 0x2D ; 45
648: 01 c0 rjmp .+2 ; 0x64c
64a: 8b e2 ldi r24, 0x2B ; 43
64c: 0e 94 73 0b call 0x16e6
uart_puti((int)cel);
650: 8e 2d mov r24, r14
652: 99 27 eor r25, r25
654: 0e 94 a6 0b call 0x174c
uart_puts_P(".");
658: 8b e8 ldi r24, 0x8B ; 139
65a: 90 e0 ldi r25, 0x00 ; 0
65c: 0e 94 94 0b call 0x1728
itoa((cel_frac_bits*DS18X20_FRACCONV),buffer,10);
660: 2f 2d mov r18, r15
662: 33 27 eor r19, r19
664: 4a e0 ldi r20, 0x0A ; 10
666: 50 e0 ldi r21, 0x00 ; 0
668: be 01 movw r22, r28
66a: 6f 5f subi r22, 0xFF ; 255
66c: 7f 4f sbci r23, 0xFF ; 255
66e: 81 e7 ldi r24, 0x71 ; 113
670: 92 e0 ldi r25, 0x02 ; 2
672: 28 9f mul r18, r24
674: f0 01 movw r30, r0
676: 29 9f mul r18, r25
678: f0 0d add r31, r0
67a: 38 9f mul r19, r24
67c: f0 0d add r31, r0
67e: 11 24 eor r1, r1
680: cf 01 movw r24, r30
682: 0e 94 f6 0b call 0x17ec
j=4-strlen(buffer);
686: de 01 movw r26, r28
688: 11 96 adiw r26, 0x01 ; 1
68a: fd 01 movw r30, r26
68c: 01 90 ld r0, Z+
68e: 00 20 and r0, r0
690: e9 f7 brne .-6 ; 0x68c
692: 31 97 sbiw r30, 0x01 ; 1
694: ea 1b sub r30, r26
696: fb 0b sbc r31, r27
698: 84 e0 ldi r24, 0x04 ; 4
69a: 8e 1b sub r24, r30
for (i=0;i<j;i++) uart_puts_P("0")
69c: 39 f0 breq .+14 ; 0x6ac
69e: 08 2f mov r16, r24
6a0: 8d e8 ldi r24, 0x8D ; 141
6a2: 90 e0 ldi r25, 0x00 ; 0
6a4: 0e 94 94 0b call 0x1728
6a8: 01 50 subi r16, 0x01 ; 1
6aa: d1 f7 brne .-12 ; 0x6a0
;
uart_puts(buffer);
6ac: ce 01 movw r24, r28
6ae: 01 96 adiw r24, 0x01 ; 1
6b0: 0e 94 85 0b call 0x170a
uart_puts_P("癈 [");
6b4: 8f e8 ldi r24, 0x8F ; 143
6b6: 90 e0 ldi r25, 0x00 ; 0
6b8: 0e 94 94 0b call 0x1728
// "rounding"
uart_putc((subzero)?'-':'+');
6bc: 11 23 and r17, r17
6be: 11 f0 breq .+4 ; 0x6c4
6c0: 8d e2 ldi r24, 0x2D ; 45
6c2: 01 c0 rjmp .+2 ; 0x6c6
6c4: 8b e2 ldi r24, 0x2B ; 43
6c6: 0e 94 73 0b call 0x16e6
decicelsius = DS18X20_temp_to_decicel(subzero, cel, cel_frac_bits);
6ca: 4f 2d mov r20, r15
6cc: 6e 2d mov r22, r14
6ce: 81 2f mov r24, r17
6d0: 0e 94 d8 08 call 0x11b0
6d4: 8c 01 movw r16, r24
uart_puti( (int)(decicelsius/10) );
6d6: 6a e0 ldi r22, 0x0A ; 10
6d8: 70 e0 ldi r23, 0x00 ; 0
6da: 0e 94 2b 0c call 0x1856
6de: cb 01 movw r24, r22
6e0: 0e 94 a6 0b call 0x174c
uart_puts_P(".");
6e4: 84 e9 ldi r24, 0x94 ; 148
6e6: 90 e0 ldi r25, 0x00 ; 0
6e8: 0e 94 94 0b call 0x1728
uart_putc( (decicelsius%10) + '0');
6ec: c8 01 movw r24, r16
6ee: 6a e0 ldi r22, 0x0A ; 10
6f0: 70 e0 ldi r23, 0x00 ; 0
6f2: 0e 94 2b 0c call 0x1856
6f6: 80 5d subi r24, 0xD0 ; 208
6f8: 0e 94 73 0b call 0x16e6
uart_puts_P("癈]");
6fc: 86 e9 ldi r24, 0x96 ; 150
6fe: 90 e0 ldi r25, 0x00 ; 0
700: 0e 94 94 0b call 0x1728
704: 61 96 adiw r28, 0x11 ; 17
706: 0f b6 in r0, 0x3f ; 63
708: f8 94 cli
70a: de bf out 0x3e, r29 ; 62
70c: 0f be out 0x3f, r0 ; 63
70e: cd bf out 0x3d, r28 ; 61
710: df 91 pop r29
712: cf 91 pop r28
714: 1f 91 pop r17
716: 0f 91 pop r16
718: ff 90 pop r15
71a: ef 90 pop r14
71c: 08 95 ret
0000071e <main>:
}
#ifdef DS18X20_EEPROMSUPPORT
static void eeprom_test(void)
{ uint8_t sp[DS18X20_SP_SIZE], th, tl;
uart_puts_P( "\rDS18x20 EEPROM support test for fist sensor\r" );
// DS18X20_recall_E2(&gSensorIDs[0][0]); // already done at power-on
DS18X20_read_scratchpad( &gSensorIDs[0][0], sp);
th = sp[DS18X20_TH_REG];
tl = sp[DS18X20_TL_REG];
uart_puts_P( "TH/TL from EEPROM sensor 1 : " );
uart_puti(th);
uart_puts_P( " / " );
uart_puti(tl);
uart_puts_P( "\r" );
tl++; th++;
DS18X20_write_scratchpad( &gSensorIDs[0][0], th, tl, DS18B20_12_BIT);
uart_puts_P( "TH+1 and TL+1 written to scratchpad\r" );
DS18X20_copy_scratchpad( DS18X20_POWER_PARASITE, &gSensorIDs[0][0] );
uart_puts_P( "scratchpad copied to DS18x20 EEPROM\r" );
DS18X20_recall_E2(&gSensorIDs[0][0]);
uart_puts_P( "DS18x20 EEPROM copied back to scratchpad\r" );
DS18X20_read_scratchpad( &gSensorIDs[0][0], sp);
if ( (th == sp[DS18X20_TH_REG]) && (tl == sp[DS18X20_TL_REG]) )
uart_puts_P( "TH and TL verified\r" );
else
uart_puts_P( "verify failed\r" );
th = sp[DS18X20_TH_REG];
tl = sp[DS18X20_TL_REG];
uart_puts_P( "TH/TL from EEPROM sensor 1 now : " );
uart_puti(th);
uart_puts_P( " / " );
uart_puti(tl);
uart_puts_P( "\r" );
}
#endif
int main( void )
{ uint8_t nSensors, i;
71e: c3 e5 ldi r28, 0x53 ; 83
720: d8 e0 ldi r29, 0x08 ; 8
722: de bf out 0x3e, r29 ; 62
724: cd bf out 0x3d, r28 ; 61
uint8_t subzero, cel, cel_frac_bits;
uart_init((UART_BAUD_SELECT((BAUD),F_OSC)));
726: 89 e1 ldi r24, 0x19 ; 25
728: 90 e0 ldi r25, 0x00 ; 0
72a: 0e 94 44 0b call 0x1688
#ifndef OW_ONE_BUS
ow_set_bus(&PIND,&PORTD,&DDRD,PD6);
72e: 26 e0 ldi r18, 0x06 ; 6
730: 41 e3 ldi r20, 0x31 ; 49
732: 50 e0 ldi r21, 0x00 ; 0
734: 62 e3 ldi r22, 0x32 ; 50
736: 70 e0 ldi r23, 0x00 ; 0
738: 80 e3 ldi r24, 0x30 ; 48
73a: 90 e0 ldi r25, 0x00 ; 0
73c: 0e 94 a5 05 call 0xb4a
#endif
sei();
740: 78 94 sei
uart_puts_P( "\rDS18X20 1-Wire-Reader Demo by Martin Thomas\r" );
742: 8a e9 ldi r24, 0x9A ; 154
744: 90 e0 ldi r25, 0x00 ; 0
746: 0e 94 94 0b call 0x1728
uart_puts_P( "-------------------------------------------" );
74a: 88 ec ldi r24, 0xC8 ; 200
74c: 90 e0 ldi r25, 0x00 ; 0
74e: 0e 94 94 0b call 0x1728
// dbg uart_puts_P( "\r" );
// dbg uart_puti((int) OW_CONF_DELAYOFFSET);
// dbg uart_puts_P( "\r" );
nSensors = search_sensors();
752: 0e 94 c8 02 call 0x590
756: e8 2e mov r14, r24
uart_puti((int) nSensors);
758: 99 27 eor r25, r25
75a: 0e 94 a6 0b call 0x174c
uart_puts_P( " DS18X20 Sensor(s) available:\r" );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -