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.
 
  
  
  Verein
Verein 
 Links
Links Suche
Suche