www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interupt löst nicht aus, was mach ich falsch?


Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

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

//--------------------------------------------------------------------
// INT0_vect - INT0 Interrupt an Eingang PORTD2 bei fallender Flanke
//--------------------------------------------------------------------
SIGNAL(SIG_INTERRUPT0)
{
  PORTC = 0b00000001;
}
//--------------------------------------------------------------------
// INT1_vect - INT1 Interrupt an Eingang PORTD3 bei fallender Flanke
//--------------------------------------------------------------------
ISR(INT1_vect)
{
  PORTC = 0b00000001;
}
//--------------------------------------------------------------------
// TIMER0_OVF_vect - Timer0 Interrupt bei Überlauf
// aktuelle Einstellung:  14.063 Hz  71.111 ms
//--------------------------------------------------------------------
ISR(TIMER0_OVF_vect)
{
  TCNT0 = 248;
}
//------------------------------------------------------------------------
// Initialisierungen
//------------------------------------------------------------------------
void init()
{
  // Ports initialisieren
  cbi(DDRD,2);   // PORTD2 auf Eingang mit PullUp
  sbi(PORTD,2);
  EIMSK|=0b01000000;   // INT0 Interrupt an Eingang PORTD2 bei fallender Flanke
  MCUCR|=0b00000010;
  cbi(DDRD,3);   // PORTD3 auf Eingang mit PullUp
  sbi(PORTD,3);
  EIMSK|=0b10000000;   // INT1 Interrupt an Eingang PORTD3 bei fallender Flanke
  MCUCR|=0b00010000;
  //--- Timer 0 initialisieren ---
  TCCR0B =0x05;   // Teiler 1/1024
  sbi(TIMSK0,0);   // Interrupt bei Überlauf
  TCNT0 = 248;
  //--- Interrupts erlauben ---
  sei();
}

/////////////////////////////////////////////////////////////////////////////
// Main-Funktion
/////////////////////////////////////////////////////////////////////////////
main()
{
  DDRC=0xff;
  PORTC=0;


  while (true)    // Mainloop-Begin
  {
    
    //...
  }
  // Mainloop-Ende
}

Nur warum lösen die Interupts nicht aus?

gruß

Autor: Thomas K. (muetze1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
init() wird nicht aufgerufen?

Warum verwendest du eigentlich die alte Schreibweise bei den ISR?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Nur warum lösen die Interupts nicht aus?

Weil du init() nicht aufrufst.

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ups, doch mach ich, hab zuviel aus dem Originalprogramm rausgelöscht...

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Timer läuft, es geht nur um INT0 und INT1.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Tobi K. (tobidel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.