Hallo, im Anhang habe ich eine für mich sehr komische if Verzweigung genutz. Geht das evtl. leichter, übersichtlicher oder sogar mit einer case Anweisung ? Wenn "Tick" zwischen zwei Werten liegt, dann ....? Desweiteren würde ich gerne wissen, od die Schreibweise der einzelnen Bit-setzen-löschen so ok ist. Und was ist mit den Definitionen im IO Init? Danke für Euere Hilfe !!! Gruß Toby
Hi, ich weurde es generell ein bischen anders machen. Erhoehe nur die Timer0_Cnt variable (bei dir Tick) .... Bei erreichen einer gewissen Zeit setzt du ein FLAG.... Das Flag fragst du im Hauptprg ab. Hier mal ein kleines Beispiel: SIGNAL(SIG_OVERFLOW1) { timer1cnt++; if(!(timer1cnt%20)) { event = EV_KEYSCAN; nKeyTime++; } if(!(timer1cnt%70)) { event = EV_LCDREFRESH; } } Main z.B. so : int main(void) { timer0_init; sei(); switch (event) { case EV_KEYSCAN: scankey(); break; case EV_LCDREFRESH: refresh(); break; } Mfg Dirk
Da Du nicht auf Gleichheit mit Konstanten überprüft, kann Dir ein switch/case-Statement nicht helfen. Etwas übersichtlicher würde das ganze durch Verwendung einiger returns und Weglassen vermutlich unnötiger Vergleiche, oder ist beabsichtigt, daß bei Tick==4, 29 & 34 die Funktion gar nichts macht? Ich vermute mal, daß Du da irgendwie mit dem else durcheinandergekommen bist. Außerdem ist der Vergleich if (Tick > 255) ohne Funktion, da tick ein uint_8 ist. Zuletzt noch sollte Tick initialisiert werden. Sieh' Dir mal das hier an: SIGNAL(SIG_OVERFLOW0) { static uint8_t Tick = 0; Tick++; if (Tick < 5) { PORTB |= ((1<<MEINBIT0)); return; } if (Tick < 30) { PORTB &= ~((1 << MEINBIT0)); return; } if (Tick < 35) { PORTB |= ((1<<MEINBIT0)); return; } PORTB &= ~((1 << MEINBIT0)); }
Hi Toby!
>>Wenn "Tick" zwischen zwei Werten liegt, dann ....?
Meinst du so ne Schreibweise ? Is auf jeden Fall übersichtlicher.
if (Tick < 5)
PORTB |= ((1<<MEINBIT0));
else if (Tick > 5 && Tick < 30)
PORTB &= ~((1 << MEINBIT0));
else if (Tick > 30 && Tick < 35)
PORTB |= ((1<<MEINBIT0));
else if (Tick > 35)
PORTB &= ~((1 << MEINBIT0));
Das Gegenteil von && (AND) ist || (OR).
MfG Axos
Hallo, und vielen dank für euere Hilfe. Ich habe erstmal Rufus Version eingesetzt. Damit bin ich scho sehr zufrieden. Die Flag Variante finde ich auch sehr Intressant, aber dazu muß ich mich erstmal weiter mit einzelnen Bits und Flöags beschäftigen. Axos, dir auch vielen dank. Mir ging es um eine übersichtliche Schreibweise, die habe ich nun, Danke !! Gruß Toby
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.