habs jetzt so abgeändert, LED blinkt auch.. allerdings net im Sekundentakt. Falsch gerechnet ?!?!![]()
Code:#include <iom88.h> #include <ina90.h> #define DLY_1_SEC 1953 // Formula: Time for one Timer0 Overflow t=(Prescalevalue*256)/fosc // Prescalevalue=8, fosc=4MHz --> t=0,512 msec for one overflow // To get a delay of 1 sec --> 1sec/0,512msec=1953 overflows are needed volatile unsigned int pause_timer; // must be volatile or the interrupt routine will not change the value void delay_init(void); void delay(int tvalue); __task void main(void) { delay_init(); while(1) { delay(DLY_1_SEC); PORTB ^= (1<<PB0); // toggle LED } } void delay_init(void) { DDRB = 0xff; // set for all outputs PORTB = 0xff; // turn off all leds TCCR0B |= (1 << CS01); // Timer clock = system clock / 8 } // Generates an interrupt every 0.512 ms for fosc = 4 MHz and prescale of 8 #pragma vector=TIMER0_OVF_vect __interrupt void tim0_ovf(void) { // Decrement timer if timer is not 0 pause_timer--; if(pause_timer ==0) { TIMSK0 &=~(1<<TOIE0); // Disable T/C0 overflow interrupt TIFR0 |= (1<<TOV0); // Clear T/C0 overflow flag } } void delay(int tvalue) { pause_timer = tvalue; TIMSK0 |= (1<<TOIE0); // Enable T/C0 overflow interrupt __enable_interrupt(); // enable interrupts while(1) { if(!(TIMSK0 & (1<<TOIE0))) break; } __disable_interrupt(); // disable interrupts }







Zitieren

Lesezeichen