Moin.

Habs mal eben in den Editor gezogen und da fiel es dann gleich auf.
Der Timer ist ja 16 Bittig und da wird auch nur eine entsprechend Dimensionierte Variable akzeptiert.


In Zeile 15 und 16 sind die Änderungen.




Code:
'###################################################
'#Lauflichtsteuerung mit 3 Verschiedenen Programmen#
'###################################################


$regfile = "M8def.dat"
$crystal = 3686400

Ddrd = &B11100000                                           'PD7, PD6, PD5 als Ausgänge festlegen, rest Eingang
Portd = &B00001100                                          'PullUps von PD2, PD3 Aktivieren

Dim Zler As Byte
Dim Pr1_3 As Byte
Dim Schneller As Byte
Dim Timervorgabe As Word
Timervorgabe = 100

On Timer1 Ontimer1
Config Timer1 = Timer , Prescale = 64                       'Timertakt = Crystal / 64
Enable Timer1                                               'Timer1 einschalten
Enable Interrupts                                           'Interrupts Global einschalten


'###Deklarationen###

Led_gr Alias Portd.7                                        'LED Grün
Led_ge Alias Portd.6                                        'LED Gelb
Led_ro Alias Portd.5                                        'LED Rot
Prwata Alias Pind.3                                         'Programmwahltaster
Speed Alias Pind.2


Declare Sub Pr_1
Declare Sub Pr_2
Declare Sub Pr_3


'###Hauptschleife###

Do

Debounce Prwata , 0 , Pr_wechs , Sub                        'Programmwahltaster entprellen und zu Pr_wechsel springen
Debounce Speed , 0 , S_change , Sub

Gosub Pr_wechsel
Loop

'###OnTimer1###

Ontimer1:
Timer1 = Timervorgabe
If Zler >= 3 Then                                           'Wenn Zler = 10 dann...
Zler = 0                                                    '...Zler = 1
End If
Incr Zler                                                   'Zler + 1

Return



'###Unterprogramme###

S_change:

If Schneller = 3 Then
 Schneller = 0
End If

Incr Schneller

If Schneller = 0 Then
 Timervorgabe = 7936
End If

If Schneller = 1 Then
 Timervorgabe = 36736
End If

If Schneller = 2 Then
 Timervorgabe = 46336
End If

Return


Pr_wechs:
   Incr Pr1_3
   Gosub Pr_wechsel
Return


Pr_wechsel:

If Pr1_3 >= 3 Then                                          'Wenn Pr1_3 = 2 dann...
 Pr1_3 = 0                                                  '...Pr1_3 = 0
End If

If Pr1_3 = 0 Then                                           'Wenn Pr1_3 = 0 dann...
 Gosub Pr_1
End If                                                      '...zum Sub PR_1 springen

If Pr1_3 = 1 Then                                           'Wenn Pr1_3 = 1 dann...
 Gosub Pr_2                                                 '...zum sub PR_2 springen
End If

If Pr1_3 = 2 Then
 Gosub Pr_3
End If

Return