12.11.2012 Aufrufe

Programmierung der AVR-Microcontroller mit C - UlrichRadig.de

Programmierung der AVR-Microcontroller mit C - UlrichRadig.de

Programmierung der AVR-Microcontroller mit C - UlrichRadig.de

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

5 ZUGRIFF AUF PORTS<br />

Alle Ports <strong><strong>de</strong>r</strong> <strong>AVR</strong>-Controller wer<strong>de</strong>n über Register gesteuert. Dazu sind je<strong>de</strong>m Port 3 Register<br />

zugeordnet:<br />

DDRx Datenrichtungsregister für Port x (x entspricht A, B, C o<strong><strong>de</strong>r</strong> D).<br />

PORTx<br />

PINx<br />

Datenregister für Port x (x entspricht A, B, C o<strong><strong>de</strong>r</strong> D).<br />

Dieses Register wird verwen<strong>de</strong>t, um die Ausgänge eines Ports anzusteuern.<br />

Wird ein Port als Eingang geschaltet, so können <strong>mit</strong> diesem Register die internen Pull-<br />

Up Wi<strong><strong>de</strong>r</strong>stän<strong>de</strong> aktiviert o<strong><strong>de</strong>r</strong> <strong>de</strong>aktiviert wer<strong>de</strong>n (1 = aktiv).<br />

Eingangadresse für Port x (x entspricht A, B, C o<strong><strong>de</strong>r</strong> D).<br />

Dies ist kein eigentliches Register, son<strong><strong>de</strong>r</strong>n <strong>de</strong>finiert lediglich eine Adresse, in welcher<br />

<strong><strong>de</strong>r</strong> aktuelle Zustand <strong><strong>de</strong>r</strong> Eingangspins eines Ports vom Controller abgelegt wer<strong>de</strong>n.<br />

Nichts<strong>de</strong>stotrotz erfolgt <strong><strong>de</strong>r</strong> Zugriff auf <strong>de</strong>n Zustand <strong><strong>de</strong>r</strong> Pins genau so, wie wenn PINx<br />

ein normales Register wäre.<br />

Die Adresse kann nur gelesen und nicht beschrieben wer<strong>de</strong>n.<br />

5.1 Datenrichtung bestimmen<br />

Zuerst muss die Datenrichtung <strong><strong>de</strong>r</strong> verwen<strong>de</strong>ten Pins bestimmt wer<strong>de</strong>n.<br />

Um dies zu erreichen wird das Datenrichtungsregister <strong>de</strong>s entsprechen<strong>de</strong>n Ports beschrieben.<br />

outp (, );<br />

Für je<strong>de</strong>n Pin, <strong><strong>de</strong>r</strong> als Ausgang verwen<strong>de</strong>t wer<strong>de</strong>n soll, muss dabei das entsprechen<strong>de</strong> Bit auf <strong>de</strong>m<br />

Port gesetzt wer<strong>de</strong>n. Soll <strong><strong>de</strong>r</strong> Pin als Eingang verwen<strong>de</strong>t wer<strong>de</strong>n muss das entsprechen<strong>de</strong> Bit<br />

gelöscht sein.<br />

Wollen wir also beispielsweise Pin 0 bis 4 von Port B als Ausgänge <strong>de</strong>finieren so schreiben wir<br />

folgen<strong>de</strong> Zeile:<br />

outp (0x1F, DDRB);<br />

// Binär 00011111 = Hexa<strong>de</strong>zimal 1F<br />

Die Pins 5 bis 7 wer<strong>de</strong>n als Eingänge geschaltet.<br />

5.1.1 GANZE PORTS<br />

Um einen ganzen Port als Ausgang zu <strong>de</strong>finieren, kann <strong><strong>de</strong>r</strong> folgen<strong>de</strong> Befehl verwen<strong>de</strong>t wer<strong>de</strong>n:<br />

outp (0xFF, DDRB);<br />

Im Beispiel wird <strong><strong>de</strong>r</strong> Port B als Ganzes als Ausgang geschaltet.<br />

5.2 Digitale Signale<br />

Am einfachsten ist es, digitale Signale <strong>mit</strong> <strong>de</strong>m <strong>Microcontroller</strong> zu erfassen bzw. auszugeben.<br />

5.3 Ausgänge<br />

Wir wollen nun einen als Ausgang <strong>de</strong>finierten Pin auf Logisch 1 setzen.<br />

Dazu schreiben wir <strong>de</strong>n entsprechen<strong>de</strong>n Wert in das Portregister <strong>de</strong>s entsprechen<strong>de</strong>n Ports.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!