Hallo Die angefügte Datei soll nur dazu dienen per Tastendruck die Weckzeit einer Uhr zu stellen. Hier ein paar Rahmenbedingungen: Tasterport 7 6 5 4 3 2 1 0 1 1 --> z.B. Tasten 2 und 3 wurden gedrückt Die zu letzt gedrückten Tasten sind in "temp4" gespeichert Die Subroutine wird nur ausgeführt, wenn die Weckzeit auch ausgegeben wird! Das wird durch Bit 6 in "ind_flag" angezeigt. Jetzt zum Eigentlichen: wenn also die Weckzeitausgegeben wird, soll über Taster 2 eine Auswahl getroffen werden können, was an der Weckzeit verändert werden soll (momentan entweder Minuten oder Stunden) 1.Mal Drücken Taste 2 -->Wert 4 2.Mal Drücken Taste 2 -->Wert 2 Wenn man dann Taster 3 betätigt wird die jeweilige Größe (Minuten oder Stunden) inkrementiert Vorherige Auswahl von Taster 2 mit Taster 3 verknüpfen: also entweder Wert 4 + 1 oder Wert 2 + 1 Diese beiden Werte dienen nun als Entscheidungshilfe für den auszuführenden Programmteil das klappt soweit auch, ???--> allerdings wird, wenn ich jetzt Taster 2 ein drittes und viertes Mal drücke nicht auf die erste Stellgröße (Minuten einstellen) zurückgesprungen, sondern erst beim fünften Mal. Wodran mag das liegen?
Der Code war noch etwas durch Tabs gestört. also hier nochmal übersichtlicher.
Hi >alert_select: > lsr r16 > dec r16 > brne alert_select_01 > ldi r16, 2 <- r16 = 2 > lsl r16 <- r16 = 4 > sts dt_alert_select, r16 >alert_select_01: > lsl r16 <- r16 = 8 > sts dt_alert_select, r16 .... > add r17, r16 Bist du sicher, das das so gedacht ist? MfG Spess
Du solltest Dein Programm einfach halten. Gerade in Assembler sind Tricksereien undurchschaubar und Du stellst Dir nur selber ein Bein. Laß diese Schiebeorgien sein. Ich seh da jedenfalls nicht durch. Ein Zustandszähler zählt immer von 0 ... n-1 und bei n setzt Du ihn wieder auf 0. Bei n = 2, 4, 8 ... kannst Du auch maskieren: if( taste gedrückt ) state = (state + 1) and 1 Peter
spess53 schrieb: > Bist du sicher, das das so gedacht ist? Oh Mann ja klar das ist natürlich nicht so gemeint. Manchmal sieht man den Wald vor lauter Bäumen nicht. Es war aber auch schon ziemlich spät. ;) Deswegen hat ich dann auch als ich für r16 einfach mal weitaus höhere Werte verwendet habe, eine Bereichsverletztung! Peter Dannegger schrieb: > Ein Zustandszähler zählt immer von 0 ... n-1 und bei n setzt Du ihn > wieder auf 0. > Bei n = 2, 4, 8 ... kannst Du auch maskieren: > if( taste gedrückt ) state = (state + 1) and 1 Ok das ist aber doch eher etwas für ein C-Programm? Dieses "if taste gedrückt" wollte ich ja mit dem aktuellen Zustand + dem Wert für die Taste(2, 4 oder 6 z.B. + Taste gedrückt also 1, Taste 2 hat natürlich den Wert 4 deswegen 2mal shift right) Wie "inetwa" könnte eine alternative Methode aussehen? zum Zustandszähler: ich hatte gedacht, dass es eher von Vorteil ist ihn zu dekrementieren, da ich dann keine dezidierte "cp/cpi"-Anweisung benötige?
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.