Hier kuck mal.
Code:
$regfile = "m8535.dat"
$crystal = 10000000

Config Portc = Output

'(
Im Hauptprogramm Berechnest Du Aus Jedem Helligkeitswert(8 Bit) Die
Entsprechende Anzahl Von Timerticks. Beim Nulldurchgang Löscht Du
Deinen Timer Und Schreibst Die Timerticks Der Hellsten Lampe Ins
Compare -register Deines Timers. Wenn Das Compare -reg Einen Ir Auslöst,
Schaltest Du Die Lampe Ein Und Schreibst Den Wert Der Zweithellsten
Lampe Ins Compare -reg , Usw.
Fang Am Anfang Mit Nur Einer Lampe An. Dann Hast Du Nur Einen Wert Für
Das Compare -register Und Dein Programm Bleibt Einfach. Wenns Läuft , Bau
Die Anderen Lampen Ein!
')

' 8 chanel werter festleen an engem array !
Dim Chanel_val(8) As Word
Dim Temp_chanel_val(8) As Word
Dim Trigger_chanel_num(8) As Byte
Dim T As Byte
Dim C As Byte
Dim M As Byte
Dim Idx As Byte
Dim Chanel As Integer                                       'actuel chanel nummer
Dim Comp As Integer
Dim T_c As Integer
Dim R_c As Integer
Dim R2d2 As String * 1
Dim R3d3 As String * 10



Declare Sub Big_level() As Bit

' Offset NUll Duurchgang = 1750 ticks
Chanel_val(1) = 1750                                        'MIN
Chanel_val(2) = 1700
Chanel_val(3) = 1600                                        '
Chanel_val(4) = 1500                                        '
Chanel_val(5) = 1400                                        '
Chanel_val(6) = 1300                                        '
Chanel_val(7) = 1200                                        '
Chanel_val(8) = 1100                                        'MAX

'Config Int0 = Rising
Set Mcucr.isc01
Set Mcucr.isc00

' Interrupts
Enable Interrupts




'timer configureiren
Call Big_level
Compare1b = 250                                             '12502

Config Timer1 = Timer, Prescale = 8
Config Serialin = Buffered, Size = 64



Enable Int0                                                 'Null Durchgans erkennung
Enable Compare1a                                            'timer1 interrupt
Enable Compare1b                                            'timer1 interrupt

On Int0 Int0_isr
On Compare1a Timer_isr
On Compare1b Port_reset






Do
R2d2 = Inkey()
If Err = 0 Then
   If R2d2 <> "*" Then
      R3d3 = R3d3 + R2d2
   Else
      Print "Chanel 1 set to "; R3d3
      Chanel_val(1) = Val(R3d3)
      R3d3 = ""
   End If
End If

Loop




'main routine
'Timer_ticks_max = 12500                                     'bei prescale = 8 ass 12500
'One_step = 50                                               'linear ticks









Timer_isr:                                                  'compare1a interrupt
   T_c = Trigger_chanel_num(Chanel)
   Select Case T_c
      Case 1 : Set Portc.0
      Case 2 : Set Portc.1
      Case 3 : Set Portc.2
      Case 4 : Set Portc.3
      Case 5 : Set Portc.4
      Case 6 : Set Portc.5
      Case 7 : Set Portc.6
      Case 8 : Set Portc.7
  End Select
   Chanel = Chanel + 1
   If Chanel > 8 Then
      Chanel = 1
   End If
   T_c = Trigger_chanel_num(Chanel)
   Comp = Chanel_val(T_c)
   Compare1a = Comp
Return





Int0_isr:                                                   'Null Durchgangs Interrupt
   Timer1 = 0
   Start Timer1
   Chanel = 1
   T_c = Trigger_chanel_num(Chanel)
   Comp = Chanel_val(T_c)
   Compare1a = Comp
Return


Port_reset:
   Portc = 0
Return
Dieser code hat in etwa so bei mir funktioniert. experimentiere mal damit herum. Ist glaube ich auch ne bessere erklaerung als mein versuch vorhin