PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programmierfrage



bob37
16.08.2007, 09:49
ich möchte eine unsigned variable von 12 bit in zwei Variablen teilen:
die erste von 8 Bit und die zweite von 4 Bit.
wie kann ich es mit C programmieren oder was ist den Befehl,womit ich das machen kann?
übrigens es geht um Microcontroller Programmierung:ATmega

bob37
16.08.2007, 10:12
ich formuliere meine Frage:

ich will ersten 12 Bit eines 16 Bit Timers in 12 Bit Variable kopieren.
wie soll ich es machen?
es geht um ATmega mit C-Programmierung

Mobius
16.08.2007, 10:16
Es gibt keine Variable mit 4bits, das kleinste in ANSI-C ist ein char mit 8 bits. Bei µC wird dann meist aich noch eine zusätzliche Variable bit eingeführt, welcher, wundersamerweise (;)), 1 bit lang ist.

Zu deiner Frage, die Antwort versteckt sich hinter und-operatoren, mit denen du die 12-bit weite Variable zuerschneiden und hinter shift-operationen um die obereb 8 bit herauslesen zu können.


unsigned short x=0x0ABC;
unsigned char hbyte=0x00; // soll am Ende 0xBC enthalten
unsigned char lbyte=0x00; // soll am Ende 0x0A enthalten

lbyte=x&0x00FF; // lösche die obereb Bits weg und schreibe das Ergebnis in die erste Variable (und sollten Warnungen kommen, ignorieren)
hbyte=((x>>8)&0x0F); // shifte die obereb 8 bits um 8 nach oben und lösche den oberen nibble

Übrigen, wenn es um ATmega und programmieren geht, ist das hier das falsche Forum ;).
lg
Mobius

€dit: Wie gesagt, es gibt keine 12bit Variable, da der ATmega einen 8bit weiter µC ist (denk ich mal, dass der net 16Bitig ist), also kannst du nur Variablen mit einem _ganzen_ vielfachen von 8 verwenden und dieses Kriterium erfüllt eine Variable mit 12bits net ;). Da nimmt man eine 16 bit und lösche dir oberen 4 bit weg ( x&0x0FFF), anders geht es nicht und. (außer du baust dir selber einen µC bei dem du die weite des Datenbusses auf 12Bit begrenzt, mit einem FPGA wirst du nur noch einige Monate entwicklungszeit haben :D, aber dann kannst du wieder keine 16bit weiten Variablen verwenden ;))

StackDaniels
16.08.2007, 13:39
Du könntest dir auch eine struct definieren, in der du die beiden Teile (8bit und 4bit) speicherst. Dann schiebst du eine temporäre Kopie der 12-Bit-Variable 4 Bit nach rechts, weist das Ergebnis dem 8bit-teil der struct zu. Anschließend schiebst du die 12bit-Variable 8bit nach links und weist diesen Teil dem 4bit-Teil der struct zu.

1hdsquad
17.08.2007, 00:21
Falsches Forum, hier geht es um die Hardware und nicht um die Programmierung. Bitte verschieben!
@ bob37: Und du könntest mal googlen etc!