Forum: Mikrocontroller und Digitale Elektronik Atmega 48 Externer Interrupt löst Anfangs aus


von Benny (Gast)


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;


}

von Benny (Gast)


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
}

von Hc Z. (mizch)


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.

von Benny (Gast)


Lesenswert?

Ok, weil im Datenblatt stand drin, dass ich das brauchen würde. Dann 
habe ich es mal reingemacht.

Danke :)

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
Noch kein Account? Hier anmelden.