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
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
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
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.