Forum: Mikrocontroller und Digitale Elektronik Verständnisfrage


von sleit (Gast)


Lesenswert?

Absoluter Newbie-Frage:
Ich bin gerade dabei mich in die Programmierung (in C) der µC
einzuarbeiten. Das Ganze nur, damit ich sicher bin, dass ich das
Prinzip verstanden habe. Korrigiert mich, wenn ich daneben liege: (ich
beschreibe jetzt mal ganz allgemein, da ich denke, dass diese
Verständnis unabhängig von der Controllerwahl ist)
Im Prinzip programmiere ich doch einen µC durch das Setzen von Flags in
gewissen Bytes.
Bspw. ist auf Adresse $003A das Byte mit dem Synonym PLLCTL zu finden.
In diesem Byte steht halt jedes Bit für eine gewisse Funktion. Z.B. Bit
6 aktiviert die PLL (Synonym "PLLON") und Bit 5 aktiviert den
Automodus (Synonym "Auto").
Damit ich nun die Flags auf dem Byte setzen kann, muss ich
0x3A = 0x60 (oder PLLCTL = 0x60).

Liege ich soweit richtig?

Gruß
sleit

von Alex (Gast)


Lesenswert?

Ja, auch wenn der Controller halt unklar ist.

von crazy horse (Gast)


Lesenswert?

besser, weil ungefährlicher:

PLLCTL=PLLCTL|0x60;
vermeidet unbeabsichtigtes Überschreiben anderer Flags, die auf
derselben Byteadresse stehen. In deinem Beispiel werden Bit5 und 6
gesetzt, alle anderen zurückgesetzt. In meinem Beispiel werden nur 5
und 6 gesetzt, die anderen bleiben unbehelligt.

Geht aber noch weiter. Mit 0x60 kann keiner was anfangen, ohne im
Datenblatt des Controllers nachzuschauen, was der Befehl denn nun
wirklich macht.

Dafür benutzt man symbolische Bitadressen (i.a. sind die schon in der
.h-Datei des Prozessors deklariert.
nehmen wir einfach mal die Namen Flag1 (=Bit5) und Flag2 (=Bit6).

und nun sieht das Ganze so aus:
PLLCTL=PLLCTL|(1<<Flag1)|(1<<Flag2);
sieht erstmal wüst aus, ist es aber gar.
Hat 2 Vorteile: man sieht, welche Flags gesetzt werden, und falls beim
nächsten Prozessor die Flags auf eine andere Bitstelle gewandert sind,
funktioniert das ganze trotzdem. (Flag1=7, Flag2=1)

von crazy horse (Gast)


Lesenswert?

"sieht erstmal wüst aus, ist es aber gar nicht." muss das natürlich
heissen - wann kann man endlich seine Beiträge editieren?

von Chief Brady (Gast)


Lesenswert?

@crazy horse
"wann kann man endlich seine Beiträge editieren?"

Jederzeit (vor Anklicken des Submit-Buttons ;-)

von A.K. (Gast)


Lesenswert?

> PLLCTL=PLLCTL|(1<<Flag1)|(1<<Flag2);

Abneigung gegen assign-ops (|=)?

von sleit (Gast)


Lesenswert?

Moin zusammen *gähn

Besten Dank! Jetzt bin ich schon einmal einen Schritt weiter

Gruß

sleit

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.