so ich habe mir mal kurz zeit genommen den code ein bisschen zu kommentieren... und ihn zu veröffentlichen... viel spass beim durchlesen
ist vielleicht ein bisschen umständlich programmiert 
Code:
$regfile = "m8def.dat"
$crystal = 8000000
'$framesize = 512
'$swstack = 512
'$hwstack = 512
Config Timer1 = Timer , Prescale = 1
On Timer1 Timer_irq
Const Timervorgabe = 65219
Enable Timer1
Config Rc5 = Pinb.6
Dim Address As Byte , Command As Byte
Enable Interrupts
Config Portc.0 = Output
Config Portc.1 = Output
Config Portc.2 = Output
Config Portc.3 = Output
Config Portc.4 = Output
Config Portc.5 = Output
Config Portd.0 = Output
Config Portd.1 = Output
Config Portd.2 = Output
Config Portd.3 = Output
Config Portd.4 = Output
Config Portd.5 = Output
Config Portd.6 = Output
Config Portd.7 = Output
Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.2 = Output
'Variabeln für 3 Farben pro LED und insgesamt 5 LED's
Dim Ledr(5) As Byte
Dim Ledg(5) As Byte
Dim Ledb(5) As Byte
'Variabeln für zufalszahlen
Dim Zufall_1 As Byte
Dim Zufall_2 As Byte
Dim Zufall_3 As Byte
Zufall_1 = 60
Zufall_2 = 130
Zufall_3 = 200
'Temp variabel für diverse zwischenspeicherungen
Dim Temp As Word
'Variabeln im eram für dauerhafte speicherung
Dim Speicher(90) As Eram Byte
Dim Zeiger As Byte
'Zählervariabel für Pwm
Dim Pwm As Byte
Pwm = 100
'Variabel für laufender fliessender Farbübergang
Dim Tim As Long
Dim Zaehler As Byte
Dim Progst(5) As Byte
Dim Prog6 As Bit
'Zählervariabel für diverse Schlaufen
Dim I As Byte
'Variabeln für Farbprogrammierung
Dim Progmod As Bit
Dim Rot As Bit
Dim Gruen As Bit
Dim Blau As Bit
Dim Led As Byte
Dim Tempr As Byte
Dim Tempg As Byte
Dim Tempb As Eram Byte
Dim Aktprog As Byte
Dim Aktprogtemp As Byte
'Bei Start die ersten Farbwerte laden
Zeiger = 0
For I = 1 To 5
Incr Zeiger
Ledr(i) = Speicher(zeiger)
Incr Zeiger
Ledg(i) = Speicher(zeiger)
Incr Zeiger
Ledb(i) = Speicher(zeiger)
Next I
Dim Geschw As Long
Geschw = 1000
Do
'Standbymodus alle Led's aus
If Aktprog = 99 Then
Aktprogtemp = 99
For I = 1 To 5
Ledr(i) = 0
Ledg(i) = 0
Ledb(i) = 0
Next
End If
'Infrarotempfang
Getrc5(address , Command)
If Address = 0 Then
Command = Command And 127
End If
'**********Abspielmodus******************
If Progmod = 0 Then
'die 2 Status LED's Ausschalten
Portb.1 = 0
Portb.2 = 0
'Infrarotempfang und Programm zuweisung
If Command = 60 And Aktprog <> 99 And Aktprog <> 6 Then Progmod = 1
If Command = 12 Then Aktprog = 99
If Command = 1 Then Aktprog = 0
If Command = 2 Then Aktprog = 1
If Command = 3 Then Aktprog = 2
If Command = 4 Then Aktprog = 3
If Command = 5 Then Aktprog = 4
If Command = 6 Then Aktprog = 5
If Command = 7 Then Aktprog = 6
If Command = 8 Then Aktprog = 7
If Command = 9 Then Aktprog = 8
'Programme für feste Farbwerte
If Aktprog = 0 Or Aktprog = 1 Or Aktprog = 2 Or Aktprog = 3 Or Aktprog = 4 Or Aktprog = 5 Then
Prog6 = 0
If Aktprog <> Aktprogtemp Then
Aktprogtemp = Aktprog
Zeiger = Aktprog * 15
For I = 1 To 5
Incr Zeiger
Ledr(i) = Speicher(zeiger)
Incr Zeiger
Ledg(i) = Speicher(zeiger)
Incr Zeiger
Ledb(i) = Speicher(zeiger)
Next I
End If
End If
'Zufalsfarben für einzelne LED nacheinander
If Aktprog = 7 Then
Aktprogtemp = Aktprog
Prog6 = 0
If Command = 32 Then
Geschw = Geschw + 2000
Portb.1 = 1
Portb.2 = 1
Waitms 2
Portb.1 = 0
Portb.2 = 0
End If
If Command = 33 Then
Geschw = Geschw - 2000
Portb.1 = 1
Portb.2 = 1
Waitms 2
Portb.1 = 0
Portb.2 = 0
End If
If Geschw < 3000 Then
Geschw = 3000
Portb.1 = 1
Waitms 100
Portb.2 = 1
Waitms 100
Portb.1 = 0
Portb.2 = 0
End If
If Geschw > 500000 Then
Geschw = 500000
Portb.1 = 1
Waitms 100
Portb.2 = 1
Waitms 100
Portb.1 = 0
Portb.2 = 0
End If
If Tim > Geschw Then
Tim = 0
Incr I
If I >= 5 Then I = 0
Temp = Zufall_1 And Zufall_2
Temp = Temp * 100
Temp = Temp / 255
Ledr(i) = Temp
Temp = Zufall_1 And Zufall_3
Temp = Temp * 100
Temp = Temp / 255
Ledg(i) = Temp
Temp = Zufall_3 And Zufall_2
Temp = Temp * 100
Temp = Temp / 255
Ledb(i) = Temp
End If
End If
'Zufallsfarben für alle LED's miteinander
If Aktprog = 8 Then
Aktprogtemp = Aktprog
Prog6 = 0
If Command = 32 Then
Geschw = Geschw + 2000
Portb.1 = 1
Portb.2 = 1
Waitms 2
Portb.1 = 0
Portb.2 = 0
End If
If Command = 33 Then
Geschw = Geschw - 2000
Portb.1 = 1
Portb.2 = 1
Waitms 2
Portb.1 = 0
Portb.2 = 0
End If
If Geschw < 3000 Then
Geschw = 3000
Portb.1 = 1
Waitms 100
Portb.2 = 1
Waitms 100
Portb.1 = 0
Portb.2 = 0
End If
If Geschw > 500000 Then
Geschw = 500000
Portb.1 = 1
Waitms 100
Portb.2 = 1
Waitms 100
Portb.1 = 0
Portb.2 = 0
End If
If Tim > Geschw Then
Tim = 0
Incr I
If I >= 5 Then I = 0
Temp = Zufall_1 And Zufall_2
Temp = Temp * 100
Temp = Temp / 255
Ledr(1) = Temp
Ledr(2) = Temp
Ledr(3) = Temp
Ledr(4) = Temp
Ledr(5) = Temp
Temp = Zufall_1 And Zufall_3
Temp = Temp * 100
Temp = Temp / 255
Ledg(1) = Temp
Ledg(2) = Temp
Ledg(3) = Temp
Ledg(4) = Temp
Ledg(5) = Temp
Temp = Zufall_3 And Zufall_2
Temp = Temp * 100
Temp = Temp / 255
Ledb(1) = Temp
Ledb(2) = Temp
Ledb(3) = Temp
Ledb(4) = Temp
Ledb(5) = Temp
End If
End If
'Laufender Farbübergang
If Aktprog = 6 Then
Aktprogtemp = Aktprog
If Prog6 = 0 Then
Prog6 = 1
For I = 1 To 5
Progst(i) = I
Ledr(i) = 0
Ledg(i) = 0
Ledb(i) = 0
Next
Ledg(2) = 50
Ledr(3) = 100
Ledr(4) = 50
End If
'If Tim > Geschw Then
Incr Zaehler
For I = 1 To 5
If Progst(i) = 1 Then
Ledr(i) = 100
Ledg(i) = Ledg(i) + 1
Ledb(i) = 0
End If
If Progst(i) = 2 Then
Ledr(i) = 100
Ledg(i) = Ledg(i) + 1
Ledb(i) = 0
End If
If Progst(i) = 3 Then
Ledg(i) = 100
Ledr(i) = Ledr(i) - 1
Ledb(i) = 0
End If
If Progst(i) = 4 Then
Ledg(i) = 100
Ledr(i) = Ledr(i) - 1
Ledb(i) = 0
End If
If Progst(i) = 5 Then
Ledg(i) = 100
Ledb(i) = Ledb(i) + 1
Ledr(i) = 0
End If
If Progst(i) = 6 Then
Ledg(i) = 100
Ledb(i) = Ledb(i) + 1
Ledr(i) = 0
End If
If Progst(i) = 7 Then
Ledb(i) = 100
Ledg(i) = Ledg(i) - 1
Ledr(i) = 0
End If
If Progst(i) = 8 Then
Ledb(i) = 100
Ledg(i) = Ledg(i) - 1
Ledr(i) = 0
End If
If Progst(i) = 9 Then
Ledb(i) = 100
Ledr(i) = Ledr(i) + 1
Ledg(i) = 0
End If
If Progst(i) = 10 Then
Ledb(i) = 100
Ledr(i) = Ledr(i) + 1
Ledg(i) = 0
End If
If Progst(i) = 11 Then
Ledr(i) = 100
Ledb(i) = Ledb(i) - 1
Ledg(i) = 0
End If
If Progst(i) = 12 Then
Ledr(i) = 100
Ledb(i) = Ledb(i) - 1
Ledg(i) = 0
End If
Next I
If Zaehler = 50 Then
Zaehler = 0
For I = 1 To 5
Incr Progst(i)
If Progst(i) = 13 Then Progst(i) = 1
Next I
End If
End If
'End If
End If
'*********** Programmiermodus ************
If Progmod = 1 Then
Portb.1 = 1
Portb.2 = 1
'Speichern der Programmierten Farben im Eram
If Command = 41 Then
Progmod = 0
Zeiger = Aktprog * 15
For I = 1 To 5
Incr Zeiger
Speicher(zeiger) = Ledr(i)
Incr Zeiger
Speicher(zeiger) = Ledg(i)
Incr Zeiger
Speicher(zeiger) = Ledb(i)
Next I
End If
'Farbauswahl = Rot
If Command = 55 Then
Rot = 1
Gruen = 0
Blau = 0
End If
'Farbauswahl = grün
If Command = 54 Then
Rot = 0
Gruen = 1
Blau = 0
End If
'Farbauswahl = Blau
If Command = 52 Then
Rot = 0
Gruen = 0
Blau = 1
End If
'Ledauswahl erhöhen
If Command = 17 Then
Waitms 100
If Led < 5 Then Incr Led
Tempr = Ledr(led)
Tempg = Ledg(led)
Tempb = Ledb(led)
Ledr(led) = 0
Ledg(led) = 0
Ledb(led) = 0
Waitms 200
Ledr(led) = Tempr
Ledg(led) = Tempg
Ledb(led) = Tempb
End If
'Led auswahl erniedrigen
If Command = 16 Then
Waitms 100
If Led > 1 Then Decr Led
Tempr = Ledr(led)
Tempg = Ledg(led)
Tempb = Ledb(led)
Ledr(led) = 0
Ledg(led) = 0
Ledb(led) = 0
Waitms 200
Ledr(led) = Tempr
Ledg(led) = Tempg
Ledb(led) = Tempb
End If
'Bei der Ausgewählten LED die Ausgewälte Farbe erhöhen und bei erreichen des Maximums 3maliges blinken der LED
If Command = 32 Then
If Rot = 1 And Ledr(led) < 101 Then Incr Ledr(led)
If Gruen = 1 And Ledg(led) < 101 Then Incr Ledg(led)
If Blau = 1 And Ledb(led) < 101 Then Incr Ledb(led)
If Ledr(led) = 101 Or Ledg(led) = 101 Or Ledb(led) = 101 Then
For I = 1 To 3
Tempr = Ledr(led)
Tempg = Ledg(led)
Tempb = Ledb(led)
Ledr(led) = 0
Ledg(led) = 0
Ledb(led) = 0
Waitms 100
Ledr(led) = Tempr
Ledg(led) = Tempg
Ledb(led) = Tempb
Waitms 100
Next I
If Rot = 1 And Ledr(led) > 0 Then Decr Ledr(led)
If Gruen = 1 And Ledg(led) > 0 Then Decr Ledg(led)
If Blau = 1 And Ledb(led) > 0 Then Decr Ledb(led)
End If
End If
'Bei der Ausgewählten LED die Ausgewälte Farbe erniedrigen
If Command = 33 Then
If Rot = 1 And Ledr(led) > 0 Then Decr Ledr(led)
If Gruen = 1 And Ledg(led) > 0 Then Decr Ledg(led)
If Blau = 1 And Ledb(led) > 0 Then Decr Ledb(led)
End If
'Alle Farben der Ausgewählten LED auf 0 setzen
If Command = 13 Then
Ledr(led) = 0
Ledg(led) = 0
Ledb(led) = 0
End If
End If
Loop
Timer_irq:
'Timervorgabe laden
Timer1 = Timervorgabe
'Diverse Variabeln erhöhen
Incr Tim
Incr Zufall_1
Incr Zufall_2
Incr Zufall_3
'Zähler für pwm erniedrigen
Decr Pwm
'bei einem durchlauf der PWM variabel alle ports Ausschalten
If Pwm = 0 Then
Portd = 0
Portc = 0
Portb.0 = 0
Pwm = 100
End If
'Ports je nach Farbintensität einschalten
If Pwm <= Ledg(1) Then Portc.0 = 1
If Pwm <= Ledb(1) Then Portc.1 = 1
If Pwm <= Ledr(1) Then Portc.2 = 1
If Pwm <= Ledg(2) Then Portc.3 = 1
If Pwm <= Ledb(2) Then Portc.4 = 1
If Pwm <= Ledr(2) Then Portc.5 = 1
If Pwm <= Ledg(3) Then Portd.0 = 1
If Pwm <= Ledb(3) Then Portd.1 = 1
If Pwm <= Ledr(3) Then Portd.2 = 1
If Pwm <= Ledg(4) Then Portd.3 = 1
If Pwm <= Ledb(4) Then Portd.4 = 1
If Pwm <= Ledr(4) Then Portd.5 = 1
If Pwm <= Ledg(5) Then Portd.6 = 1
If Pwm <= Ledb(5) Then Portd.7 = 1
If Pwm <= Ledr(5) Then Portb.0 = 1
Return
gruss bluesmash
Lesezeichen