Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: Wie kann ich negative Zahlen in WORD auswerten Kategorie: Programmierung Basic (von JanPeter - 29.01.2005 0:17)
 Als Antwort auf Re: Wie kann ich negative Zahlen in WORD auswerten von Pit Demmer - 28.01.2005 22:49

> Hallo!
>
> Klar gibts ein problem!
> Nämlich schon wenn ua1 grösser 7 ist, schon in der ersten Berechnung kannst Du den Wert völlig zerschiessen, stell Dir vor ua1 ist 32767, das MAL 4096 gibt schlappe 134.213.632! Um diesen Wert darzustellen brauchst Du mindestens 27 Bits!
> Dazu kommen 256 * 32767
> usw.
> Ich sags doch sieh es BitWeise! Deine Multipliziererei mit 4096, 256 , usw ist doch alles sauberster Bitkram!
>
> Reserviere 4 Bytes (32 Bits) und statt * zu nehmen schiebst Du die Bits immer nur nach links durch, für die 256 um 8 Stellen, die 4096 um 12 Stellen und so weiter,  und schon stimmt die Bitfolge in den 4 Bytes und repräsentiert den von Dir gewünschten Wert!... das schieben musst Du natürlich "von Hand" machen, der SHL-Befehl hilft Dir nicht, da Du die Bits durch 4 Bytes durchschieben musst, und das unterstützt der Compiler nicht.
>
> Wenn Du unbedingt mit so grossen Zahlen und CControl arbeiten willst, kommst Du nicht umhin Deine grossen Zahlen anders zu betrachten als wie bisher!
> Im Forum gibts aber schon ne Menge Infos zu grösseren Zahlen und Gleitkomma und so, glaub ich zumindest.
>
> Was willste mit der Rechnerei überhaupt veranstalten?
>
>

Ich lese eine Rs232 Bitfolge ein
die besteht aus z.B.: "30AC"
diese will ich über LCD ausgeben.
Umgerechnet ist 30Ac =12460 mV
Der Spannungswert steht in Ua
Diesen Wert möchte ich im LCD Anzeigen.
Der eingelesen Wert steht in Ua1,Ua2,Ua3 und Ua4
ua1,ua2,ua3 WORD-Variablen ,  
 ua4 Byte-Variable    :   gelesen über RS232
> >
e

> Pit
>
> > Da liegt meinProblem!
> > Goto Ueberlauf!
> > Dann würde ich berechnen : wert=65536-wert
> > Das geht aber wieder nicht weil 65536 nicht machbar ist!
> > Mein Programm sieh so aus:
> >
> >     ua1,ua2,ua3 WORD-Variablen ,    ua4 Byte-Variable    :   gelesen über RS232
> >
> >
> > if ua1=0 then goto f1
> > Ua=ua1*4096
> > #f1
> > if ua2=0 then goto f2
> > Ua=Ua+(ua2*256)
> > #f2
> > if ua3=0 then goto f3
> > Ua=Ua+(ua3*16)
> > #f3
> > Ua=ua+ua4
> > if Ua < 0 then gosub uaberechnung
> >
> >               print"#ON_LCD#";
> >       print"#L101#";
> > print Ua;"    ";
> >
> > '-----------------------------------------------------------------------------
> > #uaberechnung
> >                  wert=65536-wert
> >                  return
> > '----------------------------------------------------------------------------
> > >
> > > Noch Besser ist es, vor der Berechnung die Sache zu klären, lässt sich alles Bitweise ausbaldovern!
> > > Genau genommen ist es aber auch egal, 16 Bits sind 16 Bits, Bitweise arbeitet das System ja auch völlig korrekt, im Zweifelsfall die Dezimale Umsetzung überhaupt nicht betrachten, sondern die Binäre Lösung anwenden.
> > >
> > > Pit
> >
>

 Antwort schreiben

Bisherige Antworten: