Es werden zwei Taster an P2.0 bzw. P2.1 verwendet, welche mit der H/L-Flanke jeweils ein Unterprogramm auslösen. Taster 2.0 startet das eigentliche Programm und P2.1 legt den µC schlafen, nachdem ein bestimmter Wert( hier Sektor) im Info-Speicher abgespeichert wurde. Der Startvorgang (mit 2.0)darf nicht zweimal hintereinander ausgeführt werden, sondern es soll erst der Taster 2.1 bedient werden. Hat jemand eine Idee, wie das Problem gelöst werden kann? Hier ein Ausschnitt aus meinem Programm: int main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer P2IE = 0x83; // an P2.0, P2.1+ P2.7 Interruptfreigabe P2IES = 0x83; // auf H/L Flanke an P2.0, P2.1 , P2.7 _BIS_SR (LPM4_bits + GIE); // wartet auf Tasteneingabe for(;;); } interrupt (PORT2_VECTOR)Taste (void) //nicht vergessen: //#include <signal.h> { if ((P2IFG&BIT0) == BIT0) // neuen Start auslösen { P2IFG&=~BIT0; EKGstart(); } if ((P2IFG&BIT1) == BIT1) { P5OUT &=~BIT6; // LED EIN als Kontrolle Sektorzahl_speichern(); P2IFG&=~BIT1; _BIS_SR (LPM4_bits + GIE); // schaltet µC ab RAM bleibt erhalten } } MfG Wolfgang
Hallo, ich würde einfach nach dem Betätigen des Tasters an P2.0 ein Bit setzen, welches Du in Deiner Abfrage mit abfragst. In der Routine für's Schlafenlegen wird dann dieses Bit wieder zurückgesetzt. Quasi so (kein Quelltext!): taster2_gedrueckt = 0; wenn taster2 gedrueckt UND taster2_gedrueckt == 0 { mache was... taster2_gedrueckt = 1; ... } wenn taster1 gedrueckt { mache was... taster2_gedrueckt = 0; ... } Damit dürfte es gehen. Ob es ganz besonders schick ist, weiß ich nicht. Das müssen die Profis beurteilen...
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.