Forum: Compiler & IDEs Ausgang setzen


von ich (Gast)


Lesenswert?

Hallo

Bei einem Chip (habe keine genaueren Infos) befindet sich auf der 
Adresse 0x1000 ein Register wo die ersten 4 Bits Ausgänge und die 
letzten 4 Bits Eingänge sind.

Wie kann ich die Ausgänge shiften? Das Problem ist wenn ich << verwende 
dann würde das ja auch die Eingänge beinflussen.

So kann ich das ja nicht verwenden da ich das ganz Register beinflusse.
1
adresse = 0x1000;
2
*adresse = 1<<x;

MfG

von pinhead (Gast)


Lesenswert?

Hallo ich,

Wenn u nicht sagst was für ein µC das ist kann man keine 
Lösungsvorschläge machen. Das ist wie "Wie tausche ich den Luftfilter 
von meinem Auto aus?" (Welches Modell denn?).
Sei es drum, i nehme an das wenn ein Port zur Hälfte Eingänge und zue 
anderen Hälfte Ausgänge hat das der Controller Bit Schiebe Befehle 
unterstützt. Eventuell sogar zwei getrennte Register, welche beschrieben 
werden können ohne die jeweils anderen Portleitungen zu beeinflussen. 
Wie gesagt ohne den µC zu kennen reine Spekulation.

Gruß pinhead

von Rolf Magnus (Gast)


Lesenswert?

> Wie kann ich die Ausgänge shiften? Das Problem ist wenn ich << verwende
> dann würde das ja auch die Eingänge beinflussen.

Inwiefern beeinflusst das denn die Eingänge und woher weißt du, daß es 
das tut, wenn du keine Infos hast?

von ich (Gast)


Lesenswert?

Es ist kein uC, es ist ein DSP. Ich kann nur über die Adresse auf dieses 
8 Bit Register zugreifen.

Deshalb interessiert es mich wie man allgemein in C mit einem Pointer 
auf die ersten 4 Bits der Adresse zugreifen kann ohne die anderen Bits 
zu beeinflussen.

von ich (Gast)


Lesenswert?

>Inwiefern beeinflusst das denn die Eingänge und woher weißt du, daß es
>das tut, wenn du keine Infos hast?

Da 4 Bits Schalter sind und 4 Bits Leds

von pinhead (Gast)


Lesenswert?

Nachtrag:


Folgender Vorschlag:

                                                // register_inhalt=xxxx 
1101
shift_reg=register_inhalt & 0x0F;               // shift_reg = 0000 1101
shift_reg=1 << shift_reg;                       // shift_reg = 0001 1010
if(shift_reg*0x10)shift_reg-=15;                // shift_reg = 0000 1011
register_inhalt=register_inhalt & 0xF0;         // register_inhalt= xxxx 
0000
register_inhalt=register_inhalt|shift_register; // register_inhalt= xxxx 
1011


Umständlich, sollte aber zum Ziel führen.

Gruß die zweite

von g457 (Gast)


Lesenswert?

einfach: register = 1 << x;
genau:   register |= 1 << x;
präzise: set_bit_in_register_without_side_effects(register, x);
geek:    dwim(register, x);

Gibt natürlich(tm) alle Varianten (und noch mehr). Was genau bei Dir 
funktioniert steht wie üblich im RTFM.. - weil das ist (ebenso) 
natürlich(tm) massiv hardwareabhängig.

HTH

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.