Forum: Mikrocontroller und Digitale Elektronik byte ausgeben


von Michael (Gast)


Lesenswert?

wie kann ich ein unsigned long int byteweise auf die serielle
Schnittstelle ausgeben?
Gruß Michael

von ,,,, (Gast)


Lesenswert?


von Michael (Gast)


Lesenswert?

ich lag damals falsch, ich muß nicht einen Hexwert ausgeben sondern das
byte.

von The Daz (Gast)


Lesenswert?

Michael,
warum postest du dieselbe Frage eigentlich mehrfach ? Wie man ein byte
aus einem 4 byte long extrahiert ist dir doch schon lang und breit
erklaert worden ?

kopfschuettel

von ,,,, (Gast)


Lesenswert?

byte oder hex, warum spielt das so ne Rolle? Kannst du nicht auf
Empfängerseite die Daten nach deinen Wünschen interpretieren?

von Michael (Gast)


Lesenswert?

wie man die bytes extrahiert ist mir nun auch klar.
ich habe dann die hexzahlen z.B F4 A1 ... auf den seriellen Port
geschickt.
Das ist aber falsch, ich muß das byte senden und nicht einen string mit
F4, ich weiß nicht wie ich es  besser erklären soll sorry.

von The Daz (Gast)


Lesenswert?

Folge mal Quadkommas link und schaue dir die erste Antwort von Jens an.
Da stehts !

von Hannes L. (hannes)


Lesenswert?

Long besteht aus Bytes,
Bytes betehen aus Bits,
Bits kann man schieben,
links ist das hochwertige Bit, rechts das niederwertige Bit,
von C habe ich keine Ahnung...

...

(Dies soll keine Verarschung sein, sondern ein Denkanstoß...)

von Karl H. (kbuchegg)


Lesenswert?

Ja dann sende sie halt ohne dass Du Dir mit sprintf
eine String Repraesentierung generieren laesst.
Ist alles im anderen Beitrag enthalten. zb. gleich
die erste Antwort von Jens macht genau das:
  Den unsigned long in lauter Bytes zerpfluecken
  und jedes Byte auf die Reise bringen.

Du musst dich nur noch mit dem Empfaenger absprechen
in welcher Reihenfolge er die Bytes haben will.

von The Daz (Gast)


Lesenswert?

Vielleicht reden wir aneinander vorbei :

Ein byte hat einen Zahlenwert zwischen 0 und 255 oder 0x00 bis 0xFF.
Wenn du von einem String sprichst dann schreib das bitte als 'ABCD'
(also mit Hochkommas). Ein String enthaelt ein Zeichen pro byte. Jedes
byte davon enthaelt den ASCII code des repraesentierten Zeichens, also
65 bzw. 0x41 fuer ein 'A'.

von Karl H. (kbuchegg)


Lesenswert?

...
oder besteht Dein Problem vielleicht darin, dass Du
keine passende Send Funktion hast, die ein einzelnes
unsigned char annimmt?

Obwohl, kann ich mir eigentlich nicht vorstellen, dann
eine Send Funktion zum verschicken eines kompletten
Strings wuerde ja sinnvollerweise darauf aufbauen:

void Send( const char* TheString )
{
  for( ; *TheString; TheString++ )
    SendByte( *TheString );
}

von Michael (Gast)


Lesenswert?

so ist die Vorgabe vom Protocoll:

[$8B] [$01] [$26].....

so hab ichs jetzt probiert:


unsigned long value=4283036831;

rprintfStr((unsigned char) (value >> 24));
rprintfStr((unsigned char) (value >> 16));
rprintfStr((unsigned char) (value >> 8));
rprintfStr((unsigned char) (value));

von The Daz (Gast)


Lesenswert?

Michael,
was macht rprintfStr ?

von Karl H. (kbuchegg)


Lesenswert?

Ich kann mich taeuschen.
Aber wenn derjenige der rprintfStr programmiert hat auch
nur halbwegs mitgedacht hat, und dem Ding einen vernuenftigen
Namen gegeben hat, dann ist rprintfStr die falsche Funktion.
Du hast keinen String mehr, du hast einzelne Bytes!
Das 'Str' im Namen von rprintfStr ist ein starkes Indiz, dass
hier irgendwas mit Strings passiert. Das ist aber nicht
das was Du willst. Du hast ein Byte und Du willst das dieses
Byte auf die Leitung geht. So wie es ist. Ohne dass noch irgendwer
daran rumfummelt.

von Michael (Gast)


Lesenswert?

es ist geschafft.

vielen Dank an Alle.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.