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
}
Lesezeichen