Forum: Mikrocontroller und Digitale Elektronik Aufteilung beim ansprechen eines Ports


von Taylor (Gast)


Lesenswert?

Hallo,

folgende Überlegung. Ich habe ein Register für einen Port. Das Register
ist 16 Bit groß ( 0x0000 ). Soweit so gut. Die ersten beiden Stellen
sind für Input/Output-Einstellung des Reg. Die letzten beiden sind die
8 IO-Pins. Nun möchte ich HEX Werte auf dem Port schreiben Nur dürfen
die vorderen beiden stellen ja nicht verändert werden. Mit oder ner
oder-verknüpfung kriege ich ja nicht den korrekten wert rein. Wie kann
ich also nur die hintern 8 Bit ansprechen ?

regards
Taylor

von Martin S. (Gast)


Lesenswert?

mit "Stellen" meinst du vermutlich jeweils halb-bytes (nibbles),
stimmts?

wegen Ansprechen: hast du schon mal die AND-Venknüpfung in Betracht
gezogen?

Ursprünglicher Registerwert = 0x4711
AND Register, 0xFF00 --> was vorne ist bleibt wie es ist, und was
hinten ist wird weggestanzt
OR Register, 0x00zz (zz = dein neuer Wert)

dann sollte da im Register anschließend 0x47zz drin stehen

von Jens (Gast)


Lesenswert?

hmmh
in der regel kannst du endweder das H oder L "register" ansprechen
oder hast du einen 16 Bit µC??
du kannst mit
1100000000000000
eine und  everknuepfung auf das register erstellen, dann bekommst du
zB. bei  1011100101001110
und  1100000000000000
wird 1100000000000000
nun kannst du das wieder mit deinem registern vergleichen
ganz einfach

von Taylor (Gast)


Lesenswert?

Ja das ist ja das wo ich überlege, wen ich das mit bitoperationen mache
wie OR hab ich doch folgendes Problem.

Wenn ich ein ODER benutze bei zb. 0x4711 und oder das mit eine wert.
Dann werde doch nur die stellen überschrieben die eine 1 enthalten.
Wenn ich aber auf den letzten beiden Stellen z.B. ne "0F" haben will
hätte ich doch das Problem das zwar das "F" verknüpft wird aber die
"0" nicht betrachtet wird und der vorher enthaltene Wert weiterhin
existiert.
Möchte über diesen Port ein Display anschließen.

von Taylor (Gast)


Lesenswert?

@jens:

Ist ein 16-Bit DSP von Texas.

von Tom (Gast)


Lesenswert?

Hallo

Wie Martin schon erklärt hat:
Zuerst die hinteren Bits mit AND auf 0 setzen, dann mit OR den
gewünschten Wert rein schreiben.

Das kannst du natürlich nicht direkt auf dem Port machen, da dann immer
ein Zwischenwert von 0 ausgegeben wird.
Also
- Port lesen
- Datenbits ausmaskieren
- Neue Daten rein-odern
- Port schreiben

Oder du merkst dir immer den aktuellen Port-Wert, dann kanst du dir das
Lesen sparen.

von Taylor (Gast)


Lesenswert?

Danke erstmal, soweit ist das klar.
Nur wie kriege ich jetzt meine char-Variable mit den lower 8-Bit des
Registers verknüpft. Muss die ja erst auf 16_bit umrechnen oder ?

Wenn ich jetzt in meiner Fkt Write_char_LCD in der Variable
"character" die ich übermittel mein Zeichen als hex_wert habe, wie
wandel ich das dann um ? Gabs da nicht mal was mit nem cast-operator
für sowas ? Hab da noch was im Hinterkopf.

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.