Difference between revisions of "AVR Embedded Tutorial - Shiftregister/de"
From Lazarus wiki
Jump to navigationJump to searchLine 7: | Line 7: | ||
Der Beispielcode ist für ein ATtiny2313. | Der Beispielcode ist für ein ATtiny2313. | ||
==Portzugriffe== | ==Portzugriffe== | ||
− | Wie die Schieberegisterbefehle auf die Ports zugreifen, siehe hier: [[AVR Embedded Tutorial - Simple GPIO on and off output/de|GPIO-Ausgabe]] | + | Wie die Schieberegisterbefehle auf die Ports zugreifen, siehe hier: [[AVR Embedded Tutorial - Simple GPIO on and off output/de|GPIO-Ausgabe]].<br>Nicht vergessen die Ausgänge auch als Ausgang einzustellen (DDRx). |
− | Nicht vergessen die Ausgänge auch als Ausgang einzustellen (DDRx). | ||
==Port-Konstanten== | ==Port-Konstanten== |
Revision as of 19:29, 6 November 2017
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;