Forum: Compiler & IDEs 1 Byte unterteilen


von Dirk (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

lower = byte % 16;
upper = byte / 16;


Peter

von Toni (Gast)


Lesenswert?

Hallo Dirk

Vielleicht hilft Dir das weiter !

Link zum OpenBook "C von A bis Z" Kapitel 9.5 Bit-Operationen.

http://pronix.de/modules/C/openbook/c_programmierung_9.php?PHPSESSID=db2d7f1f95587e25907e94229afd6c59#5


Gruss

Toni

von leo9 (Gast)


Lesenswert?

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

von Dirk (Gast)


Lesenswert?

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

von Stefan Kleinwort (Gast)


Lesenswert?

Der Link ist nicht gut, der ist super! Ein Online-C-Buch von Anfang an.

Stefan

von Dirk (Gast)


Lesenswert?

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

von Dirk (Gast)


Lesenswert?

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++;
}

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.