Hallo,

Bin leider noch ziemlicher Anfänger in Sachen C. vielleicht kann mir einer von euch bei folgendem Problem helfen.

Ich habe eine PWM für eine RGB LED auf einen Atmega8 programmiert, so dass sie ständig die Farbe wechselt. nun soll man aber über einen Taster der einen Interrupt auslöst und eine Variable setzt die LED auf weiß schalten können. das ganze funktioniert soweit auch recht gut, nur dass die LED eben erst nach dem durchlauf der PWM sequenz auf weiß wechselt. Gibt es eine Möglichkeit nach dem Interrupt Programm direkt zum Programmteil "Weiß" zu springen? oder wüsstet ihr eine einfachere Lösung so etwas zu Programmieren?

hier mein Programm (ohne das delay Unterprogramm und die PWM unterprogramme)
Code:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <inttypes.h>

void delay(unsigned int ms);
void LED2DIMIN(void);
void LED1DIMIN(void);
void LED2DIMOUT(void);
void LED1DIMOUT(void);
void LED3DIMIN(void);
void LED3DIMOUT(void);
int i;
int a;
int b;
int c = 50; //geschwindigkeit Dimmer höherer Wert = langsamer
int d = 0;

ISR(INT0_vect)				//Interrupt
  {
    if (d==0)
    {
      d=1;
    }
    else
    {
      d=0;
    }
  }

void main(void)				//Hauptprogramm
  {
    DDRD  = 0b11100000; //Pin 765 = Output 0-4 = Input
	GICR|=(1<<INT0);  	//enables ext Interrupt (Pin 4, INT0)
    MCUCR = 0b00000011;	//Steigende Flanke an INT0 Löst aus
    sei (); 			//Global Interrupt enable
	
    while(1)
    {  
	if (d==0)
      {
	    PORTD &= ~(1 << PD5);
	    PORTD &= ~(1 << PD6);
	    PORTD |= (1 << PD7);
	    LED2DIMIN();	//blau
	    LED3DIMOUT();	//rot weg
	    LED1DIMIN();	//grün
	    LED2DIMOUT();	//blau weg
	    LED3DIMIN();	//rot
	    LED1DIMOUT();	//grün weg
	  }		
	else
	  {
	    PORTD |= (1 << PD7); //weiß
	    PORTD |= (1 << PD6);
        PORTD |= (1 << PD5);
      }
	}
  }
Wäre froh wenn Mir jemand helfen könnte

vielen Dank