Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zum Ansteuern von Ports/Programmierfrage
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
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
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 ;)
wenn ich jetzt aber eine variable habe, deren wert dem port entsprechen soll, wie kann ich das da machen?
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
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
for(i=0;i<=7;i++){PORTD|=(1<<i);Msleep(1000);}
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.