verfaßt von Mr. Teflon, 12.08.2009, 21:40:44
> Hi,
>
> mal ne Frage vorweg. Welchen Compiler verwendest Du. Bei den meisten
> kannst Du nämlich im Debugmode die Werte anzeigen lassen. Ein paar
> Breakpoints und dann durchgesteppt und schon passts.
>
> Was ich aber nicht verstehe ist folgendes
>
>
> >
> > if(wert2 > 9.99) // wenn Temperatur kälter wie -99°C, dann
> > wert2 = 9.99; // wird Anzeige auf -99,9°C gesetzt
> >
> > D = wert2;
>
> hier wird D zu 9.99
>
>
> > com_txd (D + 48); // Zehner Stelle als Ganzzahl an COM
> >
> > wert2 = wert2 - D;
>
> hier weist Du wert2 die Subtraktion von wert2 und D zu also:
> wert2=9.99-9.99. Soll das so sein oder fehlt noch was in dem Code. Mal
> davon abgesehn dass keine deklaration für D vorhanden ist?
>
> Ansonsten wie MudGuard geschrieben hat mal ne printf oder sprintf
> versuchen.
>
> Gruß LEO
>
> Gruß LEO
Hallo,
unsigned char D;
wert2 ist 9,99
D = wert2; >>> D wird wegen Ganzzahl 9, nicht 9,99
Also die 1. Stelle vorm Komma. Darum muß \"wert2\" bei der ganzen \"Zahlenweiterschubserei\" vorm Komma einstellig bleiben, sonst klappt das nicht.
Dieses \"Schieberegister\" ist nicht von mir, ich habe es jedoch verstanden wie funktioniert. Das verstehen ist mir erstmal wichtig. Geht bestimmt auch einfacher. Es gibt da noch so eine Funktion \"ltoa_format\", die verstehe ich aber bis jetzt nicht.
Ich werde mich wegen printf und sprintf schlau machen.
//************************************* Long in Zeichenkette umwandeln
int ltoa_format(char *erg, long zahl, uint vk, uint nk, char vorz )
{ // Out-String, Eingabe, Vorkommastellen, Nachkommastellen, Vorzeichen \'+\' oder \' \'
long temp;
int i;
i = vk + nk + 1; // Stringlaenge
erg[i--] = 0; // Zeichenketten-Ende
if ( zahl == 0 ) erg[i--] = \'0\'; // Spezialfall 0
else
{
if ( zahl < 0 )
{
vorz = \'-\'; // negatives Vorzeichen
zahl *= -1; // mit positiver Zahl weiterrechnen
}
while( i >= 0 &&
( zahl > 0 || i+2*( nk != 0 ) > vk) ) // in vk ist vorz enthalten
{
if (i==vk&&nk!=0) erg[i--]=\'.\'; // Dezimalpunkt, wenn nk abgearbeitet
else
{
temp = zahl / 10; // ganzzahlige Division
erg[i--] = (zahl - temp*10) + 48; // Digit abtrennen und ASCII Zeichen ablegen */
zahl = temp; // fuer naechsten Durchlauf um 1 Digit verkuerzt */
}
}
if ( i >= 0 ) erg[i--] = vorz; // Vorzeichen schreiben
}
while( i >= 0 ) erg[i--] = \' \'; // Anfang mit Leerzeichen fuellen
return vk + nk + 1; // Stringlaenge zurueckgeben
}
--
___________
Tschau
Mr. Teflon
gesamter Thread: