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

📄 ds18b20.lss

📁 avr单片机编写的18B20测温程序
💻 LSS
📖 第 1 页 / 共 2 页
字号:

ds18b20.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000396  00000000  00000000  00000074  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000012  00800060  00000396  0000040a  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000006  00800072  000003a8  0000041c  2**0
                  ALLOC
  3 .stab         0000036c  00000000  00000000  0000041c  2**2
                  CONTENTS, READONLY, DEBUGGING
  4 .stabstr      00000084  00000000  00000000  00000788  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_aranges 00000040  00000000  00000000  0000080c  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_pubnames 0000010c  00000000  00000000  0000084c  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_info   00000651  00000000  00000000  00000958  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_abbrev 000002db  00000000  00000000  00000fa9  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_line   00000534  00000000  00000000  00001284  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_frame  00000100  00000000  00000000  000017b8  2**0
                  CONTENTS, READONLY, DEBUGGING
 11 .debug_str    00000185  00000000  00000000  000018b8  2**0
                  CONTENTS, READONLY, DEBUGGING
 12 .debug_loc    000001f7  00000000  00000000  00001a3d  2**0
                  CONTENTS, READONLY, DEBUGGING
 13 .debug_ranges 00000018  00000000  00000000  00001c34  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	0c 94 2a 00 	jmp	0x54	; 0x54 <__ctors_end>
   4:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
   8:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
   c:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
  10:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
  14:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
  18:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
  1c:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
  20:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
  24:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
  28:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
  2c:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
  30:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
  34:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
  38:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
  3c:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
  40:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
  44:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
  48:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
  4c:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
  50:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>

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 e9       	ldi	r30, 0x96	; 150
  68:	f3 e0       	ldi	r31, 0x03	; 3
  6a:	02 c0       	rjmp	.+4      	; 0x70 <.do_copy_data_start>

0000006c <.do_copy_data_loop>:
  6c:	05 90       	lpm	r0, Z+
  6e:	0d 92       	st	X+, r0

00000070 <.do_copy_data_start>:
  70:	a2 37       	cpi	r26, 0x72	; 114
  72:	b1 07       	cpc	r27, r17
  74:	d9 f7       	brne	.-10     	; 0x6c <.do_copy_data_loop>

00000076 <__do_clear_bss>:
  76:	10 e0       	ldi	r17, 0x00	; 0
  78:	a2 e7       	ldi	r26, 0x72	; 114
  7a:	b0 e0       	ldi	r27, 0x00	; 0
  7c:	01 c0       	rjmp	.+2      	; 0x80 <.do_clear_bss_start>

0000007e <.do_clear_bss_loop>:
  7e:	1d 92       	st	X+, r1

00000080 <.do_clear_bss_start>:
  80:	a8 37       	cpi	r26, 0x78	; 120
  82:	b1 07       	cpc	r27, r17
  84:	e1 f7       	brne	.-8      	; 0x7e <.do_clear_bss_loop>
  86:	0c 94 5e 01 	jmp	0x2bc	; 0x2bc <main>

0000008a <__bad_interrupt>:
  8a:	0c 94 00 00 	jmp	0	; 0x0 <__heap_end>

0000008e <DS18b20_config>:
/*----------------------------------------------------------
* 配置avr和18b20的接口
*/
void   DS18b20_config(void)
{
  8e:	8b 98       	cbi	0x11, 3	; 17
	DDRD &= ~OW_18B20;  //输入模式(上电为高电平)
	PORTD &= ~OW_18B20; //输出锁存器写0,以后不改
  90:	93 98       	cbi	0x12, 3	; 18
  92:	08 95       	ret

00000094 <DS18b20_rest>:
}

/*----------------------------------------------------------
* 复位操作(每一次操作前都要复危)flag 表示是否探测到18b20 
*/
uint8_t DS18b20_rest(void)
{
  94:	8b 9a       	sbi	0x11, 3	; 17
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
  96:	8a ee       	ldi	r24, 0xEA	; 234
  98:	91 e0       	ldi	r25, 0x01	; 1
  9a:	01 97       	sbiw	r24, 0x01	; 1
  9c:	f1 f7       	brne	.-4      	; 0x9a <DS18b20_rest+0x6>
	uint8_t flag;
	flag = 0;
	OW_TO_L();  //设置总线为低电平
	wait_us(490); //至少480us
	cli();
  9e:	f8 94       	cli
	OW_TO_H(); //设置总线为高电平
  a0:	8b 98       	cbi	0x11, 3	; 17
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
  a2:	83 e4       	ldi	r24, 0x43	; 67
  a4:	90 e0       	ldi	r25, 0x00	; 0
  a6:	01 97       	sbiw	r24, 0x01	; 1
  a8:	f1 f7       	brne	.-4      	; 0xa6 <DS18b20_rest+0x12>
	wait_us(67.5); //18b20等待(15-60us)+ 18b20拉低电平(60-240us)
	if (OW_STATUS())
  aa:	80 b3       	in	r24, 0x10	; 16
	{
		flag = 0; //没有18b20
	}
	else
	{
		flag = 1; //有18b20
	};
	sei();
  ac:	78 94       	sei
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
  ae:	e6 ea       	ldi	r30, 0xA6	; 166
  b0:	f1 e0       	ldi	r31, 0x01	; 1
  b2:	31 97       	sbiw	r30, 0x01	; 1
  b4:	f1 f7       	brne	.-4      	; 0xb2 <DS18b20_rest+0x1e>
  b6:	86 95       	lsr	r24
  b8:	86 95       	lsr	r24
  ba:	86 95       	lsr	r24
  bc:	80 95       	com	r24
  be:	81 70       	andi	r24, 0x01	; 1
	wait_us(490-67.5);
	return(flag);
}
  c0:	99 27       	eor	r25, r25
  c2:	08 95       	ret

000000c4 <DS18b20_write>:

/*-------------------------------------------------------------
* 写命令到18b20
*/

void DS18b20_write(uint8_t command)
{
  c4:	28 2f       	mov	r18, r24
  c6:	30 e0       	ldi	r19, 0x00	; 0
  c8:	e2 e0       	ldi	r30, 0x02	; 2
  ca:	f0 e0       	ldi	r31, 0x00	; 0
  cc:	ae e3       	ldi	r26, 0x3E	; 62
  ce:	b0 e0       	ldi	r27, 0x00	; 0
	uint8_t count;
	for(count=0;count<8; count++)
	{
		cli();
  d0:	f8 94       	cli
		OW_TO_L();
  d2:	8b 9a       	sbi	0x11, 3	; 17
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
  d4:	cf 01       	movw	r24, r30
  d6:	01 97       	sbiw	r24, 0x01	; 1
  d8:	f1 f7       	brne	.-4      	; 0xd6 <DS18b20_write+0x12>
		wait_us(2);  //每传送一位至少要隔1us
		if (command & 0X01)
  da:	20 ff       	sbrs	r18, 0
  dc:	02 c0       	rjmp	.+4      	; 0xe2 <DS18b20_write+0x1e>
		{
			OW_TO_H(); 
  de:	8b 98       	cbi	0x11, 3	; 17
  e0:	01 c0       	rjmp	.+2      	; 0xe4 <DS18b20_write+0x20>
		}
		else
		{
			OW_TO_L();
  e2:	8b 9a       	sbi	0x11, 3	; 17
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
  e4:	cd 01       	movw	r24, r26
  e6:	01 97       	sbiw	r24, 0x01	; 1
  e8:	f1 f7       	brne	.-4      	; 0xe6 <DS18b20_write+0x22>
		};
		command = command>>1;
		wait_us(62);
		OW_TO_H();
  ea:	8b 98       	cbi	0x11, 3	; 17
		sei();
  ec:	78 94       	sei
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
  ee:	cf 01       	movw	r24, r30
  f0:	01 97       	sbiw	r24, 0x01	; 1
  f2:	f1 f7       	brne	.-4      	; 0xf0 <DS18b20_write+0x2c>
  f4:	3f 5f       	subi	r19, 0xFF	; 255
  f6:	38 30       	cpi	r19, 0x08	; 8
  f8:	11 f0       	breq	.+4      	; 0xfe <DS18b20_write+0x3a>
  fa:	26 95       	lsr	r18
  fc:	e9 cf       	rjmp	.-46     	; 0xd0 <DS18b20_write+0xc>
  fe:	08 95       	ret

00000100 <DS18b20_read>:
		wait_us(2);
	}
}

/*-----------------------------------------------------------------
* DS18B20读配置或数据
*/

uint8_t DS18b20_read(void)
{
 100:	cf 93       	push	r28
 102:	df 93       	push	r29
 104:	30 e0       	ldi	r19, 0x00	; 0
 106:	20 e0       	ldi	r18, 0x00	; 0
 108:	c2 e0       	ldi	r28, 0x02	; 2
 10a:	d0 e0       	ldi	r29, 0x00	; 0
 10c:	a4 e0       	ldi	r26, 0x04	; 4
 10e:	b0 e0       	ldi	r27, 0x00	; 0
 110:	ee e3       	ldi	r30, 0x3E	; 62
 112:	f0 e0       	ldi	r31, 0x00	; 0
	uint8_t count,data;
	data = 0x00;
	for (count=0; count<8; count++)
	{
		cli();
 114:	f8 94       	cli
		OW_TO_L();
 116:	8b 9a       	sbi	0x11, 3	; 17
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 118:	ce 01       	movw	r24, r28
 11a:	01 97       	sbiw	r24, 0x01	; 1
 11c:	f1 f7       	brne	.-4      	; 0x11a <DS18b20_read+0x1a>
		wait_us(2);
		OW_TO_H();
 11e:	8b 98       	cbi	0x11, 3	; 17
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 120:	cd 01       	movw	r24, r26
 122:	01 97       	sbiw	r24, 0x01	; 1
 124:	f1 f7       	brne	.-4      	; 0x122 <DS18b20_read+0x22>
		wait_us(4);
		data = data>>1;
 126:	26 95       	lsr	r18
		if (OW_STATUS())
 128:	83 99       	sbic	0x10, 3	; 16
		{
			data|= 0x80; //读取总线电平,先接受低位再接受高位
 12a:	20 68       	ori	r18, 0x80	; 128
		};
		sei();
 12c:	78 94       	sei
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 12e:	cf 01       	movw	r24, r30
 130:	01 97       	sbiw	r24, 0x01	; 1
 132:	f1 f7       	brne	.-4      	; 0x130 <DS18b20_read+0x30>
 134:	3f 5f       	subi	r19, 0xFF	; 255
 136:	38 30       	cpi	r19, 0x08	; 8
 138:	69 f7       	brne	.-38     	; 0x114 <DS18b20_read+0x14>
		wait_us(62);
	}
	return(data);
}
 13a:	82 2f       	mov	r24, r18
 13c:	99 27       	eor	r25, r25
 13e:	df 91       	pop	r29
 140:	cf 91       	pop	r28
 142:	08 95       	ret

00000144 <covert_t>:

/*------------------------------------------------------------------
*开始采集温度
*/

void covert_t(void)
{
 144:	0e 94 4a 00 	call	0x94	; 0x94 <DS18b20_rest>
 148:	88 23       	and	r24, r24
 14a:	31 f0       	breq	.+12     	; 0x158 <covert_t+0x14>
	if (DS18b20_rest())
	{
		DS18b20_write(0xcc); //由于只有一个18b20跳过多器件识别
 14c:	8c ec       	ldi	r24, 0xCC	; 204
 14e:	0e 94 62 00 	call	0xc4	; 0xc4 <DS18b20_write>
		DS18b20_write(0x44); //启动温度转换
 152:	84 e4       	ldi	r24, 0x44	; 68
 154:	0e 94 62 00 	call	0xc4	; 0xc4 <DS18b20_write>
 158:	08 95       	ret

0000015a <read_t>:
	}
}

/*------------------------------------------------------------------
*   读出18b20采集的温度数据,
*/
uint16_t read_t(void)
{
 15a:	0f 93       	push	r16
 15c:	1f 93       	push	r17
	uint16_t value ;
	value = 0x0000;
	if(DS18b20_rest())
 15e:	0e 94 4a 00 	call	0x94	; 0x94 <DS18b20_rest>
 162:	88 23       	and	r24, r24
 164:	31 f0       	breq	.+12     	; 0x172 <read_t+0x18>
	{
		DS18b20_write(0xcc); //由于只有一个18b20跳过多器件识别
 166:	8c ec       	ldi	r24, 0xCC	; 204
 168:	0e 94 62 00 	call	0xc4	; 0xc4 <DS18b20_write>
		DS18b20_write(0xbe); //读出18b20 RAM中的内容
 16c:	8e eb       	ldi	r24, 0xBE	; 190
 16e:	0e 94 62 00 	call	0xc4	; 0xc4 <DS18b20_write>
	}
	value = DS18b20_read(); 	//读出低字节
 172:	0e 94 80 00 	call	0x100	; 0x100 <DS18b20_read>
 176:	08 2f       	mov	r16, r24
 178:	11 27       	eor	r17, r17
	value += DS18b20_read()<<8; 	//读出高字节
 17a:	0e 94 80 00 	call	0x100	; 0x100 <DS18b20_read>
 17e:	99 27       	eor	r25, r25
 180:	98 2f       	mov	r25, r24
 182:	88 27       	eor	r24, r24
	
	return value;
	
}
 184:	80 0f       	add	r24, r16
 186:	91 1f       	adc	r25, r17
 188:	1f 91       	pop	r17
 18a:	0f 91       	pop	r16
 18c:	08 95       	ret

0000018e <put_c>:



void put_c(unsigned char c) //发送采用查询方式
{
 18e:	5d 9b       	sbis	0x0b, 5	; 11
 190:	fe cf       	rjmp	.-4      	; 0x18e <put_c>
	while( !(UCSRA & (1<<UDRE)) );
	UDR=c;
 192:	8c b9       	out	0x0c, r24	; 12
 194:	08 95       	ret

00000196 <init_USART>:
}

void put_s(unsigned char *ptr)
{
	while (*ptr)
	{
		put_c(*ptr++);
	}
}

void init_USART(void)//USART 初始化
{
 196:	86 e8       	ldi	r24, 0x86	; 134
 198:	80 bd       	out	0x20, r24	; 32

⌨️ 快捷键说明

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