Programmierung der AVR-Microcontroller mit C - UlrichRadig.de
Programmierung der AVR-Microcontroller mit C - UlrichRadig.de
Programmierung der AVR-Microcontroller mit C - UlrichRadig.de
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.