www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Aufteilung beim ansprechen eines Ports


Autor: Taylor (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Taylor (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Taylor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@jens:

Ist ein 16-Bit DSP von Texas.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Taylor (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.