PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zum Ansteuern von Ports/Programmierfrage



Geimel
25.01.2007, 20:42
Hallo,
ich habe folgendes Problem das sich auf einen Atmega 8 bezieht:

mit PORTD|=(1<<PD1) kann ich ja einen Port anschalten bzw auf 5V Ausgangsspannung setzen. Wenn ich nun mehrere "anschalten" möchte hieße das ja ich müsste schreiben PORTD|=(1<<PD1);PORTD|=(1<<PD2);PORTD|=(1<<PD3)....
meine Frage ist:
Kann man das nicht in eine for-Schleife einbinden also nach dem Schema

for(i=1;i==7;i++){PORTD|=(1<<PD"und hier der Wert von i");}
??
vielen Dank,
MfG
Geimel

bL1nK
25.01.2007, 21:05
warum so kompliziert?


//switch on
PORTB |= (1<<PB0) | (1<<PB2) | (1<<PB4); //erste möglichkeit
PORTB |= (0x15 << PB0); //zweite möglichkeit

//switch off
PORTB &= ~((1<<PB0) | (1<<PB2) | (1<<PB4)); //erste möglichkeit
PORTB &= ~(0x15 << PB0); //zweite möglichkeit

coCo
25.01.2007, 21:12
Hi,
du kannst das auch alles in eine Zeile schreiben:
PORTD |= (1<<PD1) | (1<<PD2) | (1<<PD3);
Oder du weist dem I/O Register alle Zustände des gesamten Ports zu: (hexadezimal)
PORTD = 0x03;
Das würde PD0 und PD1 auf High, den Rest auf low setzen.

Nur so ne Bemerkung am Rande:
Deine For Schleife kann mit dem "i==7" nicht funktionieren. Die For Schleife wird solange ausgeführt, solang diese Bedingung wahr ist. Wenn du aber am Anfang i auf 1 setzt und die Bedingung "i muss 7 sein" ist, wird die Schleife einfach übersprungen, da die Bedingung nicht wahr ist. Statt dem "i==7" kannst du einfach "i<=7" schreiben.

MfG

EDIT: war wohl zu langsam ;)

Geimel
25.01.2007, 21:17
wenn ich jetzt aber eine variable habe, deren wert dem port entsprechen soll, wie kann ich das da machen?

uwegw
25.01.2007, 21:28
Die ganzen PD0, PD1, PD2... sind nichts anderes als Konstanten mit den Werten 0,1,2,... . Man kann also auch (1<<i) schreiben.

>>wenn ich jetzt aber eine variable habe, deren wert dem port entsprechen soll, wie kann ich das da machen?<<
PORTD=var; //wobei var nen 8bit-Wetr sein sollte

Geimel
26.01.2007, 20:33
also ich habe jetzt noch ein wenig rumprobiert, habe aber noch keine optimale Lösung gefunden die auch funzt.

Also ich möchte jetzt mit
for(i=0;i<=7;i++){PORTD..????;Msleep(1000);}

im Abstand von 1 sekunde alle Port D anschalten. Msleep ist dabei schon definiert.
Was muss ich jetzt noch einfügen damit nacheinander alle 7 Ports angeschaltet werden?

Ich hoffe ich nerve euch nicht mit so blöden Fragen.
MfG
Geimel

uwegw
26.01.2007, 22:29
for(i=0;i<=7;i++){PORTD|=(1<<i);Msleep(1000);}