Gast
#2410614
Liebe yC-Gemeinde,
Ich habe den ATUSB646 von Atmel und versuche daruf meine ersten kleinen
Programme zum Laufen zu kriegen.
Folgendes Programm habe ich geschrieben. Es soll einfach nur einen
Interrupt beim Timer1 overflow auslösen und einen PIN/LED Toggeln.
Letzten Freitag lief das Programm noch, wenn ich mich recht erinnere.
Nun 3 Tage später lade ich es erneut auf den yC und es geht nichts. nun
folgt der Code:
#include <avr/io.h>
#include <avr/interrupt.h>
volatile uint8_t flag = 0;
int main(void) {
// PORTB als Ausgang
DDRB = 0xFF;
// Schreiberlaubnisprozedur für system clock prescaler
// Anschließend divide by 32
CLKPR = (1<<CLKPCE) & ~(1<<6) & ~(1<<5) & ~(1<<4) & ~(1<<3) & ~(1<<2)
& ~(1<<1) & ~(1<<0); // set prescaler to 16
CLKPR = ~(1<<CLKPCE) & ((1<<CLKPS2) | (1<<CLKPS0));
// aktiviere Timer1, kein clki/o prescaling
TCCR1B |= (1<<CS10);
// Einschalten von overflow interrupt in timer1
TIMSK1 |= (1<<TOIE1);
// Einschalten des Global interrupt flag
sei();
while(1) {
if(flag==1) {
PORTB ^= (1<<0);
flag = 0 ;
}
}
}
ISR(TIMER1_OVF_vect) {
flag = 1;
}
das wars.
Klammere ich sei(); mit // aus und setze das Flag manuell, leuchtet die
entsprechende LED. Es muss also irgendwas mit dem Interrupt sein. Mit
gesetztem Global interrupt flag, bleibt der code bei sei(); anscheinend
hängen und nichts passiert. Es leuchtet mir nicht ein warum.
Wäre toll wenn ihr mir einen Tipp geben könntet, was das problem ist.
MFG