Forum: Mikrocontroller und Digitale Elektronik Teilwert eines Ports abfragen und in eine Variable abspeichern


von Elektrolyt (Gast)


Lesenswert?

Hallo lieben Mitglieder,

ich habe ein Problem bei der Abfrage der anliegenden Bits an einem Port. 
Programmieren tue ich in C und benutze ein Mega8.
Ich habe zb ein 4 bit wert an portC anliegen und möchte diese 4 bits in 
einer Variable abspeichern (quasi den dualWert oder hexwert, den die 
Bits darstellen)
Das ist soweit auch kein Problem. Ich scheitere daran, dem uC 
mitzuteilen, dass er nur die ersten 4 Bits des Ports in die variable 
speichern soll und die restlichen pins bei der abfrage unberücksichtigt 
lassen soll. Wie mache ich das am einfachsten?
Ich habe versucht den Wert von PortC in eine uint8_t abzuspeichern und 
die restlichen Pins (Bits) von dem Wert der 4 Bits zu subtrahieren, 
damit nur der Wert dieser 4 bits in eine Variable gespeichert werden 
kann. Das ist aber in der hinsicht sehr mühevoll, weil ich immer die 
restlichen Pins separat abfragen muss, um den Wert von den 4 relevanten 
bits zu subtrahieren.

Vielen Dank für mögliche Hilfe und Verbesserungsvorschläge
und schönes WE
MFG Elko

von Matthias L. (Gast)


Lesenswert?

>dass er nur die ersten 4 Bits des Ports in die variable
1
variable = ( PINC & 0b00001111);
2
// oder
3
variable = ( PINC & 0x0F );

von Elektrolyt (Gast)


Lesenswert?

und dann kann ich die übrigen pins wie gewohnt benutzen???

von Matthias L. (Gast)


Lesenswert?

>und dann kann ich die übrigen pins wie gewohnt benutzen???

Wie meinst du das?

in der variable hast du die unteren vier pins des PortC. die oberen vier 
bits (in der variable) sind IMMER null.

der Port/Pin C bleibt unverändert

von Elektrolyt (Gast)


Lesenswert?

erstmal vielen dank für deine hilfe.

kann man die sache mir den bitweisen operatoren irgendwo schön 
zusammengefasst nachlesen?

ich meinte mit "wie gewohnt benutzen" ob ich die restlichen 4 pins am uC 
dann auch normal weiterbenutzen kann? als eingang und ausgang 
bespielsweise... aber ich denke ja schon... danke nochmal, bin wieder 
bissl schlauer geworden...

von Jochen M. (taschenbuch)


Lesenswert?

Elektrolyt,

Du MUSST Dich UNBEDINGT mit solchen Sachen noch genauer befassen,
es KANN EINFACH NICHT SEIN (und es DARF auch nicht sein), dass jemand 
der sich mit tieferer Programmierung befasst die elementarsten 
Bit-Funktionen OR/AND/XOR nicht beherrscht. Das wäre so wie ein Koch, 
der nicht weiss was Salz und Mehl ist.

http://en.wikipedia.org/wiki/Bitwise_operation

In Englisch, damit Du Dich auch daran gleich gewöhnen kannst, denn für 
Dein künftiges ausgiebiges Studium von Büchern und Datenblättern ist das 
sehr nützlich.

Jochen Müller

von Matthias L. (Gast)


Lesenswert?

>In Englisch,....

;-)

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.