AVR Embedded Tutorial - EEPROM/de

From Free Pascal wiki
Revision as of 22:02, 15 December 2017 by Mathias (talk | contribs) (Daten lesen)

Template:Translate

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);
    EECR := EECR or (1 shl EEPE);
  end;
Note-icon.png

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