www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Verständnisfrage


Autor: sleit (Gast)
Datum:

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

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, auch wenn der Controller halt unklar ist.

Autor: crazy horse (Gast)
Datum:

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

Autor: crazy horse (Gast)
Datum:

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

Autor: Chief Brady (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@crazy horse
"wann kann man endlich seine Beiträge editieren?"

Jederzeit (vor Anklicken des Submit-Buttons ;-)

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> PLLCTL=PLLCTL|(1<<Flag1)|(1<<Flag2);

Abneigung gegen assign-ops (|=)?

Autor: sleit (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin zusammen *gähn

Besten Dank! Jetzt bin ich schon einmal einen Schritt weiter

Gruß

sleit

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.