Hallo,
ich versuche gerade einem DS18S20 Werte unter 0°C abzuringen und
es klappt es einfach nicht...
Folgendes habe ich versucht (FTemp ist vom Typ Int8, TMsb und TLsb vom Typ Byte) :
...
if TMsb = $00 then
TLsb := TLsb shr 1;
FTemp := Int8(TLsb);
Else
TLsb := (not TLsb)+1; // Two's Complement
TLsb := TLsb shr 1; // Ganzzahlig
FTemp := Int8(TLsb); // so damit neg. Zahlen mögl. sind
bis hierher stimmen die Werte... es kommt Bei meinem Testbeispiel 25 heraus...
Incl(FTemp, 7); //
und hier bekomme ich keine -25 sondern -103..
EndIf;
...
Gebe ich FTemp := -25; ein bekomme ich auch auf dem Display
auch -25 angezeigt, wenn ich hingegen folgendes probiere:
FTemp := 0;
Incl(FTemp, 7);
bekomme ich -128 heraus, was ja ausserhalb des int8 Wertebereichs liegt.
Mache ich hier einen kompletten Denkfehler???
Grüße
Elmar
ich versuche gerade einem DS18S20 Werte unter 0°C abzuringen und
es klappt es einfach nicht...
Folgendes habe ich versucht (FTemp ist vom Typ Int8, TMsb und TLsb vom Typ Byte) :
...
if TMsb = $00 then
TLsb := TLsb shr 1;
FTemp := Int8(TLsb);
Else
TLsb := (not TLsb)+1; // Two's Complement
TLsb := TLsb shr 1; // Ganzzahlig
FTemp := Int8(TLsb); // so damit neg. Zahlen mögl. sind
bis hierher stimmen die Werte... es kommt Bei meinem Testbeispiel 25 heraus...
Incl(FTemp, 7); //
und hier bekomme ich keine -25 sondern -103..
EndIf;
...
Gebe ich FTemp := -25; ein bekomme ich auch auf dem Display
auch -25 angezeigt, wenn ich hingegen folgendes probiere:
FTemp := 0;
Incl(FTemp, 7);
bekomme ich -128 heraus, was ja ausserhalb des int8 Wertebereichs liegt.
Mache ich hier einen kompletten Denkfehler???
Grüße
Elmar