Atmega 48 Externer Interrupt löst Anfangs aus

Gast #1887524
Lesenswert?

Hallo, und zwar folgendes.

Wenn ich beim Atmega den Int1 ausgang als externen Interrupt definiere, 
löst dieser direkt nach dem Starten des Controllers ein mal aus.
Das soll er aber nicht.


Hier mal der Code

Warum wird der Interrupt Handler aufgerufen?
[c]


ISR(INT1_vect)
{

//Test
PORTB |= (1<<1);


}


int main(void)
{

//Ausgänge
DDRB = 0xFF;
DDRD |= (1<<4);
//Pullup
PORTD |= (1<<3);
PORTC |= (1<<2);



//Externer Interrupt
EIMSK |= (1<<1);
SREG |= (1<<7);
EICRA |= (1<<ISC10) | (1<<ISC11);

sei();




    while(1)
    {


    }
    return 0;


}
Gast #1887525
Lesenswert?

Sorry hier der Code noch mal lesbarer
1
ISR(INT1_vect)
2
{
3

4
//Test
5
PORTB |= (1<<1);
6

7

8
}
9

10

11
int main(void)
12
{
13

14
//Ausgänge
15
DDRB = 0xFF;
16
DDRD |= (1<<4);
17
//Pullup
18
PORTD |= (1<<3);
19
PORTC |= (1<<2);
20

21

22

23
//Externer Interrupt
24
EIMSK |= (1<<1);
25
SREG |= (1<<7);
26
EICRA |= (1<<ISC10) | (1<<ISC11);
27

28
sei();
29

30

31

32

33
    while(1)
34
    {
35

36

37
    }
38
    return 0;
39

40

41
}
#1887536
Lesenswert?

Du solltest direkt vor dem sei() das Interrupt-Flag löschen
1
EIFR |= 1<<INT1;


Du solltest außerdem das rausschmeißen:
1
SREG |= (1<<7);
denn das ist ein sei(), nur sehr umständlich ausgedrückt.  Und der 
gehört nicht an diese Stelle, da die Initialisierung noch nicht 
abgeschlossen ist.

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