Moin!
Ich weiß nicht warum, aber er kommt komischerweise nicht mehr von der
Methode sFlanke() zurück zur main. Das merk ich daran, dass er den
letzten Befehl in der main nicht ausführt. Es muss am Programm liegen,
weil der Atmega8 mit einem anderen funktioniert.
#include <avr/io.h>
unsigned char pb;
int sFlanke() {
if (!(PIND & (1 << PD2))) {
pb = 1;
return 0;
} else if (pb == 1) {
pb = 0;
return 1;
} else {
return 0;
}
}
int main() {
DDRD = 0b11100011;
pb = 0;
while (1) {
if (sFlanke()) {
PORTD = 0xFF;
}
PORTD = 0xFF;
}
}
Pascal S. schrieb: > if (sFlanke()) { > PORTD = 0xFF; > } > PORTD = 0xFF; was soll das sein? PORTD wird immer auf 0xFF gesetzt egal ob das if erfolgreich war oder nicht. Wie du hier etwas sehen willst ist mir nicht ganz klar.
Das ist es ja. PORTD sollte laut dem Programm auf 0xFF gesetzt werden Da passiert aber nichts. Wenn ich die If Anweisung drunter setzt, wird PORTD auf 0xFF gesetzt. Das bedeutet, dass er in der Methode iwie hängen bleiben muss.
Simulator? Ich verwende Eclipse mit dem AVR PlugIn. Da gibts soweit ich weiß keinen Simulator. Aber ist eine gute Idee. Beim AVR Studio ist einer dabei oder? Dann probier ich das mal aus.
So, hab das jetzt mal mit dem Simulator getestet. Nach dem return Befehl in der Methode springt er ans ende der Methode und dann zurück zur Main. Ist das normal mit dem an das Ende der Methode springen?
Ist ziemlich normal. Die meisten Compiler verlagern die Aufräumarbeiten am Ende einer Funktion an einen gemeinsamen Ort und springen den an, ehe es zurück geht.
Hm, habe jetzt mal nach langem Rumprobieren den Atmega ausgetauscht, jetzt funktionierts :) Komisch, dann scheint der wohl nicht mehr richtig zu funktionieren.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.