Forum: Mikrocontroller und Digitale Elektronik Programmierfrage


von Mathe F. (bob37)


Lesenswert?

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?
übrigens es geht um Microcontroller Programmierung:ATmega

von Stefan (Gast)


Lesenswert?

Ich nehme jetzt einfach mal an, dass Du einmal die unteren 8bit und zum 
anderen die oberen 4bit der 12bit variablen meinst ?!

In diesem Fall:

unsigned int  12bit_var
unsigned char lower;
unsigned char upper;

lower = (unsigned char)(12bit_var & 0x00FF);
upper = (unsigned char)(12bit_var & 0x0F00);

von Obelix (Gast)


Lesenswert?

Es gibt keinen standard 4Bit Typen.

von Matthias L. (Gast)


Lesenswert?

eher so:
1
unsigned uint16_t     v12bit_var
2
unsigned uint8_t      lower;
3
unsigned uint8_t      upper;
4
5
lower = (uint8_t) ( v12bit_var & 0x00FF);
6
upper = (uint8_t) ( (v12bit_var & 0x0F00) >> 8 );

von AVR-User (Gast)


Lesenswert?

@Stefan

hast bei upper das shiften vergessen ;)
1
upper = (unsigned char)((12bit_var & 0x0F00) >> 8);

von Miu (Gast)


Lesenswert?

Danke Matthias,

das wollt ich grad auch anmerken, dass das net so einfach ist, wie 
Stefan das beschrieben hat

von AVR-User (Gast)


Lesenswert?

mist. War zu langsam ;)

von Mathe F. (bob37)


Lesenswert?

junfes,ich bin durch einander gekommen.
könnt ihr mir bitte jede Zeile erklären?
danke.

von Mathe F. (bob37)


Lesenswert?

übrigens die 16 Bit Variable ist schon in 2Byte terlegt!!!!

von Mathe F. (bob37)


Lesenswert?

übrigens die 16 Bit Variable ist schon in 2Byte zerlegt!!!!

von Matthias L. (Gast)


Lesenswert?

>übrigens die 16 Bit Variable ist schon in 2Byte terlegt!!!!

Achso. Ja, wie hast denn das gemacht, poste das doch mal

von AVR-User (Gast)


Lesenswert?

Wenn du die 16-Bit Variable schon in zwei einzelne Bytes zerlegt hast wo 
ist dann das Problem? Wie oben schon geschrieben wurde gibt es keine 
4-Bit Datentypen.

von Johannes M. (johnny-m)


Lesenswert?

Mathe Fan wrote:
> übrigens die 16 Bit Variable ist schon in 2Byte zerlegt!!!!
Ach je, der Mathe Fan wieder. Bitte kauf Dir endlich ein C-Buch! Und 
lies es auch. Dann erkennst Du vielleicht auch, dass Du die Variable, 
wenn sie denn schon in zwei Byte-Variablen aufgeteilt ist, nicht weiter 
aufteilen kannst. Ein Byte ist die kleinste unter C auf einem 
8-Bit-System ansprechbare Einheit.

von Mathe F. (bob37)


Lesenswert?

nein,ich habe sie nicht zerlegt,das ist der Timer1 und ist schon in 2 
Bytes zerlegt.
und ich hab eine Variable mit 12 Bits,die ich in 2 Teile zerlegen muss:8 
und 4 Bits.und so kann ich den Inhalt des Timers in der 2 Teilen 
kopieren.

von Johannes M. (johnny-m)


Lesenswert?

Mathe Fan wrote:
> nein,ich habe sie nicht zerlegt,das ist der Timer1 und ist schon in 2
> Bytes zerlegt.
> und ich hab eine Variable mit 12 Bits,die ich in 2 Teile zerlegen muss:8
> und 4 Bits.und so kann ich den Inhalt des Timers in der 2 Teilen
> kopieren.
In C kannst Du auf 16-Bit-I/O-Register (bis auf wenige Ausnahmen) direkt 
als solche zugreifen. Dafür brauchst Du die Variable nicht zu zerlegen. 
Und ein Tiomer-I/O-Register ist KEINE Variable, sondern ein 
I/O-Register.

EDIT:
Und versuch bitte mal, Deine Anfragen so zu formulieren, dass es für 
andere auch ohne tausend Rückfragen verständlich ist. Wenn Du erst 
schreibst, Du weißt nicht, wie Du eine Variable aufteilen kannst, und 
dann sagst, die Variable sei schon aufgeteilt, dann macht das wenig 
Sinn.

von Mathe F. (bob37)


Lesenswert?

hey du johnny-m ich weiß es schon und deine verdammte scheiße Hilfe 
brauche ich auch nicht.
ein arrogante mensch wie du hab ich niemamls begegnet.
ich bin anfänger und motiviert Microcontroller zu programmieren.
eins muss dir klar sein,ich lass mich nicht so schnell von jemandem wie 
du demotivieren!!!!!!!!

von Johannes M. (johnny-m)


Lesenswert?

Mathe Fan wrote:
> hey du johnny-m ich weiß es schon und deine verdammte scheiße Hilfe
> brauche ich auch nicht.
> ein arrogante mensch wie du hab ich niemamls begegnet.
> ich bin anfänger und motiviert Microcontroller zu programmieren.
> eins muss dir klar sein,ich lass mich nicht so schnell von jemandem wie
> du demotivieren!!!!!!!!
OK, damit ist alles gesagt!

von Mathe F. (bob37)


Lesenswert?

ich formuliere meine Frage:

ich will ersten 12 Bit eines 16 Bit Timers in 12 Bit Variable kopieren.
wie soll ich es machen?

von AVR-User (Gast)


Lesenswert?

Sorry aber ich muss Johannes voll zustimmen.
Erwarte bei solchen Reaktionen bitte nächstes mal keine Hilfe mehr. 
kopfschüttel

von Falk B. (falk)


Lesenswert?

@ Mathe Fan (bob37)

>hey du johnny-m ich weiß es schon und deine verdammte scheiße Hilfe
>brauche ich auch nicht.
>ein arrogante mensch wie du hab ich niemamls begegnet.
>ich bin anfänger und motiviert Microcontroller zu programmieren.
>eins muss dir klar sein,ich lass mich nicht so schnell von jemandem wie
>du demotivieren!!!!!!!!

http://www.duden.de

http://www.amazon.de/Dativ-ist-dem-Genitiv-sein/dp/3462034480/ref=pd_bbs_sr_1/302-0447979-4536062?ie=UTF8&s=books&qid=1187255560&sr=8-1

SCNR
;-)

MfG
Falk

von Matthias L. (Gast)


Lesenswert?

@Mathe Fan:

Johnny ist immer hart im Ton, aber er hat recht.

DU musst dein Problem so formulieren, dass wir (andere) es 
nachvollziehen können.

Also kannst du nicht erst schreiben:
>>ich möchte eine unsigned variable von 12 bit in zwei Variablen teilen

und dann:
>>übrigens die 16 Bit Variable ist schon in 2Byte zerlegt!!!!

Also Was denn nun???

Und die vielen Ausrufezeichen suggerieren, dass du jemand versucht was 
zu sagen, aber DU Hilfe haben MÖCHTEST...

Also Poste doch mal die Deklaration, sowie den Code, wo die 
16/12bit-Variable (was nun??) "befüllt" wird...

Und dann nochmal, was genau soll gemacht werden..

von Hmmm... (Gast)


Lesenswert?

Aber nicht als pdf.

von Mathe F. (bob37)


Lesenswert?

danke  Matthias du hast schon recht.
ich möchte ein 12 bit Variable in zwei Teile zerlegen.

von Matthias L. (Gast)


Lesenswert?

>ein 12 bit Variable in

Es gibt keine 12bit Variablen (in C).

vielleicht ja in Bascom ;-))

POSTE MAL:
>>Also Poste doch mal die Deklaration, sowie den Code, wo die
>>16/12bit-Variable (was nun??) "befüllt" wird...
!!

von Johannes M. (johnny-m)


Lesenswert?

@Matthias:
> Johnny ist immer hart im Ton,...
Nicht immer. Nur, wenn sich ein Fragensteller sichtbar absolut keine 
Mühe bei der Formulierung seiner Frage gibt und vorher schon in mehreren 
Threads mit Stilblüten unterschiedlicher Art geglänzt hat (s.a. dezenter 
Hinweis von "Hmmm...").

Ich hab auch keine Probleme damit, wenn jemand kein perfektes Deutsch 
hinlegt und ich spare mir daher auch i.d.R. Hinweise auf grammatische 
Fehler. Bei manchen bringt es auch was, wenn man deutlich darauf 
hinweist, dass mit einer solchen Fragestellung niemand wirklich konkret 
was anfangen kann. Wenn derjenige dann aber ausfällig wird und mit 
Kraftausdrücken um sich wirft, dann ist eben H&M verloren...

von Matthias L. (Gast)


Lesenswert?

>H&M

Wobei das lieber in eine Brauerei sollte...
;-)

Ich merk schon, das Thema driftet ab..

von xyz (Gast)


Lesenswert?

Hier kann mann kostenlos C lernen.

http://www.pronix.de/pronix-4.html

von Zeusi (Gast)


Lesenswert?

Gegenfrage:
Wenn du schon mit einem Word den timer register auslesen kannst, wieso 
willst Du den dann zerlegen??
Falls du wirklich die einzelnen Byte haben willst dann ließ sie doch 
schon per inline asm aus,..(meine meinung, geht schneller und 
expliziter, ist ja aber bekanntlich geschmackssache),...

Also nochmal zum mitschreiben:
Es ist bekannt was du machen willst, aber wieso??

(Auß dieser Fragestellung ergaben sich schon so manches mal eine neue 
herangehensweise,..)

grüüüüüße

p.s.: ich liebe senf

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.