AVR Embedded Tutorial - EEPROM/de

From Free Pascal wiki
Revision as of 22:03, 15 December 2017 by Mathias (talk | contribs) (→‎Daten lesen)
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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;
Light bulb  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