Forum: Compiler & IDEs sinnvolles Programmieren


von Einsteiger M (Gast)


Lesenswert?

Hallo

Ist es sinnvoll, die Ports so, also über das DDRX zu programmieren,
oder sollte man dies besser über PortX tun?

#define set_DATA   DDR_T &= ~(1<<P_DATA)   // PORT_T |= (1<<P_DATA)
#define clear_DATA DDR_T |=  (1<<P_DATA)   // PORT_T &= ~(1<<P_DATA)


Grüße Marcel

von Tobi (Gast)


Lesenswert?

Hi Marcel

siehe Tutorial:

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

DDRX legt nur die Datenrichtung der Ports fest! PORTX den Wert.
Also erst als Ausgang schalten, dann Wert anlegen.

z.B. DDRA=0x01; PORTA=0x01; //Port A, LSB auf HIGH

von Jörg Wunsch (Gast)


Lesenswert?

Es ist nicht nur nicht sinnvoll, es ist sogar unsinnig.

DDRx ist das Datenrichtungsregister.  Für einen Ausgang setzt du
das typisch genau einmal, bevor du den ersten Wert ausgibst.

von Einsteiger M (Gast)


Lesenswert?

hallo,

ja, mir ist klar, das ddrx festlegt, ob dieser port Ein- bzw. Ausgang
sein soll. Ich habe diese Zeilen in einem Code aufgeschnappt. Dort wird
so der ein Output Port realisiert. Wenn ein high ausgegeben werden soll
wird das DDRx auf "Input" umgestellt, bei low auf "Output".
Ich denke das high wird mit einem externen pull up realisiert.

Die Definition solcher Macros (#define set_DATA  PORT_T |= (1<<P_DATA))
ist aber sinnvoll, oder? Diese machen doch das Programm übersichtlicher
oder??

Grüße und dank schonmal
M.

von Jens (Gast)


Lesenswert?

> Diese machen doch das Programm übersichtlicher oder??

Das mußt du für dich entscheiden! Wenn es für DICH übersichtlich ist,
benutze die Makros.

von Philipp (Gast)


Lesenswert?

Es kann doch sinnvoll sein, es so zu steuern. zB für I2C damit kann man
es dann einmal auf LOW ziehen und ansonsten ist es hochohmig.

von Tobi (Gast)


Lesenswert?

Vorrausgesetzt PORTX=0, ansonsten nicht.

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.