Hallo zusammen, ich wollte heute einen ganz einfachen Interrupt Zähler Programmieren. Dieser soll die Zahl, die auf dem Bildschirm ausgegeben wird bei jedem Tastendruck erhöhen. Komischerweise funktioniert es bei mir nicht, die 0 bleibt auf dem Bildschirm stehen, sie erhöht sich nicht und es scheint als ob der Bildschirm flackert, unter der Null kann man auch Stücken von zeichen flackern sehen. Kann vielleicht jemand einen Fehler erkennen?
Hallo, wenn ich es richtig sehe, gibst Du mit ldi temp, 0b00010000 ; Interrupt on Compare out TIMSK, temp einen Timer-Interrupt frei, zu dem es keine ISR gibt -> Absturz. Weiterhin dürfte Dein 'n' ziemliche Srünge durch Prellen des Tasters machen. Ansonsten fehlt das Retten und Wiederherstellen des SREG in der Interruptroutine. Wenn da z.B. der Interrupt ausgelöst wird delay5ms: ; 5ms Pause ldi temp1, ( XTAL * 5 / 607 ) / 1000 WGLOOP0: ldi temp2, $C9 WGLOOP1: dec temp2 ->> IRQ brne WGLOOP1 dec temp1 ->> IRQ brne WGLOOP0 ret ; wieder zurück ist das Z-Flag durch den inc-Befehl in der ISR u.U. verändert und die delay5ms macht alles andere als 5ms... Gruß aus Berlin Michael
Ok, habe die sachen mal so gut ich konnte verändert. Die Timer Initialisierung habe ich verher vergessen zu entfernen. Hier ist der nochmal überarbeitete Code, er funktioniert auch wie er soll. Vielen Dank für eure Hilfe!!!
So, ich habe den Interrupt Zähler jetzt mal so umprogrammiert, dass er auch Zehnerstellen ausgeben sollte. Dabei habe ich alles wie vorher belassen, ich rechne aber in der Ausgabeschleife noch die Zehner und Einerstellen aus. Jetzt flackert aber der Bildschirm wieder, und auf der Erste Stelle zählen ganz schnell irgendwelche Zeichen hoch. Langsam geht meine Geduld zuende. Findet jemand vielleicht einen Fehler?
Habe mein Problem jetzt selber gefunden. Nun läuft mein Programm. Einmal muss ich SREG am Anfang jeder Prozedur sichern und vor dem Aufrufen des lcd_data befehls wiederherstellen. Außerdem muss ich nach jeder Dezimal-Ausgabe-Schleife die vorher errechneten Werte löschen, da sonst im nächsten Durchlauf etwas zum vorher errechneten Wert addiert wird. Hier ist noch das funktionierende Programm, dass bis 99 zählen kann. Mit dem Prellen der Tasten habe ich übrigens kein problem.
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.