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

📄 main.lss

📁 avr当中的一个简单的温度测试程序和学习avr中的一些笔记
💻 LSS
📖 第 1 页 / 共 2 页
字号:

main.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         000004b0  00000000  00000000  00000094  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000026  00800060  000004b0  00000544  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000003  00800086  00800086  0000056a  2**0
                  ALLOC
  3 .stab         0000036c  00000000  00000000  0000056c  2**2
                  CONTENTS, READONLY, DEBUGGING
  4 .stabstr      00000084  00000000  00000000  000008d8  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_aranges 00000020  00000000  00000000  0000095c  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_pubnames 000000e9  00000000  00000000  0000097c  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_info   0000077d  00000000  00000000  00000a65  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_abbrev 00000234  00000000  00000000  000011e2  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_line   00000684  00000000  00000000  00001416  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_frame  000000d0  00000000  00000000  00001a9a  2**0
                  CONTENTS, READONLY, DEBUGGING
 11 .debug_str    0000019c  00000000  00000000  00001b6a  2**0
                  CONTENTS, READONLY, DEBUGGING
 12 .debug_loc    0000023c  00000000  00000000  00001d06  2**0
                  CONTENTS, READONLY, DEBUGGING
 13 .debug_ranges 000000f0  00000000  00000000  00001f42  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 19 01 	jmp	0x232	; 0x232 <__vector_11>
  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:	e0 eb       	ldi	r30, 0xB0	; 176
  68:	f4 e0       	ldi	r31, 0x04	; 4
  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:	a6 38       	cpi	r26, 0x86	; 134
  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:	a6 e8       	ldi	r26, 0x86	; 134
  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:	a9 38       	cpi	r26, 0x89	; 137
  82:	b1 07       	cpc	r27, r17
  84:	e1 f7       	brne	.-8      	; 0x7e <.do_clear_bss_loop>
  86:	0c 94 29 01 	jmp	0x252	; 0x252 <main>

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

0000008e <Port_Init>:
}

//端口状态初始化设置函数
void Port_Init()
{
  8e:	12 ba       	out	0x12, r1	; 18
	PORTD = 0X00;          //USART的发送接收端口分别为PD0和PD1
	DDRD |= (1 << PD1);   //PD0为接收端口,置为输入口;PD1为发送端口,置为输出口
  90:	89 9a       	sbi	0x11, 1	; 17

	PORTB = 0x00;
  92:	18 ba       	out	0x18, r1	; 24
	DDRB = 0xff;	
  94:	8f ef       	ldi	r24, 0xFF	; 255
  96:	87 bb       	out	0x17, r24	; 23
  98:	08 95       	ret

0000009a <Port_DS18b20>:
}

void Port_DS18b20()
{
  9a:	d2 98       	cbi	0x1a, 2	; 26
	DDRA &= ~(1 << PA2);   // 输入模式(上电时为高电平)
    PORTA &= ~(1 << PA2);  // 输出锁存器写0,以后不再更改
  9c:	da 98       	cbi	0x1b, 2	; 27
  9e:	08 95       	ret

000000a0 <Usart_Init>:
}

//USART寄存器配置函数
void Usart_Init()
{
  a0:	1b b8       	out	0x0b, r1	; 11
	UCSRA = 0X00;	
	UCSRC |= (1<<URSEL) | (1 << UCSZ1) | (1 << UCSZ0);  //异步,数据格式8,N,1
  a2:	80 b5       	in	r24, 0x20	; 32
  a4:	86 68       	ori	r24, 0x86	; 134
  a6:	80 bd       	out	0x20, r24	; 32
	     //UCSRC寄存器与UBRRH寄存器共用相同的I/O地址,写 UCSRC 时, URSEL 应设置为 1。
	UBRRL = (F_CPU / BAUD / 16 - 1) % 256;    //波特率设置
  a8:	8d e4       	ldi	r24, 0x4D	; 77
  aa:	89 b9       	out	0x09, r24	; 9
	UBRRH = (F_CPU / BAUD / 16 - 1) / 256;		
  ac:	10 bc       	out	0x20, r1	; 32
	UCSRB |= (1 << RXCIE) | (1 << RXEN) | (1 << TXEN);    //发送使能
  ae:	8a b1       	in	r24, 0x0a	; 10
  b0:	88 69       	ori	r24, 0x98	; 152
  b2:	8a b9       	out	0x0a, r24	; 10
  b4:	08 95       	ret

000000b6 <Usart_PutChar>:
	
}

//字节发送函数
void Usart_PutChar(unsigned char cTXData)
{
  b6:	5d 9b       	sbis	0x0b, 5	; 11
  b8:	fe cf       	rjmp	.-4      	; 0xb6 <Usart_PutChar>
	while( !(UCSRA & (1 << UDRE)) );  //只有数据寄存器为空时才能发送数据
	UDR = cTXData;	                 //发送数据送USART I/O数据寄存器-UDR
  ba:	8c b9       	out	0x0c, r24	; 12
  bc:	08 95       	ret

000000be <Usart_PutString>:
}

//接收中断函数
ISR(USART_RXC_vect )
{
	unsigned char Rev;
	Rev = UDR;              //从USART I/O数据寄存器-UDR中读出数据
	Usart_PutChar(Rev);    //将接收到的数据发送
}


void Usart_PutString(unsigned char *pcString)
{
  be:	fc 01       	movw	r30, r24
  c0:	04 c0       	rjmp	.+8      	; 0xca <Usart_PutString+0xc>
  c2:	5d 9b       	sbis	0x0b, 5	; 11
  c4:	fe cf       	rjmp	.-4      	; 0xc2 <Usart_PutString+0x4>
	while (*pcString)
	{
		Usart_PutChar(*pcString++);
  c6:	31 96       	adiw	r30, 0x01	; 1
  c8:	8c b9       	out	0x0c, r24	; 12
  ca:	80 81       	ld	r24, Z
  cc:	88 23       	and	r24, r24
  ce:	c9 f7       	brne	.-14     	; 0xc2 <Usart_PutString+0x4>
  d0:	08 95       	ret

000000d2 <DS18B20_Init>:
	}	
}

//DS18B20初始化
unsigned char DS18B20_Init()
{	
  d2:	d2 9a       	sbi	0x1a, 2	; 26
  d4:	29 ee       	ldi	r18, 0xE9	; 233
  d6:	31 e0       	ldi	r19, 0x01	; 1
  d8:	e3 e0       	ldi	r30, 0x03	; 3
  da:	f0 e0       	ldi	r31, 0x00	; 0
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
  dc:	cf 01       	movw	r24, r30
  de:	01 97       	sbiw	r24, 0x01	; 1
  e0:	f1 f7       	brne	.-4      	; 0xde <DS18B20_Init+0xc>
	SET_OUT;   //PA2设置为输出口(相当于拉低数据线上的电平)	
	
	Delayus(490);  //延时大于480us
	
	SET_IN;     //输入 释放数据线(相当于拉高数据线上的电平)
	
	Delayus(68);	//延时大于60US,
		
	//while(DQ_IN);	    //可以用两个while()死循环来判断复位是否成功,当数据线被拉低,说明
	//while(!(DQ_IN));	 //18b20开始复位应答,当数据线变高,说明应答完毕
	
	if(DQ_IN)   //判断DS18B20是否拉低数据线
	{
		OK_Flag = 0;		//	数据线是高?复位失败
	}
	else
	{
		OK_Flag = 1;	//	数据线是低?复位成功
	}
	Delayus(422);	//有复位应答信号后,应当再延时一段时间(480-68),以等待应答完毕
	
	return OK_Flag;    //返回复位标志
}

//从DS18B20读取一个字节数据
unsigned char Read_18b20()
{
	unsigned char i;   
	unsigned char dat = 0;   // dat用于存储读到的数据,先清零	
	
	for(i = 0;i < 8;i++)   //共读8位数据,构成一个字节
	{		
		SET_OUT;    //定义为输出(拉低数据线)
		
		Delayus(2);   //拉低2微秒		
		
		SET_IN;        //定义成输入,读入数据(同时也相当于拉高数据线)
			
		Delayus(4);        //延时
		dat = dat >> 1;	       //数据右移,读顺序:先低后高
		if(DQ_IN)       //读数据,
		{			
			dat |= 0x80;   //如果是高,置1,右移数据
		}
		Delayus(62);		 //延时大于60us
	}	
	return dat;     //返回读到的1字节数据
}

//向DS18B20写1字节数据
void Write_18b20(unsigned char dat)
{
	unsigned char i;	
	
	for(i = 0;i < 8;i++)  //写8次,一次写1位,先写低字节
	{
		SET_OUT;         //拉低数据线2us,开始写数据
		Delayus(2);      //
		
		if(dat & 0x01)   //写数据
		{
			SET_IN;    //写1			
		}
		else
		{
			SET_OUT;   //写0			
		}
		dat >>= 1;      //数据右移1位,先写低位
		Delayus(62);       //延时大于60us	
			
		SET_IN;          //拉高数据线
		Delayus(2);   //写两位数据的时间间隔
		
	}	
}

//us级别的延时函数
void Delayus(unsigned int lus)
{
	while(lus--)
  e2:	21 50       	subi	r18, 0x01	; 1
  e4:	30 40       	sbci	r19, 0x00	; 0
  e6:	8f ef       	ldi	r24, 0xFF	; 255
  e8:	2f 3f       	cpi	r18, 0xFF	; 255
  ea:	38 07       	cpc	r19, r24
  ec:	b9 f7       	brne	.-18     	; 0xdc <DS18B20_Init+0xa>
  ee:	d2 98       	cbi	0x1a, 2	; 26
  f0:	23 e4       	ldi	r18, 0x43	; 67
  f2:	30 e0       	ldi	r19, 0x00	; 0
  f4:	e3 e0       	ldi	r30, 0x03	; 3
  f6:	f0 e0       	ldi	r31, 0x00	; 0
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
  f8:	cf 01       	movw	r24, r30
  fa:	01 97       	sbiw	r24, 0x01	; 1
  fc:	f1 f7       	brne	.-4      	; 0xfa <DS18B20_Init+0x28>
  fe:	21 50       	subi	r18, 0x01	; 1
 100:	30 40       	sbci	r19, 0x00	; 0
 102:	8f ef       	ldi	r24, 0xFF	; 255
 104:	2f 3f       	cpi	r18, 0xFF	; 255
 106:	38 07       	cpc	r19, r24
 108:	b9 f7       	brne	.-18     	; 0xf8 <DS18B20_Init+0x26>
 10a:	ca 9b       	sbis	0x19, 2	; 25
 10c:	03 c0       	rjmp	.+6      	; 0x114 <DS18B20_Init+0x42>
 10e:	10 92 88 00 	sts	0x0088, r1
 112:	03 c0       	rjmp	.+6      	; 0x11a <DS18B20_Init+0x48>
 114:	81 e0       	ldi	r24, 0x01	; 1
 116:	80 93 88 00 	sts	0x0088, r24
 11a:	25 ea       	ldi	r18, 0xA5	; 165
 11c:	31 e0       	ldi	r19, 0x01	; 1
 11e:	e3 e0       	ldi	r30, 0x03	; 3
 120:	f0 e0       	ldi	r31, 0x00	; 0
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 122:	cf 01       	movw	r24, r30
 124:	01 97       	sbiw	r24, 0x01	; 1
 126:	f1 f7       	brne	.-4      	; 0x124 <DS18B20_Init+0x52>
 128:	21 50       	subi	r18, 0x01	; 1
 12a:	30 40       	sbci	r19, 0x00	; 0
 12c:	8f ef       	ldi	r24, 0xFF	; 255
 12e:	2f 3f       	cpi	r18, 0xFF	; 255
 130:	38 07       	cpc	r19, r24
 132:	b9 f7       	brne	.-18     	; 0x122 <DS18B20_Init+0x50>
 134:	80 91 88 00 	lds	r24, 0x0088
 138:	99 27       	eor	r25, r25
 13a:	08 95       	ret

0000013c <Read_18b20>:
 13c:	50 e0       	ldi	r21, 0x00	; 0
 13e:	40 e0       	ldi	r20, 0x00	; 0
 140:	e3 e0       	ldi	r30, 0x03	; 3
 142:	f0 e0       	ldi	r31, 0x00	; 0
 144:	d2 9a       	sbi	0x1a, 2	; 26
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 146:	cf 01       	movw	r24, r30
 148:	01 97       	sbiw	r24, 0x01	; 1
 14a:	f1 f7       	brne	.-4      	; 0x148 <Read_18b20+0xc>
 14c:	cf 01       	movw	r24, r30
 14e:	01 97       	sbiw	r24, 0x01	; 1
 150:	f1 f7       	brne	.-4      	; 0x14e <Read_18b20+0x12>
 152:	d2 98       	cbi	0x1a, 2	; 26
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 154:	cf 01       	movw	r24, r30
 156:	01 97       	sbiw	r24, 0x01	; 1
 158:	f1 f7       	brne	.-4      	; 0x156 <Read_18b20+0x1a>
 15a:	cf 01       	movw	r24, r30
 15c:	01 97       	sbiw	r24, 0x01	; 1
 15e:	f1 f7       	brne	.-4      	; 0x15c <Read_18b20+0x20>
 160:	cf 01       	movw	r24, r30
 162:	01 97       	sbiw	r24, 0x01	; 1
 164:	f1 f7       	brne	.-4      	; 0x162 <Read_18b20+0x26>
 166:	cf 01       	movw	r24, r30
 168:	01 97       	sbiw	r24, 0x01	; 1
 16a:	f1 f7       	brne	.-4      	; 0x168 <Read_18b20+0x2c>
 16c:	46 95       	lsr	r20
 16e:	ca 99       	sbic	0x19, 2	; 25
 170:	40 68       	ori	r20, 0x80	; 128
 172:	2d e3       	ldi	r18, 0x3D	; 61
 174:	30 e0       	ldi	r19, 0x00	; 0
 176:	a3 e0       	ldi	r26, 0x03	; 3
 178:	b0 e0       	ldi	r27, 0x00	; 0
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 17a:	cd 01       	movw	r24, r26
 17c:	01 97       	sbiw	r24, 0x01	; 1
 17e:	f1 f7       	brne	.-4      	; 0x17c <Read_18b20+0x40>
 180:	21 50       	subi	r18, 0x01	; 1
 182:	30 40       	sbci	r19, 0x00	; 0
 184:	8f ef       	ldi	r24, 0xFF	; 255
 186:	2f 3f       	cpi	r18, 0xFF	; 255
 188:	38 07       	cpc	r19, r24
 18a:	b9 f7       	brne	.-18     	; 0x17a <Read_18b20+0x3e>
 18c:	5f 5f       	subi	r21, 0xFF	; 255
 18e:	58 30       	cpi	r21, 0x08	; 8
 190:	c9 f6       	brne	.-78     	; 0x144 <Read_18b20+0x8>
 192:	84 2f       	mov	r24, r20
 194:	99 27       	eor	r25, r25
 196:	08 95       	ret

⌨️ 快捷键说明

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