'------------------------------------------------------------------------------
' Compilerinstruktionen und Compilerdirektiven
'------------------------------------------------------------------------------
$regfile = "m8def.dat"
$crystal = 4000000
$hwstack = 32
$swstack = 32
$framesize = 80

Rot Alias Pwm1a
Gruen Alias Pwm1b
Blau Alias Ocr2

Const Geschwindigkeit = 30
Const Pausen = 5

Config Timer1 = Pwm , Prescale = 64 , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down ,
Config Timer2 = Pwm , Prescale = 64 , Compare Pwm = Clear Up , Pwm = On

'Die Timer freigeben
Enable Timer1
Enable Timer2

'Die Timer starten
Start Timer1
Start Timer2

'PWM setzen
Rot = 0
Gruen = 0
Blau = 0

Gosub Gruen_hoch                                            ' Gruen
Wait Pausen
Gosub Rot_hoch                                              ' Rot + Grün
Wait Pausen
Gosub Blau_hoch                                             ' Rot + Grün + Blau
Wait Pausen

Do
   Gosub Rainbow
Loop

'#################### Regenbogenfarbwechsel
Rainbow:
   Gosub Rot_runter                                         ' Grün + Blau
   Wait Pausen

   Gosub Gruen_runter                                       ' Blau
   Wait Pausen

   Gosub Rot_hoch                                           ' Rot + Blau
   Wait Pausen

   Gosub Blau_runter                                        ' Rot
   Wait Pausen

   Gosub Gruen_hoch                                         ' Rot + Grün
   Waitms Geschwindigkeit

   Gosub Blau_hoch                                          ' Rot + Grün + Blau
   Wait Pausen

   Gosub Gruen_runter                                       ' Rot + Blau
   Wait Pausen

   Gosub Gruen_hoch                                         ' Rot + Grün + Blau
   Wait Pausen

   Gosub Blau_runter                                        ' Rot + Grün
   Wait Pausen

   Gosub Rot_runter                                         ' Grün
   Wait Pausen

   Gosub Blau_hoch                                          ' Grün + Blau
   Wait Pausen

   Gosub Rot_hoch                                           ' Rot + Grün + Blau
   Wait Pausen

Return

Rot_hoch:                                                   'Rot heller
While Rot < 255
   Incr Rot
   Waitms Geschwindigkeit
Wend
Return

Rot_runter:                                                 'Rot dunkler
While Rot > 0
   Decr Rot
   Waitms Geschwindigkeit
Wend
Return

Gruen_hoch:                                                 'Gruen heller
While Gruen < 255
   Incr Gruen
   Waitms Geschwindigkeit
Wend
Return

Gruen_runter:                                               'Gruen dunkler
While Gruen > 0
   Decr Gruen
   Waitms Geschwindigkeit
Wend
Return

Blau_hoch:                                                  'Blau heller
While Blau < 255
   Incr Blau
   Waitms Geschwindigkeit
Wend
Return

Blau_runter:                                                'Blau dunkler
While Blau > 0
   Decr Blau
   Waitms Geschwindigkeit
Wend
Return