Verständnisfrage

Gast #172799
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
Gast #172801
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)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.