AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Char nach BCD konvertieren?

Ein Thema von dragi · begonnen am 29. Apr 2005 · letzter Beitrag vom 30. Apr 2005
Antwort Antwort
dragi

Registriert seit: 22. Jul 2003
198 Beiträge
 
Delphi 2005 Personal
 
#1

Char nach BCD konvertieren?

  Alt 29. Apr 2005, 18:36
Hallo,

Wie in einem Thread weiter unten schon erwähnt lese ich Daten aus meiner Wetterstation über RS232 aus. Ich bekomme von meiner Wetterstation 6 Byte in denen Werte im BCD Format vorliegen. Diese 6 Byte lese ich in ein array of Char weil mit Async Pro die Methode GetChar zur Verfügung stellt. Wie kann ich denn nun die einzelnen Chars konvertieren? Muss ich die nicht von Char nach BCD und von BCD nach Integer konvertieren? Es muss eine Zahl am Ende rauskommen.

So sieht mein Code aus. Es sollen 6 Byte zurückkommen aus denen sich uhrzeit und Datum dastellen lassen;

Code:
procedure TForm1.ComPortTriggerAvail(CP: TObject; Count: Word);
var
  i, j, Temp: Integer;
  test: array of Char;
begin
  SetLength(Test,Count);
  for i := 1 to count do
    test[i - 1] := ComPort.GetChar;
  for j := 0 to length(test) - 1 do
  begin
    Temp := BCDToInteger(StrToBcd(Test[j]), True); // <----Hier kommt der Fehler direkt beim ersten Durchlauf der Schleife:
    List.Add(IntToStr(Temp));                     //      ... ist kein gültiger BCD-Wert! ...ist ein kleines Viereck,
  end;                                            //      also ein nicht druckbares Zeichen denke ich
  List.SaveToFile(ExtractFilePath(ParamStr(0))+ 'temp.txt');
end;
Hat jemand eine Idee?

Vielen Dank

Dragi
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#2

Re: Char nach BCD konvertieren?

  Alt 30. Apr 2005, 05:51
BCD heisst das in jedem Byte zwei Dezimalziffern untergebracht sind.
Je vier Bit (ein Nibble) enthalten die Werte 0..9.
Delphi-Quellcode:
var
  Value: Integer; // Zielwert
  Source: array [0..5] of Byte; // Beispiel fuer die BCD Bytes
  I: Integer;
begin
  Value := 0;
  for I := 0 to 5 do
  begin
    Value := Value * 10; // eine Ziffer links schieben
    // oberes Nibble rausknipsen
    Value := Value + Integer((Source[I] shr 4) and $F);
    Value := Value * 10; // eine Ziffer links schieben
    // unteres Nibble rausknipsen
    Value := Value + Integer(Source[I] and $F);
  end;
end;
Alles ohne Gewaehr, da hier eingetippt.
Es kann auch sein das du die Ziffern in umgekehrter Reihenfolge bekommst. Das muss man aus der Doku lesen oder ausprobieren.
  Mit Zitat antworten Zitat
dragi

Registriert seit: 22. Jul 2003
198 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Char nach BCD konvertieren?

  Alt 30. Apr 2005, 18:06
Vielen Dank für den Code. Werde den ausprobieren sobald ich die Verbindung über RS232 hinkriege...aber das steht in einem anderen Thread

Gruss

Dragi
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz