ATMega8: Pinabfrage nach ext. Interrupt

Gast #132293
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
Gast
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.
Gast
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
Gast
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
Gast
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.