⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lss

📁 这是使用AVR GCC的读取DS18B20的代码。 代码功能很全
💻 LSS
📖 第 1 页 / 共 5 页
字号:

00000531 <c.0>:
     531:	44 53 31 38 58 32 30 5f 72 65 63 61 6c 6c 5f 45     DS18X20_recall_E
     541:	32 3a 20 53 68 6f 72 74 20 43 69 72 63 75 69 74     2: Short Circuit
     551:	20 21 0d 00 00                                       !...

00000556 <__init>:
     556:	11 24       	eor	r1, r1
     558:	1f be       	out	0x3f, r1	; 63
     55a:	cf e5       	ldi	r28, 0x5F	; 95
     55c:	d4 e0       	ldi	r29, 0x04	; 4
     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:	e0 e9       	ldi	r30, 0x90	; 144
     56a:	f8 e1       	ldi	r31, 0x18	; 24
     56c:	02 c0       	rjmp	.+4      	; 0x572 <.do_copy_data_start>

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 <.do_copy_data_loop>

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 <.do_clear_bss_start>

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 <.do_clear_bss_loop>
     588:	0c 94 92 03 	jmp	0x724 <main>

0000058c <__bad_interrupt>:
     58c:	0c 94 00 00 	jmp	0x0 <__vectors>

00000590 <search_sensors>:

uint8_t gSensorIDs[MAXSENSORS][OW_ROMCODE_SIZE];

uint8_t search_sensors(void)
{
     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 i;
	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 8e 0b 	call	0x171c <uart_puts_p>
	
	nSensors = 0;
     5ae:	10 e0       	ldi	r17, 0x00	; 0
	
	for( diff = OW_SEARCH_FIRST; 
     5b0:	8f ef       	ldi	r24, 0xFF	; 255
     5b2:	89 87       	std	Y+9, r24	; 0x09
		diff != OW_LAST_DEVICE && nSensors < MAXSENSORS ; )
	{
		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 3a 09 	call	0x1274 <DS18X20_find_sensor>
		
		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 <search_sensors+0x3e>
			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 <search_sensors+0x46>
			break;
		}
		
		if( diff == OW_DATA_ERR ) {
     5ce:	2e 3f       	cpi	r18, 0xFE	; 254
     5d0:	29 f4       	brne	.+10     	; 0x5dc <search_sensors+0x4c>
			uart_puts_P( "Bus Error\r" );
     5d2:	80 e8       	ldi	r24, 0x80	; 128
     5d4:	90 e0       	ldi	r25, 0x00	; 0
     5d6:	0e 94 8e 0b 	call	0x171c <uart_puts_p>
			break;
     5da:	16 c0       	rjmp	.+44     	; 0x608 <search_sensors+0x78>
     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 <search_sensors+0x52>
     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 <search_sensors+0x64>
		
		nSensors++;
     5fe:	1f 5f       	subi	r17, 0xFF	; 255
     600:	22 23       	and	r18, r18
     602:	11 f0       	breq	.+4      	; 0x608 <search_sensors+0x78>
     604:	15 30       	cpi	r17, 0x05	; 5
     606:	b0 f2       	brcs	.-84     	; 0x5b4 <search_sensors+0x24>
	}
	
	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)
{
     620:	df 92       	push	r13
     622:	ef 92       	push	r14
     624:	ff 92       	push	r15
     626:	0f 93       	push	r16
     628:	1f 93       	push	r17
     62a:	cf 93       	push	r28
     62c:	df 93       	push	r29
     62e:	cd b7       	in	r28, 0x3d	; 61
     630:	de b7       	in	r29, 0x3e	; 62
     632:	61 97       	sbiw	r28, 0x11	; 17
     634:	0f b6       	in	r0, 0x3f	; 63
     636:	f8 94       	cli
     638:	de bf       	out	0x3e, r29	; 62
     63a:	0f be       	out	0x3f, r0	; 63
     63c:	cd bf       	out	0x3d, r28	; 61
     63e:	f8 2e       	mov	r15, r24
     640:	d6 2e       	mov	r13, r22
     642:	e4 2e       	mov	r14, r20
	uint8_t buffer[sizeof(int)*8+1];
	uint16_t decicelsius;
	uint8_t i, j;
	
	uart_putc((subzero)?'-':'+');
     644:	88 23       	and	r24, r24
     646:	11 f0       	breq	.+4      	; 0x64c <uart_put_temp+0x2c>
     648:	8d e2       	ldi	r24, 0x2D	; 45
     64a:	01 c0       	rjmp	.+2      	; 0x64e <uart_put_temp+0x2e>
     64c:	8b e2       	ldi	r24, 0x2B	; 43
     64e:	0e 94 6d 0b 	call	0x16da <uart_putc>
	uart_puti((int)cel);
     652:	8d 2d       	mov	r24, r13
     654:	99 27       	eor	r25, r25
     656:	0e 94 a0 0b 	call	0x1740 <uart_puti>
	uart_puts_P(".");
     65a:	8b e8       	ldi	r24, 0x8B	; 139
     65c:	90 e0       	ldi	r25, 0x00	; 0
     65e:	0e 94 8e 0b 	call	0x171c <uart_puts_p>
	itoa((cel_frac_bits*DS18X20_FRACCONV),buffer,10);
     662:	2e 2d       	mov	r18, r14
     664:	33 27       	eor	r19, r19
     666:	4a e0       	ldi	r20, 0x0A	; 10
     668:	50 e0       	ldi	r21, 0x00	; 0
     66a:	be 01       	movw	r22, r28
     66c:	6f 5f       	subi	r22, 0xFF	; 255
     66e:	7f 4f       	sbci	r23, 0xFF	; 255
     670:	81 e7       	ldi	r24, 0x71	; 113
     672:	92 e0       	ldi	r25, 0x02	; 2
     674:	28 9f       	mul	r18, r24
     676:	f0 01       	movw	r30, r0
     678:	29 9f       	mul	r18, r25
     67a:	f0 0d       	add	r31, r0
     67c:	38 9f       	mul	r19, r24
     67e:	f0 0d       	add	r31, r0
     680:	11 24       	eor	r1, r1
     682:	cf 01       	movw	r24, r30
     684:	0e 94 f0 0b 	call	0x17e0 <itoa>
	j=4-strlen(buffer);
     688:	de 01       	movw	r26, r28
     68a:	11 96       	adiw	r26, 0x01	; 1
     68c:	fd 01       	movw	r30, r26
     68e:	01 90       	ld	r0, Z+
     690:	00 20       	and	r0, r0
     692:	e9 f7       	brne	.-6      	; 0x68e <uart_put_temp+0x6e>
     694:	31 97       	sbiw	r30, 0x01	; 1
     696:	ea 1b       	sub	r30, r26
     698:	fb 0b       	sbc	r31, r27
     69a:	14 e0       	ldi	r17, 0x04	; 4
     69c:	1e 1b       	sub	r17, r30
	for (i=0;i<j;i++) uart_puts_P("0");
     69e:	00 e0       	ldi	r16, 0x00	; 0
     6a0:	01 17       	cp	r16, r17
     6a2:	30 f4       	brcc	.+12     	; 0x6b0 <uart_put_temp+0x90>
     6a4:	8d e8       	ldi	r24, 0x8D	; 141
     6a6:	90 e0       	ldi	r25, 0x00	; 0
     6a8:	0e 94 8e 0b 	call	0x171c <uart_puts_p>
     6ac:	0f 5f       	subi	r16, 0xFF	; 255
     6ae:	f8 cf       	rjmp	.-16     	; 0x6a0 <uart_put_temp+0x80>
	uart_puts(buffer);
     6b0:	ce 01       	movw	r24, r28
     6b2:	01 96       	adiw	r24, 0x01	; 1
     6b4:	0e 94 7f 0b 	call	0x16fe <uart_puts>
	uart_puts_P("癈 [");
     6b8:	8f e8       	ldi	r24, 0x8F	; 143
     6ba:	90 e0       	ldi	r25, 0x00	; 0
     6bc:	0e 94 8e 0b 	call	0x171c <uart_puts_p>
	// "rounding"
	uart_putc((subzero)?'-':'+');
     6c0:	ff 20       	and	r15, r15
     6c2:	11 f0       	breq	.+4      	; 0x6c8 <uart_put_temp+0xa8>
     6c4:	8d e2       	ldi	r24, 0x2D	; 45
     6c6:	01 c0       	rjmp	.+2      	; 0x6ca <uart_put_temp+0xaa>
     6c8:	8b e2       	ldi	r24, 0x2B	; 43
     6ca:	0e 94 6d 0b 	call	0x16da <uart_putc>
	decicelsius = DS18X20_temp_to_decicel(subzero, cel, cel_frac_bits);
     6ce:	4e 2d       	mov	r20, r14
     6d0:	6d 2d       	mov	r22, r13
     6d2:	8f 2d       	mov	r24, r15
     6d4:	0e 94 d4 08 	call	0x11a8 <DS18X20_temp_to_decicel>
     6d8:	8c 01       	movw	r16, r24
	uart_puti( (int)(decicelsius/10) );
     6da:	6a e0       	ldi	r22, 0x0A	; 10
     6dc:	70 e0       	ldi	r23, 0x00	; 0
     6de:	0e 94 21 0c 	call	0x1842 <__udivmodhi4>
     6e2:	cb 01       	movw	r24, r22
     6e4:	0e 94 a0 0b 	call	0x1740 <uart_puti>
	uart_puts_P(".");
     6e8:	84 e9       	ldi	r24, 0x94	; 148
     6ea:	90 e0       	ldi	r25, 0x00	; 0
     6ec:	0e 94 8e 0b 	call	0x171c <uart_puts_p>
	uart_putc( (decicelsius%10) + '0');
     6f0:	c8 01       	movw	r24, r16
     6f2:	6a e0       	ldi	r22, 0x0A	; 10
     6f4:	70 e0       	ldi	r23, 0x00	; 0
     6f6:	0e 94 21 0c 	call	0x1842 <__udivmodhi4>
     6fa:	80 5d       	subi	r24, 0xD0	; 208
     6fc:	0e 94 6d 0b 	call	0x16da <uart_putc>
	uart_puts_P("癈]");
     700:	86 e9       	ldi	r24, 0x96	; 150
     702:	90 e0       	ldi	r25, 0x00	; 0
     704:	0e 94 8e 0b 	call	0x171c <uart_puts_p>
     708:	61 96       	adiw	r28, 0x11	; 17
     70a:	0f b6       	in	r0, 0x3f	; 63
     70c:	f8 94       	cli
     70e:	de bf       	out	0x3e, r29	; 62
     710:	0f be       	out	0x3f, r0	; 63
     712:	cd bf       	out	0x3d, r28	; 61
     714:	df 91       	pop	r29
     716:	cf 91       	pop	r28
     718:	1f 91       	pop	r17
     71a:	0f 91       	pop	r16
     71c:	ff 90       	pop	r15
     71e:	ef 90       	pop	r14
     720:	df 90       	pop	r13
     722:	08 95       	ret

00000724 <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 )
{
     724:	c3 e5       	ldi	r28, 0x53	; 83
     726:	d4 e0       	ldi	r29, 0x04	; 4
     728:	de bf       	out	0x3e, r29	; 62
     72a:	cd bf       	out	0x3d, r28	; 61
	uint8_t nSensors, i;
	uint8_t subzero, cel, cel_frac_bits;
	
	uart_init((UART_BAUD_SELECT((BAUD),F_OSC)));
     72c:	89 e1       	ldi	r24, 0x19	; 25
     72e:	90 e0       	ldi	r25, 0x00	; 0
     730:	0e 94 3f 0b 	call	0x167e <uart_init>
	OSCCAL=0xBB;
     734:	8b eb       	ldi	r24, 0xBB	; 187
     736:	81 bf       	out	0x31, r24	; 49
	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -