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

📄 hjmcu.lss

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

hjmcu.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         000002d4  00000000  00000000  00000094  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000000  00800060  000002d4  00000368  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000000  00800060  000002d4  00000368  2**0
                  ALLOC
  3 .noinit       00000000  00800060  00800060  00000368  2**0
                  CONTENTS
  4 .eeprom       00000000  00810000  00810000  00000368  2**0
                  CONTENTS
  5 .stab         0000036c  00000000  00000000  00000368  2**2
                  CONTENTS, READONLY, DEBUGGING
  6 .stabstr      00000084  00000000  00000000  000006d4  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_aranges 00000014  00000000  00000000  00000758  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_pubnames 000000a7  00000000  00000000  0000076c  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_info   00000259  00000000  00000000  00000813  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_abbrev 0000013c  00000000  00000000  00000a6c  2**0
                  CONTENTS, READONLY, DEBUGGING
 11 .debug_line   0000031d  00000000  00000000  00000ba8  2**0
                  CONTENTS, READONLY, DEBUGGING
 12 .debug_str    000000fa  00000000  00000000  00000ec5  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 ed       	ldi	r30, 0xD4	; 212
  68:	f2 e0       	ldi	r31, 0x02	; 2
  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 36       	cpi	r26, 0x60	; 96
  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 e6       	ldi	r26, 0x60	; 96
  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 36       	cpi	r26, 0x60	; 96
  82:	b1 07       	cpc	r27, r17
  84:	e1 f7       	brne	.-8      	; 0x7e <.do_clear_bss_loop>
  86:	0c 94 4e 01 	jmp	0x29c <main>

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

0000008e <Delayus>:
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
  8e:	9c 01       	movw	r18, r24
  90:	21 50       	subi	r18, 0x01	; 1
  92:	30 40       	sbci	r19, 0x00	; 0
  94:	8f ef       	ldi	r24, 0xFF	; 255
  96:	2f 3f       	cpi	r18, 0xFF	; 255
  98:	38 07       	cpc	r19, r24
  9a:	29 f0       	breq	.+10     	; 0xa6 <Delayus+0x18>
  9c:	83 e0       	ldi	r24, 0x03	; 3
  9e:	90 e0       	ldi	r25, 0x00	; 0
  a0:	01 97       	sbiw	r24, 0x01	; 1
  a2:	f1 f7       	brne	.-4      	; 0xa0 <Delayus+0x12>
  a4:	f5 cf       	rjmp	.-22     	; 0x90 <Delayus+0x2>
  a6:	08 95       	ret

000000a8 <I2C_Init>:

//I2C初始化函数
void I2C_Init(void)
{
	SCL_LOW;    //SCL的PORT状态锁定为0,以后不再改变
  a8:	a9 98       	cbi	0x15, 1	; 21
	SCL_INPUT;   //SCL设置为输入口
  aa:	a1 98       	cbi	0x14, 1	; 20
	
	SDA_LOW;    //SDA的PORT状态锁定为0,以后不再改变
  ac:	a8 98       	cbi	0x15, 0	; 21
	SDA_INPUT;    //SDA设置为输入口
  ae:	a0 98       	cbi	0x14, 0	; 20
	Delayus(10);
  b0:	8a e0       	ldi	r24, 0x0A	; 10
  b2:	90 e0       	ldi	r25, 0x00	; 0
  b4:	0e 94 47 00 	call	0x8e <Delayus>
  b8:	08 95       	ret

000000ba <I2C_Start>:
}

//I2C起始条件
unsigned char I2C_Start(void)
{
	Delayus(10);
  ba:	8a e0       	ldi	r24, 0x0A	; 10
  bc:	90 e0       	ldi	r25, 0x00	; 0
  be:	0e 94 47 00 	call	0x8e <Delayus>
	SDA_INPUT;   //SDA高电平
  c2:	a0 98       	cbi	0x14, 0	; 20
	Delayus(10);  //延时一段时间,使单片机时钟频率符合I2C时钟
  c4:	8a e0       	ldi	r24, 0x0A	; 10
  c6:	90 e0       	ldi	r25, 0x00	; 0
  c8:	0e 94 47 00 	call	0x8e <Delayus>
	SCL_INPUT;   //SCL高电平
  cc:	a1 98       	cbi	0x14, 1	; 20
	Delayus(10);	
  ce:	8a e0       	ldi	r24, 0x0A	; 10
  d0:	90 e0       	ldi	r25, 0x00	; 0
  d2:	0e 94 47 00 	call	0x8e <Delayus>
	SDA_OUTPUT;	  //SDA变低,产生由高到低的变化
  d6:	a0 9a       	sbi	0x14, 0	; 20
	Delayus(10);	
  d8:	8a e0       	ldi	r24, 0x0A	; 10
  da:	90 e0       	ldi	r25, 0x00	; 0
  dc:	0e 94 47 00 	call	0x8e <Delayus>
	SCL_OUTPUT;	  //SCL变低,占用总线
  e0:	a1 9a       	sbi	0x14, 1	; 20
	Delayus(10);
  e2:	8a e0       	ldi	r24, 0x0A	; 10
  e4:	90 e0       	ldi	r25, 0x00	; 0
  e6:	0e 94 47 00 	call	0x8e <Delayus>
	
	return 1;
}
  ea:	81 e0       	ldi	r24, 0x01	; 1
  ec:	90 e0       	ldi	r25, 0x00	; 0
  ee:	08 95       	ret

000000f0 <I2C_Stop>:

//I2C结束条件
void I2C_Stop(void)
{
	Delayus(10);
  f0:	8a e0       	ldi	r24, 0x0A	; 10
  f2:	90 e0       	ldi	r25, 0x00	; 0
  f4:	0e 94 47 00 	call	0x8e <Delayus>
	SDA_OUTPUT;   //SDA低电平
  f8:	a0 9a       	sbi	0x14, 0	; 20
	Delayus(10);	
  fa:	8a e0       	ldi	r24, 0x0A	; 10
  fc:	90 e0       	ldi	r25, 0x00	; 0
  fe:	0e 94 47 00 	call	0x8e <Delayus>
	SCL_INPUT;   //SCL高电平	
 102:	a1 98       	cbi	0x14, 1	; 20
	Delayus(10);	
 104:	8a e0       	ldi	r24, 0x0A	; 10
 106:	90 e0       	ldi	r25, 0x00	; 0
 108:	0e 94 47 00 	call	0x8e <Delayus>
	SDA_INPUT;   //SDA变为高电平,产生由低到高的变化
 10c:	a0 98       	cbi	0x14, 0	; 20
	Delayus(10);		
 10e:	8a e0       	ldi	r24, 0x0A	; 10
 110:	90 e0       	ldi	r25, 0x00	; 0
 112:	0e 94 47 00 	call	0x8e <Delayus>
 116:	08 95       	ret

00000118 <I2C_WriteByte>:
}

//向I2C写一个字节
unsigned char I2C_WriteByte(unsigned char dat)
{
 118:	1f 93       	push	r17
 11a:	cf 93       	push	r28
 11c:	c8 2f       	mov	r28, r24
 11e:	17 e0       	ldi	r17, 0x07	; 7
	unsigned char i,ack; //ack为应答信号
	for(i = 0;i < 8; i++)       //写8位(1个字节)数据
	{
		if(dat & 0x80)        //写入数据,左移,从最高位写入
 120:	c7 ff       	sbrs	r28, 7
 122:	02 c0       	rjmp	.+4      	; 0x128 <I2C_WriteByte+0x10>
		{
			SDA_INPUT;       //如果该位为1,SDA拉高电平
 124:	a0 98       	cbi	0x14, 0	; 20
 126:	01 c0       	rjmp	.+2      	; 0x12a <I2C_WriteByte+0x12>
		}
		else
		{
			SDA_OUTPUT;		//	如果该位为0,SDA拉低电平
 128:	a0 9a       	sbi	0x14, 0	; 20
		}
		SCL_INPUT;        //SCL高电平,保持数据
 12a:	a1 98       	cbi	0x14, 1	; 20
		Delayus(10);
 12c:	8a e0       	ldi	r24, 0x0A	; 10
 12e:	90 e0       	ldi	r25, 0x00	; 0
 130:	0e 94 47 00 	call	0x8e <Delayus>
		SCL_OUTPUT;		 //SCL低电平,数据被送入I2C
 134:	a1 9a       	sbi	0x14, 1	; 20
		dat <<= 1;       //需要写入的数据左移一位,送最高位
 136:	cc 0f       	add	r28, r28
		Delayus(10);    //
 138:	8a e0       	ldi	r24, 0x0A	; 10
 13a:	90 e0       	ldi	r25, 0x00	; 0
 13c:	0e 94 47 00 	call	0x8e <Delayus>
 140:	11 50       	subi	r17, 0x01	; 1
 142:	17 ff       	sbrs	r17, 7
 144:	ed cf       	rjmp	.-38     	; 0x120 <I2C_WriteByte+0x8>
	}
	Delayus(10);
 146:	8a e0       	ldi	r24, 0x0A	; 10
 148:	90 e0       	ldi	r25, 0x00	; 0
 14a:	0e 94 47 00 	call	0x8e <Delayus>
	SDA_INPUT;             //SDA拉高,同时变为输入口
 14e:	a0 98       	cbi	0x14, 0	; 20
	Delayus(10);
 150:	8a e0       	ldi	r24, 0x0A	; 10
 152:	90 e0       	ldi	r25, 0x00	; 0
 154:	0e 94 47 00 	call	0x8e <Delayus>
	SCL_INPUT;	    //SCL拉高,准备读取应答信号
 158:	a1 98       	cbi	0x14, 1	; 20
	Delayus(10);
 15a:	8a e0       	ldi	r24, 0x0A	; 10
 15c:	90 e0       	ldi	r25, 0x00	; 0
 15e:	0e 94 47 00 	call	0x8e <Delayus>
	
	if(SDA_INDATA)
 162:	98 9b       	sbis	0x13, 0	; 19
 164:	03 c0       	rjmp	.+6      	; 0x16c <I2C_WriteByte+0x54>

⌨️ 快捷键说明

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