Hallo, ich mache gerade mein erstes Projekt mit einem ATMega8 und habe da grad ein Problem: Ich habe einen Schalter an GND mit Pull-Up Widerstand 10k an + an den INT1-Pin des Controllers angeschlossen. Den Interrupt habe ich auf fallende Flanke konfiguriert. In dieser Interrupt-Routine macht der µC etwas anderes, bis der Schalter wieder geöffnet ist. Bei Betätigung des Schalters komme ich auch in meinen Interrupt, nur leider nicht wieder heraus. Komischerweise funktioniert das im AVR-Simulator korrekt. Hier mal die Auszüge aus meinem Programm: ldi temp, 0xf0 ; PD0-PD3 als Eingänge out DDRD, temp ; Interrupt-Routine isr_ext1: cli ; Interrupts ausschalten loop: sbic PORTD, 3 ; wenn Schalter geöffnet, Routine verlassen rjmp ende_isr ...was anderes machen... rjmp loop ende_isr: reti Der Schalter müsste natürlich noch entprellt werden, aber selbst so komme ich aus dem Interrupt nicht mehr raus. Hab ich was übersehen? Danke, Thomas
ersetze mal sbic PORTD, 3 durch sbi*s* PORTD ,3 Du fragst auf gelöschtes Bit - also "0"(Taste gedrückt) - ab, willst aber bei "1"(Taste losgelassen) zum RETI.
Quatsch !! (ist schon früh) Weiß jetzt auch nicht mehr...............
kannste noch etwas mehr quelltext von dir geben? inits und irq-vectors und soviel du geben willst ;) das cli kannste weglassen.. bei einer isr wird das i-flag immer gelöscht... dave
LOL.... ==> noch nen fehler: das register ist PINd und nicht PORTd... PORTd ==> PORTd ist eigentlich da immer 0... kannste lange probieren bei aktivierten eingängen kannste ne 1 in das port-register schreiben und dann werden die pullups aktiviert... also... mach als init: ldi temp, 0xf0 ; PD0-PD3 als Eingänge out DDRD, temp ldi temp, 0x0f ; pullups für eingänge aktiviern out PORTD, temp und: sbic PIND, 3 ; wenn Schalter geöffnet, Routine verlassen rjmp ende_isr
Aua danke, da hatte ich aber was auf den Augen... Auf jedenfall funktioniert es mit dem PIND bei den Eingängen jetzt. Bin halt etwas 8051 verwöhnt denn da gibt es diese Unterscheidung zwischen Ein- und Ausgabe ja nicht. Aber so hat halt jeder Controller seine Vor und Nachteile. Thomas
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.