1 Byte unterteilen

Gast #77428
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
Gast #77431
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
Gast #77434
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
Gast #77435
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++;
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren