Cheffe Boss
02.08.2013, 13:38
Hallo,
versuche mich in Micro-Controller Programmierung.
Schon am Anfang habe ich eine Frage.
Warum funktioniert dieses Programm nicht?
while (1)
{
PORTA=(1<<PORTA0)|(1<<PORTA3);//rot anmachen
delay_ms(3000); //warten 3sec
PORTA=(1<<PORTA1)|(1<<PORTA4) //gelb dazu anmachen <-- wird zwar gemacht aber rot geht aus
// PORTA=(1<<PORTA1)|(1<<PORTA4)|(1<<PORTA0)|(1<<PORTA3); <---das hingegen funktioniert
delay_ms(1000); //warten 1sec
PORTA=(0<<PORTA0)|(0<<PORTA3); //Rot und
PORTA=(0<<PORTA1)|(0<<PORTA4); //gelb ausmachen
PORTA=(1<<PORTA2)|(1<<PORTA5); //Grün anmachen
delay_ms(3000) ; //Warten 3sec
PORTA=(1<<PORTA1)|(1<<PORTA4)|(1<<PORTA2)|(1<<PORTA5); //Gelb anmachen <--dito
delay_ms(1000); //Warten 1 sec
PORTA=(0<<PORTA2)|(0<<PORTA5); //grün ausmachen
}
Ganz einfache Schaltung: Rot-> 3 sek->Gelb DAZU->1 sek->Rot u. Geld aus->Grün->3 sek->Gelb dazu->1 sek Grün und Gelb aus.(Das ganze zwei mal,zwei Ampeln quasi)
Mein Problem ist in der Zeile Nummer 5(für Grün dito). Rot ist schon an,ich will nun Geld dazu schalten.Gelb wird auch zugeschaltet,aber leider geht dann Rot aus.
Ist das die Eigenschaft von Controllern?Oder mache ich einen Denkfehler?
Vielen Dank!
P.S: Ich schreibe in CodevisionAVR für Mega16. Als Simulator benutze ich Proteus. Leider habe ich noch keine Hardware (ist aber bestellt).Liegt es vlt an der Simulation?Wird das ,so wie ich das will, auf der echten Hardware funktionieren?
EDIT: Ach nun ist mir das wohl von alleine klar geworden:)so ziemlich direkt nach dem klicken auf "Abschicken"....
PORTA=(1<<PORTA0)|PORTA=(1<<PORTA1)
ist wohl nichts anderes als
PORTA=0b00000011;
Deswegen setzt die Zeile Nummer 5 die beiden Ports von ROT wieder auf 0..
Liege ich damit richtig?
Also bleibt als Lösung immer neu zuweisen ?
PORTA=(1<<PORTA1)|(1<<PORTA4)|(1<<PORTA0)|(1<<PORTA3);
versuche mich in Micro-Controller Programmierung.
Schon am Anfang habe ich eine Frage.
Warum funktioniert dieses Programm nicht?
while (1)
{
PORTA=(1<<PORTA0)|(1<<PORTA3);//rot anmachen
delay_ms(3000); //warten 3sec
PORTA=(1<<PORTA1)|(1<<PORTA4) //gelb dazu anmachen <-- wird zwar gemacht aber rot geht aus
// PORTA=(1<<PORTA1)|(1<<PORTA4)|(1<<PORTA0)|(1<<PORTA3); <---das hingegen funktioniert
delay_ms(1000); //warten 1sec
PORTA=(0<<PORTA0)|(0<<PORTA3); //Rot und
PORTA=(0<<PORTA1)|(0<<PORTA4); //gelb ausmachen
PORTA=(1<<PORTA2)|(1<<PORTA5); //Grün anmachen
delay_ms(3000) ; //Warten 3sec
PORTA=(1<<PORTA1)|(1<<PORTA4)|(1<<PORTA2)|(1<<PORTA5); //Gelb anmachen <--dito
delay_ms(1000); //Warten 1 sec
PORTA=(0<<PORTA2)|(0<<PORTA5); //grün ausmachen
}
Ganz einfache Schaltung: Rot-> 3 sek->Gelb DAZU->1 sek->Rot u. Geld aus->Grün->3 sek->Gelb dazu->1 sek Grün und Gelb aus.(Das ganze zwei mal,zwei Ampeln quasi)
Mein Problem ist in der Zeile Nummer 5(für Grün dito). Rot ist schon an,ich will nun Geld dazu schalten.Gelb wird auch zugeschaltet,aber leider geht dann Rot aus.
Ist das die Eigenschaft von Controllern?Oder mache ich einen Denkfehler?
Vielen Dank!
P.S: Ich schreibe in CodevisionAVR für Mega16. Als Simulator benutze ich Proteus. Leider habe ich noch keine Hardware (ist aber bestellt).Liegt es vlt an der Simulation?Wird das ,so wie ich das will, auf der echten Hardware funktionieren?
EDIT: Ach nun ist mir das wohl von alleine klar geworden:)so ziemlich direkt nach dem klicken auf "Abschicken"....
PORTA=(1<<PORTA0)|PORTA=(1<<PORTA1)
ist wohl nichts anderes als
PORTA=0b00000011;
Deswegen setzt die Zeile Nummer 5 die beiden Ports von ROT wieder auf 0..
Liege ich damit richtig?
Also bleibt als Lösung immer neu zuweisen ?
PORTA=(1<<PORTA1)|(1<<PORTA4)|(1<<PORTA0)|(1<<PORTA3);