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.
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.