Interupt löst nicht aus, was mach ich falsch?

Gast #1395535
Hi

Ich benutze einen ATmega48.
Hier mein "Test Code".
1
#define  F_CPU 8000000
2
#include <stdio.h>
3
#include <avr\io.h>
4
#include <avr\interrupt.h>
5
#include <util\delay.h>
6

7
#define sbi(ADDRESS,BIT) ((ADDRESS) |= (1<<(BIT)))
8
#define cbi(ADDRESS,BIT) ((ADDRESS) &= ~(1<<(BIT)))
9

10
//--------------------------------------------------------------------
11
// INT0_vect - INT0 Interrupt an Eingang PORTD2 bei fallender Flanke
12
//--------------------------------------------------------------------
13
SIGNAL(SIG_INTERRUPT0)
14
{
15
  PORTC = 0b00000001;
16
}
17
//--------------------------------------------------------------------
18
// INT1_vect - INT1 Interrupt an Eingang PORTD3 bei fallender Flanke
19
//--------------------------------------------------------------------
20
ISR(INT1_vect)
21
{
22
  PORTC = 0b00000001;
23
}
24
//--------------------------------------------------------------------
25
// TIMER0_OVF_vect - Timer0 Interrupt bei Überlauf
26
// aktuelle Einstellung:  14.063 Hz  71.111 ms
27
//--------------------------------------------------------------------
28
ISR(TIMER0_OVF_vect)
29
{
30
  TCNT0 = 248;
31
}
32
//------------------------------------------------------------------------
33
// Initialisierungen
34
//------------------------------------------------------------------------
35
void init()
36
{
37
  // Ports initialisieren
38
  cbi(DDRD,2);   // PORTD2 auf Eingang mit PullUp
39
  sbi(PORTD,2);
40
  EIMSK|=0b01000000;   // INT0 Interrupt an Eingang PORTD2 bei fallender Flanke
41
  MCUCR|=0b00000010;
42
  cbi(DDRD,3);   // PORTD3 auf Eingang mit PullUp
43
  sbi(PORTD,3);
44
  EIMSK|=0b10000000;   // INT1 Interrupt an Eingang PORTD3 bei fallender Flanke
45
  MCUCR|=0b00010000;
46
  //--- Timer 0 initialisieren ---
47
  TCCR0B =0x05;   // Teiler 1/1024
48
  sbi(TIMSK0,0);   // Interrupt bei Überlauf
49
  TCNT0 = 248;
50
  //--- Interrupts erlauben ---
51
  sei();
52
}
53

54
/////////////////////////////////////////////////////////////////////////////
55
// Main-Funktion
56
/////////////////////////////////////////////////////////////////////////////
57
main()
58
{
59
  DDRC=0xff;
60
  PORTC=0;
61

62

63
  while (true)    // Mainloop-Begin
64
  {
65
    
66
    //...
67
  }
68
  // Mainloop-Ende
69
}

Nur warum lösen die Interupts nicht aus?

gruß
#1395649
Wieder mal ein Fall von "wäre nicht passiert, wenn man die symbolischen 
Namen verwendet hätte, statt irgendwelcher Zahlenkonstanten". Du setzt 
in EIMSK die falschen Bits.

Außerdem: was soll beim Mega48 MCUCR mit Int0/1 zu tun haben?
#1399355
Bin noch relativ unerfahren was Timer und Interupts angeht, hab die 
großen unterschiede zwischen dem Mega8 und Mega48 unterschätzt...
Hab jetzt wieder nen Mega8 das Programm nochmal überarbeitet und läuft 
nun so wies soll.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 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.