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

📄 hjmcu.lss

📁 很实用的单片机例程
💻 LSS
字号:

hjmcu.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000194  00000000  00000000  00000094  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000020  00800060  00000194  00000228  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000000  00800080  000001b4  00000248  2**0
                  ALLOC
  3 .noinit       00000000  00800080  00800080  00000248  2**0
                  CONTENTS
  4 .eeprom       00000000  00810000  00810000  00000248  2**0
                  CONTENTS
  5 .stab         0000036c  00000000  00000000  00000248  2**2
                  CONTENTS, READONLY, DEBUGGING
  6 .stabstr      00000084  00000000  00000000  000005b4  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_aranges 00000014  00000000  00000000  00000638  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_pubnames 00000086  00000000  00000000  0000064c  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_info   00000436  00000000  00000000  000006d2  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_abbrev 00000129  00000000  00000000  00000b08  2**0
                  CONTENTS, READONLY, DEBUGGING
 11 .debug_line   0000022f  00000000  00000000  00000c31  2**0
                  CONTENTS, READONLY, DEBUGGING
 12 .debug_str    0000011d  00000000  00000000  00000e60  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 45 00 	jmp	0x8a <__bad_interrupt>
  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:	e4 e9       	ldi	r30, 0x94	; 148
  68:	f1 e0       	ldi	r31, 0x01	; 1
  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:	a0 38       	cpi	r26, 0x80	; 128
  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:	a0 e8       	ldi	r26, 0x80	; 128
  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:	a0 38       	cpi	r26, 0x80	; 128
  82:	b1 07       	cpc	r27, r17
  84:	e1 f7       	brne	.-8      	; 0x7e <.do_clear_bss_loop>
  86:	0c 94 8a 00 	jmp	0x114 <main>

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

0000008e <Port_Init>:

void Port_Init()
{      
	//LCD数据端口设置
	PORTA = 0X00;         //
  8e:	1b ba       	out	0x1b, r1	; 27
	DDRA = 0XFF;           //配置端口PA全部为输出口,LCD数据端口
  90:	8f ef       	ldi	r24, 0xFF	; 255
  92:	8a bb       	out	0x1a, r24	; 26
	
	//LCD控制端口设置
	PORTD = 0X00;         //
  94:	12 ba       	out	0x12, r1	; 18
	DDRD |= (1 << RS) | (1 << RW) | (1 << E);
  96:	81 b3       	in	r24, 0x11	; 17
  98:	80 67       	ori	r24, 0x70	; 112
  9a:	81 bb       	out	0x11, r24	; 17
  9c:	08 95       	ret

0000009e <Write_Com>:
	//DDRD |= (1 << RS) | (1 << RW) | (1 << E);  //配置端口PD的第4、5、6为输出口
	
}

void LCD_Init()
{
	Write_Com(0X01);  //清屏
	_delay_ms(5);
	Write_Com(0X38);  //显示模式设置 16x2显示,5x7点阵,8位数据接口
	_delay_ms(5);
	//Write_Com(0X0f);  //显示开关控制,开显示,光标显示,光标闪烁
	Write_Com(0X0c);  //显示开关控制,开显示,光标不显示,光标不闪烁
	_delay_ms(5);
	Write_Com(0X06);  //光标设置,读或写一个字符后,地址指针加一,光标加一,整屏不移动
	_delay_ms(5);
}

void Write_Com(unsigned char LCD_Com)
{
  9e:	28 2f       	mov	r18, r24
//	Check_Busy();
	
	PORTD &= ~(1 << RS);     //RS=0,写命令
  a0:	95 98       	cbi	0x12, 5	; 18
	PORTD &= ~(1 << RW);     //RW=0,写指令
  a2:	96 98       	cbi	0x12, 6	; 18
	PORTD |= (1 << E);       //E=1,写操作
  a4:	94 9a       	sbi	0x12, 4	; 18
		__ticks = 1;
	else if (__tmp > 65535)
		__ticks = 0;	/* i.e. 65536 */
	else
		__ticks = (uint16_t)__tmp;
  a6:	82 ee       	ldi	r24, 0xE2	; 226
  a8:	94 e0       	ldi	r25, 0x04	; 4
  aa:	fc 01       	movw	r30, r24
  ac:	31 97       	sbiw	r30, 0x01	; 1
  ae:	f1 f7       	brne	.-4      	; 0xac <Write_Com+0xe>
	_delay_ms(5);
	PORTA = LCD_Com;         //指令送数据端口
  b0:	2b bb       	out	0x1b, r18	; 27
	PORTD &= ~(1 << E);     //E=0,停止写操作
  b2:	94 98       	cbi	0x12, 4	; 18
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
  b4:	01 97       	sbiw	r24, 0x01	; 1
  b6:	f1 f7       	brne	.-4      	; 0xb4 <Write_Com+0x16>
  b8:	08 95       	ret

000000ba <LCD_Init>:
  ba:	0f 93       	push	r16
  bc:	1f 93       	push	r17
  be:	81 e0       	ldi	r24, 0x01	; 1
  c0:	0e 94 4f 00 	call	0x9e <Write_Com>
		__ticks = 1;
	else if (__tmp > 65535)
		__ticks = 0;	/* i.e. 65536 */
	else
		__ticks = (uint16_t)__tmp;
  c4:	02 ee       	ldi	r16, 0xE2	; 226
  c6:	14 e0       	ldi	r17, 0x04	; 4
  c8:	c8 01       	movw	r24, r16
  ca:	01 97       	sbiw	r24, 0x01	; 1
  cc:	f1 f7       	brne	.-4      	; 0xca <LCD_Init+0x10>
  ce:	88 e3       	ldi	r24, 0x38	; 56
  d0:	0e 94 4f 00 	call	0x9e <Write_Com>
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
  d4:	c8 01       	movw	r24, r16
  d6:	01 97       	sbiw	r24, 0x01	; 1
  d8:	f1 f7       	brne	.-4      	; 0xd6 <LCD_Init+0x1c>
  da:	8c e0       	ldi	r24, 0x0C	; 12
  dc:	0e 94 4f 00 	call	0x9e <Write_Com>
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
  e0:	c8 01       	movw	r24, r16
  e2:	01 97       	sbiw	r24, 0x01	; 1
  e4:	f1 f7       	brne	.-4      	; 0xe2 <LCD_Init+0x28>
  e6:	86 e0       	ldi	r24, 0x06	; 6
  e8:	0e 94 4f 00 	call	0x9e <Write_Com>
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
  ec:	c8 01       	movw	r24, r16
  ee:	01 97       	sbiw	r24, 0x01	; 1
  f0:	f1 f7       	brne	.-4      	; 0xee <LCD_Init+0x34>
  f2:	1f 91       	pop	r17
  f4:	0f 91       	pop	r16
  f6:	08 95       	ret

000000f8 <Write_Data>:
	_delay_ms(5);
	
}

void Write_Data(unsigned char LCD_Data)
{
  f8:	28 2f       	mov	r18, r24
//	Check_Busy();

	PORTD |= (1 << RS);      //RS=1,写数据
  fa:	95 9a       	sbi	0x12, 5	; 18
	PORTD &= ~(1 << RW);    //RW=0,写指令
  fc:	96 98       	cbi	0x12, 6	; 18
	PORTD |= (1 << E);      //E=1,写操作
  fe:	94 9a       	sbi	0x12, 4	; 18
		__ticks = 1;
	else if (__tmp > 65535)
		__ticks = 0;	/* i.e. 65536 */
	else
		__ticks = (uint16_t)__tmp;
 100:	82 ee       	ldi	r24, 0xE2	; 226
 102:	94 e0       	ldi	r25, 0x04	; 4
 104:	fc 01       	movw	r30, r24
 106:	31 97       	sbiw	r30, 0x01	; 1
 108:	f1 f7       	brne	.-4      	; 0x106 <Write_Data+0xe>
	_delay_ms(5);  
	PORTA = LCD_Data;        // 数据送数据端口   
 10a:	2b bb       	out	0x1b, r18	; 27
	PORTD &= ~(1 << E);    //E=0,停止写操作
 10c:	94 98       	cbi	0x12, 4	; 18
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 10e:	01 97       	sbiw	r24, 0x01	; 1
 110:	f1 f7       	brne	.-4      	; 0x10e <Write_Data+0x16>
 112:	08 95       	ret

00000114 <main>:
 114:	cf e5       	ldi	r28, 0x5F	; 95
 116:	d4 e0       	ldi	r29, 0x04	; 4
 118:	de bf       	out	0x3e, r29	; 62
 11a:	cd bf       	out	0x3d, r28	; 61
 11c:	0e 94 47 00 	call	0x8e <Port_Init>
 120:	0e 94 5d 00 	call	0xba <LCD_Init>
 124:	80 e9       	ldi	r24, 0x90	; 144
 126:	0e 94 4f 00 	call	0x9e <Write_Com>
 12a:	0f e6       	ldi	r16, 0x6F	; 111
 12c:	10 e0       	ldi	r17, 0x00	; 0
 12e:	ce e0       	ldi	r28, 0x0E	; 14
 130:	f8 01       	movw	r30, r16
 132:	81 91       	ld	r24, Z+
 134:	8f 01       	movw	r16, r30
 136:	0e 94 7c 00 	call	0xf8 <Write_Data>
		__ticks = 1;
	else if (__tmp > 65535)
		__ticks = 0;	/* i.e. 65536 */
	else
		__ticks = (uint16_t)__tmp;
 13a:	82 ee       	ldi	r24, 0xE2	; 226
 13c:	94 e0       	ldi	r25, 0x04	; 4
 13e:	01 97       	sbiw	r24, 0x01	; 1
 140:	f1 f7       	brne	.-4      	; 0x13e <main+0x2a>
 142:	c1 50       	subi	r28, 0x01	; 1
 144:	c7 ff       	sbrs	r28, 7
 146:	f4 cf       	rjmp	.-24     	; 0x130 <main+0x1c>
 148:	80 ed       	ldi	r24, 0xD0	; 208
 14a:	0e 94 4f 00 	call	0x9e <Write_Com>
 14e:	00 e6       	ldi	r16, 0x60	; 96
 150:	10 e0       	ldi	r17, 0x00	; 0
 152:	cd e0       	ldi	r28, 0x0D	; 13
 154:	f8 01       	movw	r30, r16
 156:	81 91       	ld	r24, Z+
 158:	8f 01       	movw	r16, r30
 15a:	0e 94 7c 00 	call	0xf8 <Write_Data>
		__ticks = 1;
	else if (__tmp > 65535)
		__ticks = 0;	/* i.e. 65536 */
	else
		__ticks = (uint16_t)__tmp;
 15e:	82 ee       	ldi	r24, 0xE2	; 226
 160:	94 e0       	ldi	r25, 0x04	; 4
 162:	01 97       	sbiw	r24, 0x01	; 1
 164:	f1 f7       	brne	.-4      	; 0x162 <main+0x4e>
 166:	c1 50       	subi	r28, 0x01	; 1
 168:	c7 ff       	sbrs	r28, 7
 16a:	f4 cf       	rjmp	.-24     	; 0x154 <main+0x40>
 16c:	cf e0       	ldi	r28, 0x0F	; 15
 16e:	88 e1       	ldi	r24, 0x18	; 24
 170:	0e 94 4f 00 	call	0x9e <Write_Com>
		__ticks = 1;
	else if (__tmp > 65535)
		__ticks = 0;	/* i.e. 65536 */
	else
		__ticks = (uint16_t)__tmp;
 174:	80 e5       	ldi	r24, 0x50	; 80
 176:	93 ec       	ldi	r25, 0xC3	; 195
 178:	01 97       	sbiw	r24, 0x01	; 1
 17a:	f1 f7       	brne	.-4      	; 0x178 <main+0x64>
 17c:	c1 50       	subi	r28, 0x01	; 1
 17e:	c7 ff       	sbrs	r28, 7
 180:	f6 cf       	rjmp	.-20     	; 0x16e <main+0x5a>
 182:	ff cf       	rjmp	.-2      	; 0x182 <main+0x6e>

00000184 <Check_Busy>:
	_delay_ms(5);
	
}

void Check_Busy()
{
    	
	DDRA = 0X00;             //PA口置为输入口,准备读取数据
 184:	1a ba       	out	0x1a, r1	; 26
	PORTD &= ~(1 << RS);      //RS=0,读命令
 186:	95 98       	cbi	0x12, 5	; 18
	PORTD |= (1 << RW);    //RW=1,读指令
 188:	96 9a       	sbi	0x12, 6	; 18
	PORTD |= (1 << E);      //E=1,使能
 18a:	94 9a       	sbi	0x12, 4	; 18
	
	//while(0X80 & PINB);   //监测忙信号,直到忙信号为0,才能进行读写操作
	PORTD &= ~(1 << E);   //E=0
 18c:	94 98       	cbi	0x12, 4	; 18
	DDRA = 0XFF;          //PA口置为输出口,准备向端口发送数据
 18e:	8f ef       	ldi	r24, 0xFF	; 255
 190:	8a bb       	out	0x1a, r24	; 26
 192:	08 95       	ret

⌨️ 快捷键说明

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