MKaiser
18.03.2007, 16:54
Hallo ihr,
hab da ein kleines Problem mit meinem Programm. Ich habe den Timer0 als Overflow interupt. bei einem Interrupt soll er den zähler i um eins erhöhen bis 50 und dann wieder zurücksetzten. Gleichzeitig vergleicht er i mit x und solange i<x setzt er den PORTC und sonst setzt er ihn zurück.
Nun mein Problem wenn ich x in meiner endlosschleife eine Wert gebe ist der PORT die ganze aus. Geb ich ihm einmal vor der Endlosschelfie einen Wert klappts.
Weiß jemand was ich falsch mache?
Danke schonmal
Hier noch der Code:
#include <avr/io.h>
#include <avr/interrupt.h>
uint8_t x ;
uint8_t i = 0;
//_____________Interrupt routine start
ISR (SIG_OVERFLOW0)
{
if (i>=50)
i=0;
if (i<x)
PORTC = 0xff;
else
PORTC = 0x00;
i++;
}
//______________Interrupt routine end
int main(void)
{
DDRC = 0xff;
PORTC = 0x00;
TCCR0 |= (1<<CS02)| (1<<CS00) ; //Teiler setzten
TIMSK |= (1<< TOIE0); //Timer0 Interrupt freigeben
sei();
//Interupt Global aktivieren
x=45; //hier gehts
for(;;)
{
x=45; //hier nicht
}
}
hab da ein kleines Problem mit meinem Programm. Ich habe den Timer0 als Overflow interupt. bei einem Interrupt soll er den zähler i um eins erhöhen bis 50 und dann wieder zurücksetzten. Gleichzeitig vergleicht er i mit x und solange i<x setzt er den PORTC und sonst setzt er ihn zurück.
Nun mein Problem wenn ich x in meiner endlosschleife eine Wert gebe ist der PORT die ganze aus. Geb ich ihm einmal vor der Endlosschelfie einen Wert klappts.
Weiß jemand was ich falsch mache?
Danke schonmal
Hier noch der Code:
#include <avr/io.h>
#include <avr/interrupt.h>
uint8_t x ;
uint8_t i = 0;
//_____________Interrupt routine start
ISR (SIG_OVERFLOW0)
{
if (i>=50)
i=0;
if (i<x)
PORTC = 0xff;
else
PORTC = 0x00;
i++;
}
//______________Interrupt routine end
int main(void)
{
DDRC = 0xff;
PORTC = 0x00;
TCCR0 |= (1<<CS02)| (1<<CS00) ; //Teiler setzten
TIMSK |= (1<< TOIE0); //Timer0 Interrupt freigeben
sei();
//Interupt Global aktivieren
x=45; //hier gehts
for(;;)
{
x=45; //hier nicht
}
}