betreffende Routinen: u08 read_eeprom(uint16_t addr) { u08 temp1; loop_until_bit_is_clear(EECR,EEWE); temp1 = (u08) addr; /*printf("LowAddr: %d\n",temp1);*/ EEARL = temp1; addr >>= 8; temp1 = (u08) addr; /*printf("HighAddr: %d\n",temp1);*/ EEARH = temp1; /*printf("Setting EERE...\n");*/ EECR |= (1 <<0); /*loop_until_bit_is_clear(EECR,EERE);*/ /*printf("Reading EEDR...\n"); */ temp1 = EEDR; /*printf("Value: %d\n",temp1);*/ return temp1; } void write_eeprom(uint16_t addr, u08 val) { loop_until_bit_is_clear(EECR,EEWE); cli(); EEARL = (u08) addr; addr >>= 8; EEARH = (u08) addr; EEDR=val; EECR = 4; EECR = 6; sei(); return; } generiertes Assembler-Listing: 185 read_eeprom: 186 /* prologue: frame size=0 */ 187 /* prologue end (size=0) */ 188 .L15: 189 010c E199 sbic 60-0x20,1 190 010e FECF rjmp .L15 191 0110 8EBB out 62-0x20,r24 192 0112 892F mov r24,r25 193 0114 9927 clr r25 194 0116 8FBB out 63-0x20,r24 195 0118 E09A sbi 60-0x20,0 196 011a 8DB3 in r24,61-0x20 197 011c 9927 clr r25 198 /* epilogue: frame size=0 */ 199 011e 0895 ret 200 /* epilogue end (size=1) */ 201 /* function read_eeprom size 10 (9) */ 202 .size read_eeprom, .-read_eeprom 203 .global write_eeprom 204 .type write_eeprom, @function 205 write_eeprom: 206 /* prologue: frame size=0 */ 207 /* prologue end (size=0) */ 208 .L20: 209 0120 E199 sbic 60-0x20,1 210 0122 FECF rjmp .L20 211 /* #APP */ 212 0124 F894 cli 213 /* #NOAPP */ 214 0126 8EBB out 62-0x20,r24 215 0128 892F mov r24,r25 216 012a 9927 clr r25 217 012c 8FBB out 63-0x20,r24 218 012e 6DBB out 61-0x20,r22 219 0130 84E0 ldi r24,lo8(4) 220 0132 8CBB out 60-0x20,r24 ^LGAS LISTING /tmp/cc9XA5SB.s page 5 221 0134 86E0 ldi r24,lo8(6) 222 0136 8CBB out 60-0x20,r24 223 /* #APP */ 224 0138 7894 sei 225 /* #NOAPP */ 226 /* epilogue: frame size=0 */ 227 013a 0895 ret