AVR Embedded Tutorial - Shiftregister/de

From Lazarus wiki
Jump to navigationJump to search

Template:Translate

Warning-icon.png

Warnung: In Arbeit


Schieberegister

Der Beispielcode ist für ein ATtiny2313.

Portzugriffe

Wie die Schieberegisterbefehle auf die Ports zugreifen, siehe hier: GPIO-Ausgabe Nicht vergessen die Ausgänge auch als Ausgang einzustellen (DDRx).

Port-Konstanten

Ich habe folgende Pins des ATtiny2313 genommen. Man kann aber beliebige Pins dafür nehmen.

const
  // PortB
  dataInPin = 0;  // PB0

  // PortD
  dataOutPin = 0; // PD0
  latchPin = 1;   // PD1
  clockPin = 2;   // PD2

Schieberegister schreiben

  function ShiftIn74HC165: byte;
  var
    Data: byte = 0;
    i: byte;
  begin
    mysleep(20);
    for i := 0 to 7 do begin
      Data := (Data shl 1) or Byte(ReadPortB(dataInPin));
      WritePortD(clockPin, True);
      mysleep(20);
      WritePortD(clockPin, False);
      mysleep(20);
    end;
    Result := Data;
  end;

Schieberegister lesen

  function ShiftIn74HC165: byte;
  var
    Data: byte = 0;
    i: byte;
  begin
    mysleep(20);
    for i := 0 to 7 do begin
      Data := (Data shl 1) or Byte(ReadPortB(dataInPin));
      WritePortD(clockPin, True);
      mysleep(20);
      WritePortD(clockPin, False);
      mysleep(20);
    end;
    Result := Data;
  end;