mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Eingang für Interrupt_Unterprogramm


Autor: Hua Guo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Wie kann man den Eingang für ein Unterprogramm von Interrupt mit C
schreiben?
vielen Dank!

Hua

Autor: Hubert Gschwandtner (huvogs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Je nach dem wodurch der Interrupt ausgelöst wurde, für ADC z.B.:
ISR(ADC_vect){} nachzulesen in der AVR-libc Modules.

Autor: Hua Guo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank!
Jetzt benutze ich Atmega8. Die Interrupt Vector No. ist 3, Programm
Addresse ist 0x002.
Wie kann ich meine Interrupt_Programm mit diese Interrupt Vector
Verbindung machen?

Autor: Hubert Gschwandtner (huvogs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ISR(INT1_vect){}

Autor: Hua Guo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Entschuldigung ich bin eine Anfangin.
Welche Headdatei soll ich include?
vielen vielen Dank!

Autor: Hubert Gschwandtner (huvogs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#include <avr/interrupt.h>
#include <avr/io.h>

Autor: Hua Guo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ISR(INT1_vect)
{
  USART_TransmitString(" externe Interrupt happend ", 27);
  return;
}

int main(void)
{
  USART_Init(9600);
  SREG = 0x80;
  MCUCR = (1<<ISC11) | (1<<ISC10);
  GICR = (1<<INT1);
  for(;;);
}

Bei mir funktioniert noch nicht.
Wenn ein Interrupt happend, kann ich keine Ergebnisse bekommen. Welche
Fehler habe ich gemacht?
Vielen Dank!

Autor: Hubert Gschwandtner (huvogs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In der ISR ein Port mit einer LED dran setzen dann sieht man ob der
Interrupt oder der USART nicht funktioniert.
Der PIN PB3 ist der Eingang: The rising edge of INT1 generates an
interrupt request.

Autor: Hua Guo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe ein anderes Programm für diesen Interrupt, es benutzt nicht
ISR, sonder lese direkt die Interrupt Falg Bit.

int main(void)
{
  USART_Init(9600);
  MCUCR = (1<<ISC11) | (1<<ISC10);
  GICR = (1<<INT1);
  while(!(GIFR & (1<<INTF1)));
  USART_TransmitString(" externe Interrupt happend ", 27);
  for(;;);
}

Es funktioniert. Das bedeutet, wenn die Schalter einschaltet, tretet
ein Interrupt und funktioniert der USART auch.
Ich denke, es gibt irgentwo Fehler in meinem Interrupt_Programm.

Soll ich "INT1_vect" selbst definieren? Oder für boot soll ich etwas
machen? Oder......?

Und ich wollte noch fragen, welcher Port ist "ein Port in der ISR"?
Vielen Danke!

Autor: Hubert Gschwandtner (huvogs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Diese Schreibweise "ISR(INT1_vect)" gilt erst ab GCC.Version 4.x, bei
einer älteren Version muss es heißen: zusätzlich
#include <avr/signal.h>
 und anstelle von ISR(INT1_vect) gehört:
SIGNAL(SIG_INTERRUPT1)

Autor: Hua Guo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wunderbar! Es funktioniert! herzlichen besten Dank!

Ich wollte noch fragen, benutzt man SIGNAL auch für Interrupt? Welche
Unterschied gibt es zwischen ISR und SIGNAL?

Autor: Hubert Gschwandtner (huvogs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ISR heist es ab GCC_Version 4.x
Vorher war SIGNAL ein nicht zu unterbrechender Interrupt.
INTERRUPT konnte durch einen anderen INTERRUPT unterbrochen werden.
Ab GCC_Version 4.x gibt es nur mehr ISR = SIGNAL alt

Autor: Hua Guo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke!
Ich wollte noch fragen, wo kann ich wissen die Name für ein Interrupt?
z.B. Für External Interrupt Request1 ist die Name "SIG_INTERRUPT1".
Was ist für "USART,Rx Complete"? usw.

Autor: Hubert.G (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://download.savannah.gnu.org/releases/avr-libc/
Unter avr-libc Modules Interrupts gibt es eine Liste mit den diversen
Namen. Achtung! auf die richtige Version achten.

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.