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

📄 eeprom.lss

📁 winAVR编写的MEGA16内部EEPROM读写程序
💻 LSS
📖 第 1 页 / 共 3 页
字号:

eeprom.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         000005d4  00000000  00000000  00000094  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000014  00800060  000005d4  00000668  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000008  00800074  00800074  0000067c  2**0
                  ALLOC
  3 .noinit       00000000  0080007c  0080007c  0000067c  2**0
                  CONTENTS
  4 .eeprom       00000000  00810000  00810000  0000067c  2**0
                  CONTENTS
  5 .stab         00000d98  00000000  00000000  0000067c  2**2
                  CONTENTS, READONLY, DEBUGGING
  6 .stabstr      00000a14  00000000  00000000  00001414  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:	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:	a4 37       	cpi	r26, 0x74	; 116
  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:	a4 e7       	ldi	r26, 0x74	; 116
  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:	ac 37       	cpi	r26, 0x7C	; 124
  82:	b1 07       	cpc	r27, r17
  84:	e1 f7       	brne	.-8      	; 0x7e <.do_clear_bss_loop>
  86:	0c 94 47 00 	jmp	0x8e <main>

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

0000008e <main>:
uchar buff[8]={0,0,0,0,0,0,0,0};                          //8位显示缓冲区


int main(void)
{
  8e:	c9 e5       	ldi	r28, 0x59	; 89
  90:	d4 e0       	ldi	r29, 0x04	; 4
  92:	de bf       	out	0x3e, r29	; 62
  94:	cd bf       	out	0x3d, r28	; 61
  uchar aa;
  
  DispPortInit();
  96:	0e 94 f6 00 	call	0x1ec <DispPortInit>
  /*
	//EEPROM区 变量定义法访问
	uchar eeprom_val __attribute__((section(".eeprom")));  //定义EEPROM变量
	eeprom_busy_wait();                                    //等待EEPROM读写就绪
  aa=eeprom_read_byte(eeprom_val);                       //读取EEPROM 0地址的内容到aa中
  eeprom_busy_wait();                                    //等待EEPROM读写就绪
	//PORTB=~aa;
  aa++;
  eeprom_busy_wait();                                    //等待EEPROM读写就绪
	eeprom_write_byte(eeprom_val, aa);                     //把aa值写到EEPROM 0地址处
  eeprom_busy_wait();                                    //等待EEPROM读写就绪
	*/
	//直接指定EEPROM地址法
	eeprom_busy_wait();                                    //等待EEPROM读写就绪
  9a:	80 91 3c 00 	lds	r24, 0x003C
  9e:	99 27       	eor	r25, r25
  a0:	82 70       	andi	r24, 0x02	; 2
  a2:	90 70       	andi	r25, 0x00	; 0
  a4:	00 97       	sbiw	r24, 0x00	; 0
  a6:	09 f0       	breq	.+2      	; 0xaa <main+0x1c>
  a8:	f8 cf       	rjmp	.-16     	; 0x9a <main+0xc>
    Read one byte from EEPROM address \c addr. */

uint8_t 
eeprom_read_byte (const uint8_t *addr) 
{
  aa:	82 e4       	ldi	r24, 0x42	; 66
  ac:	92 e0       	ldi	r25, 0x02	; 2
  ae:	9b 83       	std	Y+3, r25	; 0x03
  b0:	8a 83       	std	Y+2, r24	; 0x02
  uint8_t result;
  asm volatile
  b2:	aa 81       	ldd	r26, Y+2	; 0x02
  b4:	bb 81       	ldd	r27, Y+3	; 0x03
  b6:	0e 94 d6 02 	call	0x5ac <__eeprom_read_byte_1C1D1E>
  ba:	80 2d       	mov	r24, r0
  bc:	bb 83       	std	Y+3, r27	; 0x03
  be:	aa 83       	std	Y+2, r26	; 0x02
  c0:	8e 83       	std	Y+6, r24	; 0x06
  c2:	8e 81       	ldd	r24, Y+6	; 0x06
  c4:	99 27       	eor	r25, r25
  c6:	9d 83       	std	Y+5, r25	; 0x05
  c8:	8c 83       	std	Y+4, r24	; 0x04
  ca:	8c 81       	ldd	r24, Y+4	; 0x04
  cc:	89 83       	std	Y+1, r24	; 0x01
  aa=eeprom_read_byte(578);                                //读取EEPROM 0地址的内容到aa中
  eeprom_busy_wait();                                    //等待EEPROM读写就绪
  ce:	80 91 3c 00 	lds	r24, 0x003C
  d2:	99 27       	eor	r25, r25
  d4:	82 70       	andi	r24, 0x02	; 2
  d6:	90 70       	andi	r25, 0x00	; 0
  d8:	00 97       	sbiw	r24, 0x00	; 0
  da:	09 f0       	breq	.+2      	; 0xde <main+0x50>
  dc:	f8 cf       	rjmp	.-16     	; 0xce <main+0x40>
	//PORTB=~aa;
  aa++;
  de:	89 81       	ldd	r24, Y+1	; 0x01
  e0:	8f 5f       	subi	r24, 0xFF	; 255
  e2:	89 83       	std	Y+1, r24	; 0x01
  eeprom_busy_wait();                                    //等待EEPROM读写就绪
  e4:	80 91 3c 00 	lds	r24, 0x003C
  e8:	99 27       	eor	r25, r25
  ea:	82 70       	andi	r24, 0x02	; 2
  ec:	90 70       	andi	r25, 0x00	; 0
  ee:	00 97       	sbiw	r24, 0x00	; 0
  f0:	09 f0       	breq	.+2      	; 0xf4 <main+0x66>
  f2:	f8 cf       	rjmp	.-16     	; 0xe4 <main+0x56>
    Write a byte \c value to EEPROM address \c addr. */

void 
eeprom_write_byte (uint8_t *addr,uint8_t value)
{
  f4:	82 e4       	ldi	r24, 0x42	; 66
  f6:	92 e0       	ldi	r25, 0x02	; 2
  f8:	9d 83       	std	Y+5, r25	; 0x05
  fa:	8c 83       	std	Y+4, r24	; 0x04
  fc:	89 81       	ldd	r24, Y+1	; 0x01
  fe:	8e 83       	std	Y+6, r24	; 0x06
  asm volatile (
 100:	ac 81       	ldd	r26, Y+4	; 0x04
 102:	bd 81       	ldd	r27, Y+5	; 0x05
 104:	8e 81       	ldd	r24, Y+6	; 0x06
 106:	08 2e       	mov	r0, r24
 108:	0e 94 de 02 	call	0x5bc <__eeprom_write_byte_1C1D1E>
 10c:	bd 83       	std	Y+5, r27	; 0x05
 10e:	ac 83       	std	Y+4, r26	; 0x04
	eeprom_write_byte(578, aa);                              //把aa值写到EEPROM 0地址处
  eeprom_busy_wait();                                    //等待EEPROM读写就绪
 110:	80 91 3c 00 	lds	r24, 0x003C
 114:	99 27       	eor	r25, r25
 116:	82 70       	andi	r24, 0x02	; 2
 118:	90 70       	andi	r25, 0x00	; 0
 11a:	00 97       	sbiw	r24, 0x00	; 0
 11c:	09 f0       	breq	.+2      	; 0x120 <main+0x92>
 11e:	f8 cf       	rjmp	.-16     	; 0x110 <main+0x82>
  
	buff[0]=aa%10;
 120:	89 81       	ldd	r24, Y+1	; 0x01
 122:	9a e0       	ldi	r25, 0x0A	; 10
 124:	69 2f       	mov	r22, r25
 126:	0e 94 ca 02 	call	0x594 <__udivmodqi4>
 12a:	89 2f       	mov	r24, r25
 12c:	80 93 74 00 	sts	0x0074, r24
  buff[1]=(aa/10)%10;
 130:	89 81       	ldd	r24, Y+1	; 0x01
 132:	9a e0       	ldi	r25, 0x0A	; 10
 134:	69 2f       	mov	r22, r25
 136:	0e 94 ca 02 	call	0x594 <__udivmodqi4>
 13a:	9a e0       	ldi	r25, 0x0A	; 10
 13c:	69 2f       	mov	r22, r25
 13e:	0e 94 ca 02 	call	0x594 <__udivmodqi4>
 142:	89 2f       	mov	r24, r25
 144:	80 93 75 00 	sts	0x0075, r24
  buff[2]=aa/100;
 148:	89 81       	ldd	r24, Y+1	; 0x01
 14a:	94 e6       	ldi	r25, 0x64	; 100
 14c:	69 2f       	mov	r22, r25
 14e:	0e 94 ca 02 	call	0x594 <__udivmodqi4>
 152:	80 93 76 00 	sts	0x0076, r24

  while(1)
  {
    Disp(buff); 
 156:	84 e7       	ldi	r24, 0x74	; 116
 158:	90 e0       	ldi	r25, 0x00	; 0
 15a:	0e 94 15 01 	call	0x22a <Disp>
 15e:	fb cf       	rjmp	.-10     	; 0x156 <main+0xc8>

00000160 <DispData>:
DDRA|=(1<<PA5)|(1<<PA6)|(1<<PA7);\
}while(0)
*/
void DispData(uint8_t x)
{
 160:	cf 93       	push	r28
 162:	df 93       	push	r29
 164:	cd b7       	in	r28, 0x3d	; 61
 166:	de b7       	in	r29, 0x3e	; 62
 168:	22 97       	sbiw	r28, 0x02	; 2
 16a:	0f b6       	in	r0, 0x3f	; 63
 16c:	f8 94       	cli
 16e:	de bf       	out	0x3e, r29	; 62
 170:	0f be       	out	0x3f, r0	; 63
 172:	cd bf       	out	0x3d, r28	; 61
 174:	89 83       	std	Y+1, r24	; 0x01
	uint8_t i;
	NCS_CLR;
 176:	80 91 3b 00 	lds	r24, 0x003B
 17a:	8b 7f       	andi	r24, 0xFB	; 251
 17c:	80 93 3b 00 	sts	0x003B, r24
	SCK_CLR;
 180:	80 91 3b 00 	lds	r24, 0x003B
 184:	87 7f       	andi	r24, 0xF7	; 247
 186:	80 93 3b 00 	sts	0x003B, r24
	for(i=0;i<8;i++)
 18a:	1a 82       	std	Y+2, r1	; 0x02
 18c:	8a 81       	ldd	r24, Y+2	; 0x02
 18e:	88 30       	cpi	r24, 0x08	; 8
 190:	f8 f4       	brcc	.+62     	; 0x1d0 <DispData+0x70>
	{
		if(x&0x80)            //一位一位数据通过MOSI(PA4)输出,先输出高位
 192:	89 81       	ldd	r24, Y+1	; 0x01
 194:	88 23       	and	r24, r24
 196:	34 f4       	brge	.+12     	; 0x1a4 <DispData+0x44>
		MOSI_SET;
 198:	80 91 3b 00 	lds	r24, 0x003B
 19c:	80 61       	ori	r24, 0x10	; 16
 19e:	80 93 3b 00 	sts	0x003B, r24
 1a2:	05 c0       	rjmp	.+10     	; 0x1ae <DispData+0x4e>
		else MOSI_CLR;
 1a4:	80 91 3b 00 	lds	r24, 0x003B
 1a8:	8f 7e       	andi	r24, 0xEF	; 239
 1aa:	80 93 3b 00 	sts	0x003B, r24
		SCK_SET;              //上升沿有效,SCK对应74HC595的ST_CP,逐位移位输入,但Qn引脚不改变
 1ae:	80 91 3b 00 	lds	r24, 0x003B
 1b2:	88 60       	ori	r24, 0x08	; 8
 1b4:	80 93 3b 00 	sts	0x003B, r24
		SCK_CLR;
 1b8:	80 91 3b 00 	lds	r24, 0x003B
 1bc:	87 7f       	andi	r24, 0xF7	; 247
 1be:	80 93 3b 00 	sts	0x003B, r24
		x<<=1;
 1c2:	89 81       	ldd	r24, Y+1	; 0x01
 1c4:	88 0f       	add	r24, r24
 1c6:	89 83       	std	Y+1, r24	; 0x01
 1c8:	8a 81       	ldd	r24, Y+2	; 0x02
 1ca:	8f 5f       	subi	r24, 0xFF	; 255
 1cc:	8a 83       	std	Y+2, r24	; 0x02
 1ce:	de cf       	rjmp	.-68     	; 0x18c <DispData+0x2c>
	}
	NCS_SET;                //上升沿有效,NSC对应74HC595的SH_CP,当8位数据均移入后,才改变Qn的引脚电平,并行输出8位数据

⌨️ 快捷键说明

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