ich stehe gerade mal wieder auf dem Schlauch, bzw seh' den Wald vor lauter Bäumen nicht.
Gern lasse ich mich korrigieren, aber wenn ich das richtig auf dem Zettel habe bewirkt der Befehl mod eine Restdivision einer Dezimal-Zahl und der Befehl div eine Integer-Division.
Bsp.:
3 div 2 = 1
3 mod 2= 1
Also wenn ich nun meiner Lokig, die auch gerne mal einen Fehler aufweisen kann, folge sollte nachstehende Funktion auch einen Zahl entsprechend berechnen.
erste Version:
Code: Alles auswählen
procedure Set_LED(g, r, b: byte);
var a : byte;
begin
for a:= 23 downto 0 do Data[a]:= '0';
for a := 7 downto 0 do begin
if (g mod 2) = 1 then Data[a] := '1';
g := g div 2;
if (r mod 2) = 1 then Data[a+8] := '1';
r := r div 2;
if (b mod 2) = 1 then Data[a+16] := '1';
b := b div 2;
end;
end;
Code: Alles auswählen
procedure Set_LED(g, r, b: byte);
var a, Rest, Temp : byte;
begin
for a := 7 downto 0 do begin
if Rest mod 2 = 0 then begin
g := g div 2;
Data[a] := '0';
end
else begin
g := g div 2;
Data[a] := '1';
end;
end;
end;
Code: Alles auswählen
Set_LED(205, 2, 5);
Via Terminal lass ich mir das Ergebnis als Kontrolle ausgeben.
Aber entgegen aller Logik erhalte ich bei dem Wert 205 den Binären Datenstrom 11111111 anstelle von 11001101
Zusatz-Informationen.
Diese soll auf allen gängigen MCUs laufen.
Ich wünsche euch ein entspanntes Weihnachtsfest.
mfg Maik