Forum: Mikrocontroller und Digitale Elektronik Interrupt Routine ???


von klaus (Gast)


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;

}

von Uhu U. (uhu)


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...

von ozo (Gast)


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.

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.