Forum: Mikrocontroller und Digitale Elektronik interrupt will nicht


von Anfänger1 (Gast)


Lesenswert?

Hallo,
habe mich an interrupts probiert und jetzt das problem dass die Befehle 
EIMSK und ISR (INT0_vect) nicht erkannt werden.
Hier der Programmauschnitt:

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdlib.h>
#include "lcd.h"


/* Der CPU-Takt wird definiert; Dieser entspricht der Frequenz des 
Quarz. */
#define F_CPU 3686400UL


/* Start des Programmes. */
int main(void) {

EIMSK = (1<<INT0);
    sei();

  ISR (INT0_vect) // Interrupt Service Routine für externen Interrupt 
INT0
    {
      Menue++;
    _delay_ms(100); // kurzes delay zum "Entprellen"
    }


  DDRD &= ~(1 << DDD2);     // Int0-Pin ist Eingang
    PORTD |= (1 << PORTD2);   // Pullup aktiv



    // Hier folgen die Konfigurationen zum externen Interrupt INT0
  MCUCR |= (1 << ISC01);    // INT0 trigger bei fallender Flake an PD2
    GICR |= (1 << INT0);     // INT0 aktivieren


  lcd_init();    // LCD wird initialisiert, angeschaltet und gelöscht.
  lcd_on();
  lcd_clear();
  lcd_write_s("Drahtmessung");

    DDRC= 0x00;  //Alles Eingänge
  PORTC= 0xFF;
  DDRB=0b11111110;  //Alles Ausgänge
  PORTB=0b11111110;

von Frank L. (hermastersvoice)


Lesenswert?

die ISR in der Main? Hattest du die Idee selbst?

von Anfänger1 (Gast)


Lesenswert?

Habe das aus einer Vorlage unseres Lehrers und deshalb so übernommen.
Wo gehört es denn hin?

von Norbert (Gast)


Lesenswert?

Anfänger1 schrieb:
> Habe das aus einer Vorlage unseres Lehrers und deshalb so übernommen.
> Wo gehört es denn hin?

Wenn das von deinem Lehrer kommt, dann solltest du ihn besser mal hier 
vorbeischicken.

von Anfänger1 (Gast)


Lesenswert?

Ja aber was muss ich denn da jetzt machen. Die Befehle EIMSK und ISR 
(INT0_vect) werden nicht als befehle erkannt sonder beim übersetzen als 
fehlende variablen erkannt

von Harald (Gast)


Lesenswert?

> Habe das aus einer Vorlage unseres Lehrers und deshalb so übernommen.

Unwahrscheinlich.

von HildeK (Gast)


Lesenswert?

Anfänger1 schrieb:
> Ja aber was muss ich denn da jetzt machen.

Die ISR z.B. vor main setzen - außerhalb!

Zu EIMSK kann ich nichts sagen. Kann sein, dass es das nicht bei jedem 
AVR unter dem Namen gibt. Welchen μC verwendest du?

von c-hater (Gast)


Lesenswert?

HildeK schrieb:

> Zu EIMSK kann ich nichts sagen. Kann sein, dass es das nicht bei jedem
> AVR unter dem Namen gibt.

Das ist definitiv so.

> Welchen μC verwendest du?

Quäl' ihn doch nicht mit solchen Details. Zusammengeklauter und 
unverstandener Code muss einfach auf jedem µC funktionieren. C ist doch 
PORTABEL!

von Anfänger1 (Gast)


Lesenswert?

Atmega 8

von aswqaswqa (Gast)


Lesenswert?

Anfänger1 schrieb:
> dass die Befehle
> EIMSK und ISR (INT0_vect) nicht erkannt werden.

Das ist schon in Ordnung so, da weder EIMSK noch ISR (INT0_vect) Befehle 
sind.
Allerdings frage ich mich schon, warum sich jemand
> an interrupts probiert
der nicht im Ansatz verstanden hat, um was es bei Interrupts geht.



aswqaswqa

von HildeK (Gast)


Lesenswert?

Anfänger1 schrieb:
> Atmega 8

Dann nimm dir mal das Datenblatt vom Mega8 zur Brust und studiere das 
Kapitel über den INT0.
Ich konnte jedenfalls kein EIMSK in dem finden, also gibt es das auch 
nicht.

von aswqaswqa (Gast)


Lesenswert?

HildeK schrieb:
> Dann nimm dir mal das Datenblatt vom Mega8 zur Brust und studiere das
> Kapitel über den INT0.

Ich glaube eher, dass der Einstieg hier besser klappt.

https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Programmieren_mit_Interrupts

aswqaswqa

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.