AVR Embedded Tutorial - Shiftregister/de
From Lazarus wiki
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;