Hallo, Versuche gerad ein Programm zu erstellen, welches nur auf steiegende Flanken reagiert, aber ohne Interrupts. Ich habe in etwa so etwas vorgestellt. //Watchdog while(PIND.3 = ~ PIND.3) { .... }; also er sollte nur auf Flanken des PIND 3 achten. Funktioniert so etwas prinzipiell??? Gruß TIM
nö, zumindest nicht sicher. Die while-Schleife beinhaltet ja neben dem Vergleich einen Sprung. Und wenn nach dem 1.Vergleich, aber vor dem 2.Vergleich sich der Zustand ändert, bommst du es nicht mit. AUsserdem ist der =Operator hier fehl am Platze. Ehe wir uns den Kopf weiter zerbrechen, solltest du mal kurz darlegen, waruum keinen Interrupt? Die sind nämlich dafür da, auf Ereignisse zu reagieren, statt den armen MC ständig im Kreis zu schicken und damit zu blockieren.
Ja also unter umständen kann ich`s auch mit interrupts machen. Ich wollte Daten (1 oder 0) über PIND2 einlesen aber nur bei einer steigenden Flanke von PIND3. Habs gerad mit Interrupt porbiert, aber ich glaub das problem liegt hier beim Array das ich nutze hier mal mein interrupt ------------------------- interrupt [EXT_INT1] void ext_int1_isr(void) { index++; if(PIND &(1<<2)) zeichen[index]='I'; if (!(PIND &(1<<2))); zeichen[index]='O'; } Freigeschaltet ist die Routine auch. Wenn nun der index 52 erreicht sollen die Daten per UART ausgegeben werden In etwa so --------------------- for (i=1;i==52;i++) { if (UCSRA &(1<<5)) { putchar(zeichen[i]); delay_ms(50); } } diese For Schleife steht aber im Main-Teil. Achso "zeichen" und "index" sind natürlich global Nutze den Tiny2313+ STK500 bei 16MHz + Codevision. Danke schon mal für die schnelle Antwort
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.