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

📄 hjmcu.lss

📁 很实用的单片机例程
💻 LSS
📖 第 1 页 / 共 3 页
字号:

hjmcu.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         000005e6  00000000  00000000  00000094  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         0000004c  00800060  000005e6  0000067a  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000007  008000ac  008000ac  000006c6  2**0
                  ALLOC
  3 .noinit       00000000  008000b3  008000b3  000006c6  2**0
                  CONTENTS
  4 .eeprom       00000000  00810000  00810000  000006c6  2**0
                  CONTENTS
  5 .stab         0000036c  00000000  00000000  000006c8  2**2
                  CONTENTS, READONLY, DEBUGGING
  6 .stabstr      00000084  00000000  00000000  00000a34  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_aranges 00000014  00000000  00000000  00000ab8  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_pubnames 0000012c  00000000  00000000  00000acc  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_info   00000389  00000000  00000000  00000bf8  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_abbrev 000001ae  00000000  00000000  00000f81  2**0
                  CONTENTS, READONLY, DEBUGGING
 11 .debug_line   000004ff  00000000  00000000  0000112f  2**0
                  CONTENTS, READONLY, DEBUGGING
 12 .debug_str    00000187  00000000  00000000  0000162e  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	0c 94 2a 00 	jmp	0x54 <__ctors_end>
   4:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
   8:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
   c:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  10:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  14:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  18:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  1c:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  20:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  24:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  28:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  2c:	0c 94 6c 00 	jmp	0xd8 <__vector_11>
  30:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  34:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  38:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  3c:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  40:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  44:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  48:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  4c:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  50:	0c 94 45 00 	jmp	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 ee       	ldi	r30, 0xE6	; 230
  68:	f5 e0       	ldi	r31, 0x05	; 5
  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:	ac 3a       	cpi	r26, 0xAC	; 172
  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:	ac ea       	ldi	r26, 0xAC	; 172
  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:	a3 3b       	cpi	r26, 0xB3	; 179
  82:	b1 07       	cpc	r27, r17
  84:	e1 f7       	brne	.-8      	; 0x7e <.do_clear_bss_loop>
  86:	0c 94 7e 01 	jmp	0x2fc <main>

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

0000008e <Port_Init>:

//端口状态初始化设置函数
void Port_Init()
{
	PORTD = 0X00;          //USART的发送接收端口分别为PD0和PD1
  8e:	12 ba       	out	0x12, r1	; 18
	DDRD |= (1 << PD1);   //PD0为接收端口,置为输入口;PD1为发送端口,置为输出口
  90:	89 9a       	sbi	0x11, 1	; 17
	
	DDRC |= (1 << PC0) | (1 << PC1); //DS1302的SCLK和I/O引脚设为输出
  92:	84 b3       	in	r24, 0x14	; 20
  94:	83 60       	ori	r24, 0x03	; 3
  96:	84 bb       	out	0x14, r24	; 20
	DDRC |= (1 << PC5);                //DS1302的RST引脚设为输出
  98:	a5 9a       	sbi	0x14, 5	; 20
  9a:	08 95       	ret

0000009c <Usart_Init>:
}

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

000000b2 <Usart_PutChar>:
	
}

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

000000ba <Usart_PutString>:
}

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


void Usart_PutString(unsigned char *pcString)
{
  ba:	cf 93       	push	r28
  bc:	df 93       	push	r29
  be:	ec 01       	movw	r28, r24
	while (*pcString)
	{
		Usart_PutChar(*pcString++);
  c0:	88 81       	ld	r24, Y
  c2:	88 23       	and	r24, r24
  c4:	31 f0       	breq	.+12     	; 0xd2 <Usart_PutString+0x18>
  c6:	89 91       	ld	r24, Y+
  c8:	0e 94 59 00 	call	0xb2 <Usart_PutChar>
  cc:	88 81       	ld	r24, Y
  ce:	88 23       	and	r24, r24
  d0:	d1 f7       	brne	.-12     	; 0xc6 <Usart_PutString+0xc>
  d2:	df 91       	pop	r29
  d4:	cf 91       	pop	r28
  d6:	08 95       	ret

000000d8 <__vector_11>:
  d8:	1f 92       	push	r1
  da:	0f 92       	push	r0
  dc:	0f b6       	in	r0, 0x3f	; 63
  de:	0f 92       	push	r0
  e0:	11 24       	eor	r1, r1
  e2:	2f 93       	push	r18
  e4:	3f 93       	push	r19
  e6:	4f 93       	push	r20
  e8:	5f 93       	push	r21
  ea:	6f 93       	push	r22
  ec:	7f 93       	push	r23
  ee:	8f 93       	push	r24
  f0:	9f 93       	push	r25
  f2:	af 93       	push	r26
  f4:	bf 93       	push	r27
  f6:	ef 93       	push	r30
  f8:	ff 93       	push	r31
  fa:	8c b1       	in	r24, 0x0c	; 12
  fc:	0e 94 59 00 	call	0xb2 <Usart_PutChar>
 100:	ff 91       	pop	r31
 102:	ef 91       	pop	r30
 104:	bf 91       	pop	r27
 106:	af 91       	pop	r26
 108:	9f 91       	pop	r25
 10a:	8f 91       	pop	r24
 10c:	7f 91       	pop	r23
 10e:	6f 91       	pop	r22
 110:	5f 91       	pop	r21
 112:	4f 91       	pop	r20
 114:	3f 91       	pop	r19
 116:	2f 91       	pop	r18
 118:	0f 90       	pop	r0
 11a:	0f be       	out	0x3f, r0	; 63
 11c:	0f 90       	pop	r0
 11e:	1f 90       	pop	r1
 120:	18 95       	reti

00000122 <Delayus>:
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 122:	9c 01       	movw	r18, r24
 124:	21 50       	subi	r18, 0x01	; 1
 126:	30 40       	sbci	r19, 0x00	; 0
 128:	8f ef       	ldi	r24, 0xFF	; 255
 12a:	2f 3f       	cpi	r18, 0xFF	; 255
 12c:	38 07       	cpc	r19, r24
 12e:	29 f0       	breq	.+10     	; 0x13a <Delayus+0x18>
 130:	83 e0       	ldi	r24, 0x03	; 3
 132:	90 e0       	ldi	r25, 0x00	; 0
 134:	01 97       	sbiw	r24, 0x01	; 1
 136:	f1 f7       	brne	.-4      	; 0x134 <Delayus+0x12>
 138:	f5 cf       	rjmp	.-22     	; 0x124 <Delayus+0x2>
 13a:	08 95       	ret

0000013c <Delayms>:
	}	
}

//从DS1302读一个字节数据
unsigned char DS1302_ReadByte(void)         
{
	unsigned char i,dat = 0;  //dat存放读出的数据,初始化为0
	PORTC &= ~(1 << PC0);     //DS1302的I/O口上拉不使能,
	DDRC &= ~(1 << PC0);      //DS1302的I/O口设置为输入口,准备读数据
	
	for(i = 0;i < 8;i++)     //读8位,低位在前,右移
	{
		dat >>= 1;           //读出的数据右移一位
		PORTC |= (1 << PC1);  //DS1302的SCLK端口拉高
		Delayus(10);          //
		PORTC &= ~(1 << PC1);  //DS1302的SCLK端口拉低,产生下降沿,
		Delayus(10); 
		if(PINC & (1 << PC0))     //读数据端口状态
		{
			dat |= 0x80;          //如果数据端口位高,相应数据位置1
		}		
	}
	DDRC |= (1 << PC0);		 //最后将数据端口设置为输出
    return dat;				 //返回读出的数据
}

//向DS1302写一个字节数据
void DS1302_WriteByte(unsigned char dat)    
{
	unsigned char i;
	
	for(i = 0;i < 8;i++)      //写8位,低位在前
	{
		PORTC &= ~(1 << PC1);  //DS1302的SCLK置低
		if(dat & 0x01)        //写数据位
		{
			PORTC |= (1 << PC0);   //如果该位为1,则I/O口置高
		}
		else
		{
			PORTC &= ~(1 << PC0);   //如果该位为0,则I/O口置低
		}
		Delayus(10);          //
		PORTC |= (1 << PC1);   //DS1302的SCLK置高,产生上升沿
		dat >>= 1;               //数据右移1位
	}  
}

//从DS1302的指定地址读一个字节数据
unsigned char DS1302_ReadData(unsigned addr) 
{
	unsigned char data;
	
	PORTC &= ~(1 << PC5); //拉低片选端
	PORTC &= ~(1 << PC1);//拉低时钟端
	Delayus(10);
	PORTC |= (1 << PC5);//拉高片选端
	Delayus(10);
	DS1302_WriteByte(addr);//写入操作命令(地址)
	Delayus(10);
	data = DS1302_ReadByte();//读出数据

⌨️ 快捷键说明

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