Code: Alles auswählen
procedure sendIntValueSPI(Value: uint16);
var
dw: boolean;
i: int8;
begin
Value := $FFFF;
for i := 11 downto 0 do begin
dw := (Value and (1 shl i)) > 0;
Write(dw, ' ');
end;
end;
begin
sendIntValueSPI(0);
end.
Auf dem Arduino fast der gleiche Code. Aber hier blinkt die LED, welche an PortC Pin3 angeschlossen ist.
Eigentlich müsste sie konstant leuchten, da dw eigentlich immer true sein müsste.
Ersetze ich in der Schleife WritePortB(3, dw); auf WritePortB(3, true); dann leuchtet die LED konstant.
Somit wird die Auswertung von dw auf dem PC anders gehandhabt wie auf dem AVR.
Wo liegt das Problem ?
Code: Alles auswählen
program Project1;
{$O-}
procedure mysleep(t: int32);
var
i: Int32;
begin
for i := 0 to t do begin
asm
Nop;
end;
end;
end;
procedure ModePortB(Pin: byte; Value: boolean);
begin
if Value then begin
DDRC := DDRC or (1 shl Pin);
end else begin
DDRC := DDRC and not (1 shl Pin);
end;
end;
procedure WritePortB(Pin: byte; Value: boolean);
begin
if Value then begin
PORTC := PORTC or (1 shl Pin);
end else begin
PORTC := PORTC and not (1 shl Pin);
end;
end;
procedure sendIntValueSPI(Value: uint16);
var
dw: boolean;
i: int8;
begin
Value := $FFFF;
for i := 11 downto 0 do begin
dw := (Value and (1 shl i)) > 0;
mysleep(10000);
WritePortB(3, dw);
end;
end;
begin
ModePortB(3, True);
repeat
sendIntValueSPI(0);
until 1 = 2;
end.