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; }
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.