Interrupt INT0/INT1 bei Atmega8

Gast #1200627
Lesenswert?

Hi!

Bin ein Neuling betreffend µCs.
Wollte bei meinem Atmega8 mit den externen Interrupts experimentieren.
Ich verwende das "Atmel Evaluations-Board Version 2.0.1" von Pollin.

Code rüberspielen ist kein Problem. Aber da ist noch irgend ein 
logischer Fehler oder es fehlt irgendetwas. Liegt das am MCUCR? Habe 
versucht auf "Any logical change on INTx generates an interrupt request" 
zu stellen -- ISCx1 = 0, ISCx0 = 1.

Ich will per Tastendruck eine der zwei LEDs auf dem Board ausschalten.
Die Spannungspegel kommen auch am Controller an.
Also muss wohl oder übel ein Fehler im Code sein. peinlich :)

Hoffe ihr könnt mir helfen!
Danke im Voraus

Peter
Angehängte Dateien:
Gast #1200661
Lesenswert?

@jussa
Alles klar, okay danke. "GICR" könnte der richtige Weg sein.
Frank war neulich hier an meinem Rechner und ich hab nicht drangedacht, 
dass ich den Namen noch oben ändern muss.

@stephan-
Das ist momentan nur zum Debuggen. Da kommt später schon ein sauberer 
high/low-Pegel von einem IC hin. Bis jetzt hab ich eh nur hardwareseitig 
entprellt.
#1216548
Lesenswert?

Hätte auch eine Frage zum Interrupt, programmiere in Assembler mit dem 
AtMega16 und irgendwie bekomm ich das nicht hin. Habe BTN7 an PD3 
angeschlossen und die LEDS an PD0:3. Ohne Interrupts kann ich die LEDS 
ganz normal ansteuern, beim Interrupt gibts halt Probleme:

.NOLIST
.INCLUDE "m16def.inc"
.LIST


.equ temp, 0x10
.equ leds,  0x11


.section    .text


.org 0x0000

    rjmp main


.org INT1addr

    jmp EXT_INT1



main:

      ldi      temp, lo8(RAMEND)
     out     SPL, temp
     ldi       temp, hi8(RAMEND)
     out     SPH, temp

      ldi     temp, 0x00
      out   DDRD, temp
      ldi     temp, 0xFF
      out   DDRC, temp
      ldi     temp, 0XFF
      out   PORTD, temp


      ldi      temp, 0b00001000
      out     MCUCR, temp
      ldi      temp, 0b10000000
      out     GICR, temp

      sei


infinite_loop:

        rjmp infinite_loop

EXT_INT1:
        ldi    temp, 0XFF
       out   PORTC, temp
        reti



Vielleicht kann mir ja jemand helfen, sitz schon Ewigkeiten herum und 
mir fällt nichts mehr ein.

Lg
Gast #1216558
Lesenswert?

Hi

>Ohne Interrupts kann ich die LEDS ganz normal ansteuern, beim Interrupt >gibts 
halt Probleme:....

1.Welche?

2.    ldi      temp, 0b00001000
      out     MCUCR, temp
      ldi      temp, 0b10000000
      out     GICR, temp

Schreibe mal lieber 'ldi tmp, 1<<xyz' Mit der Bitbezeichnung xyz. Ist 
sicherer und auch ohne Datenblatt lesbar.


MfG Spess
#1216663
Lesenswert?

Mark Drobnick wrote:
> .equ temp, 0x10
> .equ leds,  0x11
> [...]
>       ldi     temp, 0x00
Du solltest Dich vielleicht mal erkundigen, was .equ überhaupt macht! Es 
macht jedenfalls nicht das, was Du vermutlich denkst...

Abgesehen ist das mit dem .equ syntaktisch falsch (und kann deshalb 
schon mal gar nicht assemblieren).
#1216673
Lesenswert?

Habs jetzt hinbekommen, das einzige was ich geändert hab war ein mal 
zwei bei INT1addr, also ".org INT1addr * 2", weil die vordefinierten 
Adressen anscheinend Word Format haben und der Assembler Byte haben 
will.

Mit dem assemblieren hatte ich keine Probleme. Wie hätt ich das mit dem 
.equ besser machen sollen?

lg

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren