📄 eeprom.lss
字号:
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 + -