1 Byte unterteilen

Gast #77428
Hi,

da ich erst mit C angefangen habe komme ich bei dem Problem nicht
weiter. Ich moechte 1 Byte unterteilen in upper nibble und lower nibble
. Danach wollte ich das upper nibble + "0000" aendern.
Leider haenge ich an der Bitmanipulation :/

Waere nett wenn mir jemand das kurz erklaeren koennte.


Mfg

Dirk
Gast #77431
ganz verstehe ich deine Frage nicht, vielleicht hilft das weiter:

char wert;  // das ursprüngliche Byte
char ln;    // low nibble
char hn;    // high nibble

ln = wert & 0x0F;  // die oberen vier Bit löschen
hn = wert >> 4;    // oberen vier Bit nach rechts schieben
hn = wert & 0x0F;  // und die oberen zur Sicherheit löschen
hn = hn + 0;

wobei mir nicht klar ist wozu du 0 dazuzählen willst, ändert ja nichts
am Wert, aber vielleicht war die Frage ja ganz anders gemeint?

grüsse leo9
Gast #77432
Hi,

ich danke euch .... der link ist gut... Ich muss zur seriallen
Kommunikation den Wert in 2 x 4 Bit aufsplitten und mit jeweils 4 Bit
Dummy zusaetzlich ausgeben.

MFg

Dirk
Gast #77434
Hi,

@leo9 ich habe deine variante genutzt. Simuliert sowas Avr Studio 4.08
soetwas nicht?
Gebe ich die Variable als Watch an sagt er "not in scope" und wenn
ich die Zeilen einzeln durchlaufe ueberspringt er die Befehle.

unsigned char ln;  // low nibble
unsigned char hn;  // high nibble
unsigned char wert;  // das ursprüngliche Byte
wert = 0x1F;
ln = wert & 0x0F;  // die oberen vier Bit löschen
hn = wert << 4;    // oberen vier Bit nach links schieben
hn = hn + 0;          // + binaer 0000

Kann mir jemand erklaeren was ich falsch mache? oder liegt dieses an
AVR Studio?


Mfg

Dirk
Gast #77435
Hi,

ich hatte diese Sachen in einer Funktion komischerweise uebernimmt AVR
Studio 4.08 nicht die Deklaration der Variablen und ueberspringt somit
den komplettn C Syntax. Richte ich die Variablen noch vor der Main
Funktion ein geht es. Eigentlich sollte es doch auch funktionieren,
wenn ich die Variablen in der Funktion dimensoniere.
AVR Studio zeigt in diesen Fall auch die Variablen im Watch Window
nicht an (not in scope).



include <avr/io.h>
#include <inttypes.h>

//unsigned int c;
unsigned char ln;  // low nibble
unsigned char hn;  // high nibble
unsigned char wert;  // das ursprüngliche Byte
// unsigned char rs;    // hiermit funktioniert die Simulierung

int main(void)
{
wert = 0x1F;
ln = ln + hn;
writecmd(0x03);
while(1);
}


void writecmd(unsigned char data)
{
unsigned char rs;  // hiermit geht es nicht
  data++;
  rs++;
}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.