Interrupt Routine ???

Gast #526291
Lesenswert?
• ▲
▼
Hallo zusammen...

habe nochmal versucht ein kleines Programm zu schreiben, was einen 
Interrupt durch einen Timer auslösen soll und dann meine LED an PIn Pc1 
einschalten soll... aber es funktioniert irgendwie nicht...
habe den timer1 benutzt (16 bit timer)

könnt ihr mir sagen wieso ?

#include <stdlib.h>
#include <stdio.h>
#include <avr/io.h>
#include <avr/iom8.h>
#include <avr/interrupt.h>
#include <inttypes.h>
#ifndef F_CPU
#define F_CPU 1000000UL     /* Quarz mit 1 Mhz  */
#endif
#include <util/delay.h>


ISR(TIMER1_OVF_vect)
{
    PORTC = PINC ^ ( 1 << PC1 ); //Diode an
}



int main (void)
{

DDRC = 0xFF; // 11111111 I/o - Konfiguration PORT C
PORTC = 0x00; // kompletter Port C auf 0 gesetzt


TIMSK |= _BV(TOIE1);
TCCR1B = _BV(CS12) | _BV(CS10);
TCNT1 = 55771; //Zählregister vorladen für 10sek.
sei (); //Interrupts global zulassen
return 0;

}
#526297
Lesenswert?
• ▲
▼
Ob Du die Interrupt-Serviceroutine korrekt geschrieben hast, weiß ich 
nicht - ich kenne Deine Umgebung nicht.

Was aber definitiv falsch ist: Das 'return 0' in main.

Du darfst main nach der Initialisierung nicht verlassen, sondern mußt 
den Controller in einer unendlichen Schleife laufen lassen - die 
'Arbeit' macht ja die ISR und der Vordergrund muß einfach nur nichts 
machen, insbesondere darf er nicht den Controller ins Nirvana rennen 
lassen...
Gast #526299
Lesenswert?
• ▲
▼
Du solltest noch ein while(1) {} in die main machen.

Außerdem kommt mir die PORT = PIN ^ (1<<) Konstruktion jetzt seltsam 
vor.
Sollte aber eigentlich schon tun. Lass zum Testen doch mal nach zehn 
Sekunden  den Interrupt die LED anschalten, also NUR PORTC|=(1<<).

Ich hoffe mal, dass es nur an der fehlenden Schleife liegt.

Antwort schreiben

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.

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.