Guten Abend! Ich habe mal etwas mit Assembler-Mikrocontroller-Programmierung angefangen. Als Grundlage habe ich den 90S2313 von Atmel. Ich habe ein Programm, welches mittels Timer LEDs blinken lässt. Über eine Taste will ich jetzt den Timer deaktivieren und wieder aktivieren können. Das deaktivieren klappt ja noch, der Timer hält an, aber das anschließende aktiveren geht einfach nicht mehr. Die Routine "on" wird gar nicht erst aufgerufen. Als Anhang hab ich die dazugehörige asm-Datei dran gepackt, vielleicht kann ja jemand helfen. MfG Ilon
Hi, verwendest Du an Deinem Schalter einen externen PullUp-Widerstand? Sonst versuch 'mal nach der DDR-Initializierung noch folgendes: ldi r16,0xFF out PortD,r16 So aktivierst Du die internen PullUps von PortD. Sebastian
auf den ersten Blick folgender grober Schnitzer: on: push temp ldi temp, 0b00000101 out TCCR0, temp pop temp ret //führt aus der INT0-Routine zurück, ohne das I-Flag wieder zu setzen off: push temp ldi temp, 0 out TCCR0, temp pop temp ret int0_handler: in temp, TCCR0 cpi temp, 0 breq on ; entweder dahin brne off ; oder dahin reti ;hier kommst du nie an mit der Folge, das das I-Flag niemals gesetzt wird und damit auch niemals ein weiterer Int bearbeitet werden kann. Ausserdem solltest du in ISRs immer das SREG sichern.
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.