Difference between revisions of "AVR Embedded Tutorial - EEPROM/de"
From Lazarus wiki
Jump to navigationJump to searchLine 20: | Line 20: | ||
EEAR := uiAddress; | EEAR := uiAddress; | ||
EEDR := ucData; | EEDR := ucData; | ||
− | EECR := EECR or (1 shl EEMPE); | + | EECR := EECR or (1 shl EEMPE); // Es müssen 2 Zeilen sein ! |
EECR := EECR or (1 shl EEPE); | EECR := EECR or (1 shl EEPE); | ||
end; | end; |
Revision as of 22:04, 15 December 2017
Daten in den EEPROM speichern und lesen.
Vorwort
Dieser Code ist für einen Atmega328/Arduino mit 16MHz. Wie man die UART ansteuert, steht hier:
- UART UARTInit und UARTSendString(...
Daten speichern
Die zwei Zeilen mit EECR müssen getrennt sein, ansonsten wird nicht geschrieben.
procedure EEPROM_write(uiAddress: int16; ucData: byte);
begin
// Prüfen, ob bereit zum schreiben.
while (EECR and (1 shl EEPE)) <> 0 do begin
end;
EEAR := uiAddress;
EEDR := ucData;
EECR := EECR or (1 shl EEMPE); // Es müssen 2 Zeilen sein !
EECR := EECR or (1 shl EEPE);
end;
Hinweis: Die zwei Zeilen mit EECR müssen getrennt sein, ansonsten wird nichts geschrieben !
Daten lesen
function EEPROM_read(uiAddress: int16): byte;
begin
// Prüfen, ob bereit zum Lesen.
while (EECR and (1 shl EEPE)) <> 0 do begin
end;
EEAR := uiAddress;
EECR := EECR or (1 shl EERE);
Result := EEDR;
end;
Beispiel
Beispielcode, der zeigt, wie man Daten schreibt und lest.
const
sc = 'Hello World !';
var
i: integer;
s: shortstring;
begin
UARTInit;
// String schreiben, inklusive Längenbyte.
for i := 0 to Length(sc) do begin
EEPROM_write(i, byte(sc[i]));
end;
// String lesen, inklusive Längenbyte.
SetLength(s, EEPROM_read(0)); // Länge auslesen.
for i := 1 to Length(s) do begin
s[i] := char(EEPROM_read(i));
end;
repeat
UARTSendString(s);
UARTSendString(#13#10);
until 1 = 2;
end.
Wen der erste Code einmal ausgeführt wurde, kann man mit dem zweiten Code gut sehen, das das Hello World ! im EEPROM gespeichert ist, auch wen man den ATmega in der Zwischenzeit vom Strom getrennt wurde.
var
i: integer;
s: shortstring;
begin
UARTInit;
// String lesen, inklusive Längenbyte.
SetLength(s, EEPROM_read(0)); // Länge auslesen.
for i := 1 to Length(s) do begin
s[i] := char(EEPROM_read(i));
end;
repeat
UARTSendString(s);
UARTSendString(#13#10);
until 1 = 2;
end.
Siehe auch
- Übersichtseite AVR Embedded Tutorial/de