beuntze bitte die [ CODE ] [ / CODE ] Tags (ohne leerzeichen) um deinen code ehrum, dann bleibt die formatierung erhalten udn man kann es besser lesen

@Siro hat recht, das "return b;" ist dein Problem, eine main sollte immer eine Endlosschleife haben die NIE verlassen wird!

ich mach mal pseudo code fürs verständnis
Code:
initTimer();
integer brightness = MIN;
while(1)
{
   if(input == low)
   {
      brightness = MIN;
   }
   else
   {
      if(brightness < MAX)
      {
         brightness++;
      }
      delay(einstellbare_delay_für_fade_geschwindigkeit);
   }
   PWM_register = brightness;
}
man könnte den ersten IF auch erweitern dass er brightness mit einer kürzeren delay runterfadet ( brightness--; ) wenn brightness nicht MIN ist damit er nicht einfach nur ausschaltet sondern ebenfalls spürbar dunkel fadet