Im Endeffekt rufst du mit GoSub Fading ja nur das Programm auf.
Lass das GoSub weg und pack das Unterprogramm direkt dahin wo dein GoSub stand. Und in der Timer ISR setzt du nur das Flag, welches du im Mainprogramm auswertest.
Das sieht dann etwa so aus:
Code:
'#########
'## EDT ##
'#########
'---------
'TinyRGB
'V1.0
'04.03.2012
'---------
'schaltplan_tinyrgb_v1_0.dsn
'---------
'AtTiny13 @ 9,6 Mhz internal RC-Clock
'Jp1 gesetzt: Modus 0 aktiv
'Jp2 gesetzt: Modus 1 aktiv
'Modus 0: Farbwechsel über alle drei Grundfarben (R-G-B)
'Modus 1: Effekt-Farbwechsel
'---------
$regfile = "attiny13.dat"
$crystal = 9600000 '9,6 Mhz
$hwstack = 8
$swstack = 4
$framesize = 10
'CONFIG IN/OUT
Config Portb.0 = Output 'Blau
Config Portb.1 = Output 'Grün
Config Portb.2 = Output 'Rot
Config Pinb.3 = Input 'Jp1
Config Pinb.4 = Input 'Jp2
Portb.3 = 1 'Pullup Jp1 einschalten
Portb.4 = 1 'Pullup Jp2 einschalten
'ALIAS
R Alias Portb.2
G Alias Portb.1
B Alias Portb.0
Jp1 Alias Pinb.3
Jp2 Alias Pinb.4
'CONFIG TIMER
Config Timer0 = Timer , Prescale = 1
On Timer0 Isr_timer0
Enable Timer0
Start Timer0
'VARIABLEN
Dim Pwm_count As Byte 'PWM-Variable
Dim C_r As Byte 'Channel Rot
Dim C_g As Byte 'Channel Grün
Dim C_b As Byte 'Channel Blau
Dim Div As Word 'Teilervariable
Dim State As Byte 'Status
Dim Modus As Bit 'Modus
Dim Timerflag As Bit 'Flag für die Timer ISR
'INTERRUPTS EIN
Enable Interrupts
'### HAUPTSCHLEIFE ###
Do
'Vergleich Channel kleiner PWM:
If C_r < Pwm_count Then R = 1 Else R = 0
If C_g < Pwm_count Then G = 1 Else G = 0
If C_b < Pwm_count Then B = 1 Else B = 0
'Jumperabfrage:
If Jp1 = 0 Then Modus = 0
If Jp2 = 0 Then Modus = 1
If Timerflag = 1 Then
If Pwm_count = 255 Then Pwm_count = 0 'PWM-Variable bei 255 resetten
Incr Pwm_count 'PWM-Variable erhöhen
If Div = 10000 Then 'Teilervariable bei 10000 resetten
Div = 0
If Modus = 0 Then
Select Case State
Case 0 : Incr C_r
Decr C_b
If C_r = 255 Then State = 1
Case 1 : Decr C_r
Incr C_g
If C_g = 255 Then State = 2
Case 2 : Decr C_g
Incr C_b
If C_b = 255 Then State = 0
End Select
End If
If Modus = 1 Then
Select Case State
Case 0 : If C_r < 255 Then Incr C_r
If C_r = 255 Then State = 1
Case 1 : If C_b < 255 Then Incr C_b
If C_b = 255 Then State = 2
Case 2 : If C_g < 255 Then Incr C_g
If C_g = 255 Then State = 3
Case 3 : If C_r > 1 Then Decr C_r
If C_g > 50 Then Decr C_g
If C_b > 1 Then Decr C_b
If C_r = 1 Then State = 4
Case 4 : If C_g < 255 Then Incr C_g
If C_b < 255 Then Incr C_b
If C_b = 255 Then State = 5
Case 5 : If C_g > 1 Then Decr C_g
If C_b > 1 Then Decr C_b
If C_g = 1 Then State = 0
End Select
End If
End If
Incr Div 'Teilervariable erhöhen
Timerflag = 0 'Flag für die Timer ISR zurücksetzen
End If
Loop
'ISR TIMER0
Isr_timer0:
Timerflag = 1
Return
Das ist jetzt dein alter Code ohne das "Select Case" also nicht wundern 
So sparst du dir auch das Unterprogramm, weil das alles im Hauptprogramm ausgeführt wird (statt Gosub schreibst du da halt den Code hin).
Edit: Hab einen aktuellen Code eingefügt. So in etwa meinte ich das. Musst du mal gucken ob er für dich in Ordnung ist
Lesezeichen