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

📄 main.lss

📁 我学习AVR的代码例子
💻 LSS
📖 第 1 页 / 共 2 页
字号:

main.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000522  00000000  00000000  00000094  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000004  00800060  00000522  000005b6  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000008  00800064  00800064  000005ba  2**0
                  ALLOC
  3 .noinit       00000000  0080006c  0080006c  000005ba  2**0
                  CONTENTS
  4 .eeprom       00000000  00810000  00810000  000005ba  2**0
                  CONTENTS
  5 .stab         00000e10  00000000  00000000  000005bc  2**2
                  CONTENTS, READONLY, DEBUGGING
  6 .stabstr      00000b70  00000000  00000000  000013cc  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	0c 94 30 00 	jmp	0x60
   4:	0c 94 4b 00 	jmp	0x96
   8:	0c 94 4b 00 	jmp	0x96
   c:	0c 94 4b 00 	jmp	0x96
  10:	0c 94 4b 00 	jmp	0x96
  14:	0c 94 4b 00 	jmp	0x96
  18:	0c 94 4b 00 	jmp	0x96
  1c:	0c 94 4b 00 	jmp	0x96
  20:	0c 94 43 02 	jmp	0x486
  24:	0c 94 4b 00 	jmp	0x96
  28:	0c 94 4b 00 	jmp	0x96
  2c:	0c 94 4b 00 	jmp	0x96
  30:	0c 94 4b 00 	jmp	0x96
  34:	0c 94 4b 00 	jmp	0x96
  38:	0c 94 4b 00 	jmp	0x96
  3c:	0c 94 4b 00 	jmp	0x96
  40:	0c 94 4b 00 	jmp	0x96
  44:	0c 94 4b 00 	jmp	0x96
  48:	0c 94 4b 00 	jmp	0x96
  4c:	0c 94 4b 00 	jmp	0x96
  50:	0c 94 4b 00 	jmp	0x96

00000054 <S>:
  54:	af 06 6d 4f c6 cb eb 0e ef cf 00 00                 ..mO........

00000060 <__init>:
  60:	11 24       	eor	r1, r1
  62:	1f be       	out	0x3f, r1	; 63
  64:	cf e5       	ldi	r28, 0x5F	; 95
  66:	d4 e0       	ldi	r29, 0x04	; 4
  68:	de bf       	out	0x3e, r29	; 62
  6a:	cd bf       	out	0x3d, r28	; 61

0000006c <__do_copy_data>:
  6c:	10 e0       	ldi	r17, 0x00	; 0
  6e:	a0 e6       	ldi	r26, 0x60	; 96
  70:	b0 e0       	ldi	r27, 0x00	; 0
  72:	e2 e2       	ldi	r30, 0x22	; 34
  74:	f5 e0       	ldi	r31, 0x05	; 5
  76:	02 c0       	rjmp	.+4      	; 0x7c

00000078 <.do_copy_data_loop>:
  78:	05 90       	lpm	r0, Z+
  7a:	0d 92       	st	X+, r0

0000007c <.do_copy_data_start>:
  7c:	a4 36       	cpi	r26, 0x64	; 100
  7e:	b1 07       	cpc	r27, r17
  80:	d9 f7       	brne	.-10     	; 0x78

00000082 <__do_clear_bss>:
  82:	10 e0       	ldi	r17, 0x00	; 0
  84:	a4 e6       	ldi	r26, 0x64	; 100
  86:	b0 e0       	ldi	r27, 0x00	; 0
  88:	01 c0       	rjmp	.+2      	; 0x8c

0000008a <.do_clear_bss_loop>:
  8a:	1d 92       	st	X+, r1

0000008c <.do_clear_bss_start>:
  8c:	ac 36       	cpi	r26, 0x6C	; 108
  8e:	b1 07       	cpc	r27, r17
  90:	e1 f7       	brne	.-8      	; 0x8a
  92:	0c 94 7a 02 	jmp	0x4f4

00000096 <__bad_interrupt>:
  96:	0c 94 00 00 	jmp	0x0

0000009a <port_init>:
volatile BYTE a,b,c;

void port_init(void)//口方向设置
{
	DDRA  = 0x00;
  9a:	1a ba       	out	0x1a, r1	; 26
	PORTA = 0x00;
  9c:	1b ba       	out	0x1b, r1	; 27
	DDRB  = 0xff;
  9e:	8f ef       	ldi	r24, 0xFF	; 255
  a0:	87 bb       	out	0x17, r24	; 23
	DDRC = 0XFC;
  a2:	8c ef       	ldi	r24, 0xFC	; 252
  a4:	84 bb       	out	0x14, r24	; 20
	DDRD  = 0xF0;
  a6:	80 ef       	ldi	r24, 0xF0	; 240
  a8:	81 bb       	out	0x11, r24	; 17
  aa:	08 95       	ret

000000ac <delay_us>:
}

void delay_us(int time)//微秒级延时程序
 {     
   do
	 {
	   time--;
  ac:	01 97       	sbiw	r24, 0x01	; 1
	 }	
  ae:	82 30       	cpi	r24, 0x02	; 2
  b0:	91 05       	cpc	r25, r1
  b2:	e4 f7       	brge	.-8      	; 0xac
  b4:	08 95       	ret

000000b6 <delay_ms>:
   while (time>1);
 }	   
void delay_ms(unsigned int time)//毫秒级延时程序
 {
  b6:	cf 93       	push	r28
  b8:	df 93       	push	r29
  ba:	ec 01       	movw	r28, r24
   while(time!=0)
	 {
	   delay_us(1000);
	   time--;
  bc:	89 2b       	or	r24, r25
  be:	31 f0       	breq	.+12     	; 0xcc
  c0:	88 ee       	ldi	r24, 0xE8	; 232
  c2:	93 e0       	ldi	r25, 0x03	; 3
  c4:	0e 94 56 00 	call	0xac
  c8:	21 97       	sbiw	r28, 0x01	; 1
  ca:	d1 f7       	brne	.-12     	; 0xc0
  cc:	df 91       	pop	r29
  ce:	cf 91       	pop	r28
  d0:	08 95       	ret

000000d2 <Delay>:
	 }
 }
/**/
void Delay(void)
{
  d2:	cf 93       	push	r28
  d4:	df 93       	push	r29
  d6:	cd b7       	in	r28, 0x3d	; 61
  d8:	de b7       	in	r29, 0x3e	; 62
  da:	21 97       	sbiw	r28, 0x01	; 1
  dc:	0f b6       	in	r0, 0x3f	; 63
  de:	f8 94       	cli
  e0:	de bf       	out	0x3e, r29	; 62
  e2:	0f be       	out	0x3f, r0	; 63
  e4:	cd bf       	out	0x3d, r28	; 61
	volatile unsigned char i;
	for(i=0;i<10;i++); //用于调整CLK 脉冲宽度
  e6:	19 82       	std	Y+1, r1	; 0x01
  e8:	89 81       	ldd	r24, Y+1	; 0x01
  ea:	8a 30       	cpi	r24, 0x0A	; 10
  ec:	30 f4       	brcc	.+12     	; 0xfa
  ee:	89 81       	ldd	r24, Y+1	; 0x01
  f0:	8f 5f       	subi	r24, 0xFF	; 255
  f2:	89 83       	std	Y+1, r24	; 0x01
  f4:	89 81       	ldd	r24, Y+1	; 0x01
  f6:	8a 30       	cpi	r24, 0x0A	; 10
  f8:	d0 f3       	brcs	.-12     	; 0xee
  fa:	21 96       	adiw	r28, 0x01	; 1
  fc:	0f b6       	in	r0, 0x3f	; 63
  fe:	f8 94       	cli
 100:	de bf       	out	0x3e, r29	; 62
 102:	0f be       	out	0x3f, r0	; 63
 104:	cd bf       	out	0x3d, r28	; 61
 106:	df 91       	pop	r29
 108:	cf 91       	pop	r28
 10a:	08 95       	ret

0000010c <SendBit>:
}
void SendBit(unsigned char dat,unsigned char bitcnt)
 {
 10c:	1f 93       	push	r17
 10e:	cf 93       	push	r28
 110:	18 2f       	mov	r17, r24
   unsigned char i;
   cli();
 112:	f8 94       	cli
   for(i=0;i<bitcnt;i++)
 114:	66 23       	and	r22, r22
 116:	79 f0       	breq	.+30     	; 0x136
 118:	c6 2f       	mov	r28, r22
     {
       if(( dat & 0X80 ) == 0)
 11a:	17 fd       	sbrc	r17, 7
 11c:	02 c0       	rjmp	.+4      	; 0x122
       PORTB &=(~(1<<MOSI));
 11e:	c5 98       	cbi	0x18, 5	; 24
 120:	01 c0       	rjmp	.+2      	; 0x124
       else
       PORTB |=(1<<MOSI); /*发送数据由高位到低位传送*/
 122:	c5 9a       	sbi	0x18, 5	; 24
       Delay();
 124:	0e 94 69 00 	call	0xd2
	   //delay_us(10);
       PORTB |=(1<<SCK); /*置时钟线为高通知被控器开始接收数位*/
 128:	c7 9a       	sbi	0x18, 7	; 24
       Delay();
 12a:	0e 94 69 00 	call	0xd2
	   //delay_us(10);
       PORTB &=(~(1<<SCK)); /*钳住总线准备下一个数据位*/
 12e:	c7 98       	cbi	0x18, 7	; 24
       dat=dat<<1; /*发送数据左移一位*/
 130:	11 0f       	add	r17, r17
 132:	c1 50       	subi	r28, 0x01	; 1
 134:	91 f7       	brne	.-28     	; 0x11a
     }
   sei();
 136:	78 94       	sei
 138:	cf 91       	pop	r28
 13a:	1f 91       	pop	r17
 13c:	08 95       	ret

0000013e <Start_spi>:
 }

void Start_spi(void)
 {
   PORTB |=(1<<SS);
 13e:	c4 9a       	sbi	0x18, 4	; 24
   PORTB |=(1<<SCK);
 140:	c7 9a       	sbi	0x18, 7	; 24
   PORTB |=(1<<MOSI);
 142:	c5 9a       	sbi	0x18, 5	; 24
   Delay();
 144:	0e 94 69 00 	call	0xd2
   //delay_us(10);
   PORTB &=(~(1<<SS));PORTB &=(~(1<<SS));
 148:	c4 98       	cbi	0x18, 4	; 24
 14a:	c4 98       	cbi	0x18, 4	; 24
   PORTB &=(~(1<<SCK));PORTB &=(~(1<<SCK));
 14c:	8f e7       	ldi	r24, 0x7F	; 127
 14e:	98 b3       	in	r25, 0x18	; 24
 150:	98 23       	and	r25, r24
 152:	98 bb       	out	0x18, r25	; 24
 154:	98 b3       	in	r25, 0x18	; 24
 156:	98 23       	and	r25, r24
 158:	98 bb       	out	0x18, r25	; 24
 15a:	08 95       	ret

0000015c <SendByte>:
 }

void SendByte(unsigned char dat)
{
	SendBit(dat,8); /*发送字节*/
 15c:	68 e0       	ldi	r22, 0x08	; 8
 15e:	0e 94 86 00 	call	0x10c
 162:	08 95       	ret

00000164 <SENDCOMA>:
}

void SENDCOMA(unsigned char com)
{
 164:	1f 93       	push	r17
 166:	18 2f       	mov	r17, r24
	Start_spi();
 168:	0e 94 9f 00 	call	0x13e
	SendBit(0X80,4); //*发送设置命令ID=100 0*
 16c:	64 e0       	ldi	r22, 0x04	; 4
 16e:	80 e8       	ldi	r24, 0x80	; 128
 170:	0e 94 86 00 	call	0x10c
	SendByte(com); //*发送命令字*
 174:	81 2f       	mov	r24, r17
 176:	0e 94 ae 00 	call	0x15c
 17a:	1f 91       	pop	r17
 17c:	08 95       	ret

0000017e <SENDCOMB>:
}

void SENDCOMB(unsigned char adr)
{
 17e:	1f 93       	push	r17
 180:	18 2f       	mov	r17, r24
	Start_spi();
 182:	0e 94 9f 00 	call	0x13e
	SendBit(0XA0,3); /*发送写显示RAM 命令ID=101 */
 186:	63 e0       	ldi	r22, 0x03	; 3
 188:	80 ea       	ldi	r24, 0xA0	; 160
 18a:	0e 94 86 00 	call	0x10c
	SendBit(adr,6); /*指定写入地址*/
 18e:	66 e0       	ldi	r22, 0x06	; 6
 190:	81 2f       	mov	r24, r17
 192:	0e 94 86 00 	call	0x10c
 196:	1f 91       	pop	r17
 198:	08 95       	ret

0000019a <disp_init>:
}
void disp_init(void)
{
 19a:	cf 93       	push	r28
	unsigned char i;
	SENDCOMA(0X0a); /*禁止WDT溢出标志输出*/
 19c:	8a e0       	ldi	r24, 0x0A	; 10
 19e:	0e 94 b2 00 	call	0x164
	SENDCOMA(0X52); //设置偏压,背极数 定义1/3 偏压4背极
 1a2:	82 e5       	ldi	r24, 0x52	; 82
 1a4:	0e 94 b2 00 	call	0x164
	SENDCOMA(0X30); //*使用内部256KRC 振荡器*
 1a8:	80 e3       	ldi	r24, 0x30	; 48
 1aa:	0e 94 b2 00 	call	0x164
	SENDCOMA(0X02); //*启动振荡器*
 1ae:	82 e0       	ldi	r24, 0x02	; 2
 1b0:	0e 94 b2 00 	call	0x164
	SENDCOMA(0X06); //LCDON
 1b4:	86 e0       	ldi	r24, 0x06	; 6
 1b6:	0e 94 b2 00 	call	0x164
	SENDCOMA(0X08);//timer dis
 1ba:	88 e0       	ldi	r24, 0x08	; 8
 1bc:	0e 94 b2 00 	call	0x164
	SENDCOMB(0x00); //*把数据指针指回0 接着写入数据*
 1c0:	80 e0       	ldi	r24, 0x00	; 0
 1c2:	0e 94 bf 00 	call	0x17e
 1c6:	ce e0       	ldi	r28, 0x0E	; 14
	for(i=0;i<15;i++) /*写入16 字节数据*/
	{
		SendByte(0x0); /*写入数据*/
 1c8:	80 e0       	ldi	r24, 0x00	; 0
 1ca:	0e 94 ae 00 	call	0x15c
 1ce:	c1 50       	subi	r28, 0x01	; 1
 1d0:	c7 ff       	sbrs	r28, 7
 1d2:	fa cf       	rjmp	.-12     	; 0x1c8
 1d4:	cf 91       	pop	r28
 1d6:	08 95       	ret

000001d8 <disp_off>:
	}
}
void disp_off(void)
{
	SENDCOMA(0X04);//lcdoff
 1d8:	84 e0       	ldi	r24, 0x04	; 4
 1da:	0e 94 b2 00 	call	0x164
	SENDCOMA(0X00);//sys dis
 1de:	80 e0       	ldi	r24, 0x00	; 0
 1e0:	0e 94 b2 00 	call	0x164
 1e4:	08 95       	ret

000001e6 <I2C_init>:
	//SENDCOMA(0X0c);//timer en
}
//初始化TWI功能
/*
void twi_Init(void)
{
	TWBR=73;
}*/
void I2C_init(void)
{
	TWBR=2;
 1e6:	82 e0       	ldi	r24, 0x02	; 2
 1e8:	80 b9       	out	0x00, r24	; 0
	TWSR=00;
 1ea:	11 b8       	out	0x01, r1	; 1
 1ec:	08 95       	ret

000001ee <i2c_Write>:
}/*
void delay_us(int time)//微秒级延时程序
{
	do
	{
		time--;
	}
	while (time>1);
}
void delay_ms(unsigned int time)//毫秒级延时程序
{
	while(time!=0)
	{
		delay_us(1000);
		time--;
	}
}*/
unsigned char i2c_Write(unsigned char Wdata,unsigned char RomAddress) 
{
 1ee:	28 2f       	mov	r18, r24
	Start();//I2C启动
 1f0:	84 ea       	ldi	r24, 0xA4	; 164
 1f2:	86 bf       	out	0x36, r24	; 54
	Wait();
 1f4:	06 b6       	in	r0, 0x36	; 54
 1f6:	07 fe       	sbrs	r0, 7
 1f8:	fd cf       	rjmp	.-6      	; 0x1f4
	if(TestAck()!=START) return 1;//ACK
 1fa:	81 b1       	in	r24, 0x01	; 1
 1fc:	99 27       	eor	r25, r25
 1fe:	88 7f       	andi	r24, 0xF8	; 248
 200:	90 70       	andi	r25, 0x00	; 0
 202:	08 97       	sbiw	r24, 0x08	; 8
 204:	29 f5       	brne	.+74     	; 0x250
	Write8Bit(wr_device_add);//写I2C从器件地址和写方式
 206:	80 ed       	ldi	r24, 0xD0	; 208
 208:	83 b9       	out	0x03, r24	; 3
 20a:	84 e8       	ldi	r24, 0x84	; 132
 20c:	86 bf       	out	0x36, r24	; 54
	Wait();
 20e:	06 b6       	in	r0, 0x36	; 54
 210:	07 fe       	sbrs	r0, 7
 212:	fd cf       	rjmp	.-6      	; 0x20e
	if(TestAck()!=MT_SLA_ACK) return 1;//ACK
 214:	81 b1       	in	r24, 0x01	; 1
 216:	99 27       	eor	r25, r25
 218:	88 7f       	andi	r24, 0xF8	; 248
 21a:	90 70       	andi	r25, 0x00	; 0
 21c:	48 97       	sbiw	r24, 0x18	; 24
 21e:	c1 f4       	brne	.+48     	; 0x250
	Write8Bit(RomAddress);//写24C02的ROM地址
 220:	63 b9       	out	0x03, r22	; 3
 222:	84 e8       	ldi	r24, 0x84	; 132
 224:	86 bf       	out	0x36, r24	; 54
	Wait();
 226:	06 b6       	in	r0, 0x36	; 54
 228:	07 fe       	sbrs	r0, 7
 22a:	fd cf       	rjmp	.-6      	; 0x226
	if(TestAck()!=MT_DATA_ACK) return 1;//ACK
 22c:	81 b1       	in	r24, 0x01	; 1

⌨️ 快捷键说明

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