Difference between revisions of "AVR Embedded Tutorial - EEPROM/de"
From Lazarus wiki
Jump to navigationJump to searchLine 11: | Line 11: | ||
Die zwei Zeilen mit '''EECR''' müssen getrennt sein, ansonsten wird nicht geschrieben. | Die zwei Zeilen mit '''EECR''' müssen getrennt sein, ansonsten wird nicht geschrieben. | ||
<syntaxhighlight lang="pascal"> | <syntaxhighlight lang="pascal"> | ||
− | procedure EEPROM_write( | + | procedure EEPROM_write(Address: int16; Data: byte); |
begin | begin | ||
Line 18: | Line 18: | ||
end; | end; | ||
− | EEAR := | + | EEAR := Address; |
− | EEDR := | + | EEDR := Data; |
EECR := EECR or (1 shl EEMPE); // Es müssen 2 Zeilen sein ! | EECR := EECR or (1 shl EEMPE); // Es müssen 2 Zeilen sein ! | ||
EECR := EECR or (1 shl EEPE); | EECR := EECR or (1 shl EEPE); |
Revision as of 22:32, 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(Address: int16; Data: byte);
begin
// Prüfen, ob bereit zum schreiben.
while (EECR and (1 shl EEPE)) <> 0 do begin
end;
EEAR := Address;
EEDR := Data;
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