Hallo,
ich habe eine Relaissteuerung seit längerem in Betrieb.
Nun sind Relais dazugekommen und da ist der Fehler entstanden.

Anscheinend funktioniert nur 0-15 als Wert und ich benötige mindestens 16, besser mehr.
Was muss ich ändern, damit ich mehr eintragen kann?

es geht um diesen Programmteil: L.16 geht nicht mehr
Code:
Dim T1 As Byte , T2 As Byte  
Dim L As Integer 

'...

Setzen:
     Portd.2 = L.1
     Portd.4 = L.2
     Portc.5 = L.3
     Portc.4 = L.4
     Portc.3 = L.5
     Portc.2 = L.6
     Portc.1 = L.7
     Portc.0 = L.8
     Portb.5 = L.9
     Portb.4 = L.10
     Portb.3 = L.11
     Portb.2 = L.12
     Portb.1 = L.13
     Portb.0 = L.14
     Portd.7 = L.15
     'Portd.6 = L.16
Return
Hier das (fast) ganze Programm:

Code:
'Timer0 = 8 Bit
  Config Timer0 = Timer , Prescale = 8
  On Timer0 Timer0_irq
  Const Timervorgabe_t0 = 78                                'Timeraufruf alle 178µs (10 Samples = 1 Bit = 1,778ms)
  Enable Timer0                                             'Hier werden die Timer aktiviert
  Enable Interrupts


'16Bit Timer:
Config Timer1 = Timer , Prescale = 64
On Timer1 Timer1_irq
Const Timervorgabe_t1 = 64286                               '100 mal pro Sekunde @ 8MHz
  Enable Timer1                                             'Hier werden die Timer aktiviert
  Enable Interrupts

'-------------------------------------------------------------------------------
'Variablen:
'-------------------------------------------------------------------------------

Dim Address_rc5 As Byte , Command_rc5 As Byte , Rc5_flag As Bit , Command_old As Bit

'Taste 1-6 auf der FB
Dim T1 As Byte , T2 As Byte

Dim Status As Byte                                          'zeigt den Status der gewaehlten Lampe an NICHTS / AN / AUS

Dim Empfang As Bit                                          'ist 0 wenn kein empfang (also 255 von Variable address)

Dim Zaehler As Byte                                         'wenn = 100 dann 1 sec um
Dim L As Integer

Dim Setzen_merker As Bit                                    '1 = setzenroutine freigegeben
Dim Z_timer1 As Byte                                        '100 = 1 sec

Input_pin Alias Pind.3

'Set Portd.3                                                'Pull Up für Empfänger

Const An = 1
Const Aus = 0
Const Nichts = 255


  'Timing für 10 Samples Per Bit = 1,778ms
  Const Samples_early = 8                                   'Flanke Frühestens Nach 8 Samples
  Const Samples_late = 12                                   'Flanke Spätestens Nach 12 Samples
  Const Samples_min = 3                                     'Flanke Vor 3 Samples - > Paket Verwerfen

  'Variablen der IR-ISR
  Dim Sample As Byte                                        'eigentlich Bit, spart aber 46Byte ROM
  Dim Ir_lastsample As Byte                                 'zuletzt gelesenes Sample
  Dim Ir_bittimer As Byte                                   'zählt die Aufrufe von Timer_IRQ
  Dim Ir_data_tmp As Word                                   'Bitstream
  Dim Ir_bitcount As Byte                                   'Anzahl gelesener Bits



'-------------------------------------------------------------------------------
'Vor Programmstart:

Zaehler = 0
Status = Nichts
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'Hauptprogramm Do...Loop
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
Print "Programm Start 38400 Baud..."
Do


If Rc5_flag = 1 Then
   Reset Rc5_flag

   If Address_rc5 = 10 Then                                 'Adresse 10=ASAT  /(0=TV FB)
         Incr Zaehler
          If Command_rc5.7 <> Command_old Then
            Zaehler = 0                                     'wenn ungleich also neuer Befehl, dann Zaehler zurücksetzen
            Status = Nichts
            Command_old = Command_rc5.7
          End If

        Reset Command_rc5.7                                 'reset toggle bit

        'Print Command_rc5

        Select Case Command_rc5
           Case 0 : Gosub Alles_aus                         'Print "CASE = 0"
           Case 1 : T1 = 1
                     T2 = 2
                     Gosub Lampe1

           Case 2 : T1 = 3
                     T2 = 4
                     Gosub Lampe1

           Case 3 : T1 = 5
                     T2 = 6
                     Gosub Lampe1

           Case 4 : T1 = 7
                     T2 = 8
                     Gosub Lampe1

           Case 5 : T1 = 9
                     T2 = 10
                     Gosub Lampe1

           Case 6 : T1 = 11
                     T2 = 12
                     Gosub Lampe1

           Case 7 : Gosub Gruppe_7

           Case 9 : Gosub Gruppe_9

           Case 12 : Gosub Alles_aus

           Case Else : Print "Fehler: " ; Command_rc5
        End Select
   End If
End If
  '_______________________________________________________________________________
If Z_timer1 > 40 And Setzen_merker = 1 Then                 'Schaltvert für Z_Timer1 ist Quarzfrequenz abhängig und soll bei langem Tastendruck verhindern
Setzen_merker = 0                                           'dass wenn eine Lampe an ist und die zweite hinzukommt, dass die erste kurz aus geht!
Gosub Setzen
End If


Loop
End



'-------------------------------------------------------------------------------
'Relais ansteuern
'-------------------------------------------------------------------------------

'Status = so wie der aktuelle Status IST (nicht wie er sein soll!!!)


Lampe1:
'=============
'aktuellen Status auslesen und setzen
         If Status = Nichts Then
            If L.t1 = 0 Then
               Status = Aus
            Else
               Status = An
            End If
         End If




         If Zaehler = 0 Then                                'WENN KURZ GEDRÜCKT WURDE
         'Print Zaehler ; " = Zaehler = 0"
            If Status = Aus Then                            'wenn lampe eingeschaltet werden soll dann
               Set L.t1
               'Print "L" ; T1 ; ":1"

            Else                                            'wenn lampe 1 = an

               If L.t2 = 1 Then
                  Reset L.t2
                  'Print "L" ; T2 ; ":0"
               Else
                  Reset L.t1
                  'Print "L" ; T1 ; ":0"
               End If

            End If
         End If





'WENN LANGE GEDRÜCKT WURDE
         If Zaehler > 2 Then
         'Print Zaehler ; " = Zaehler > 2"

            If Status = Aus Then
               Set L.t2
               'Print "Lange" ; T2 ; ":1"
            Else
               If L.t2 = 0 Then
                  Set L.t1
                  Set L.t2
                  'Print "Lange" ; T1 ; ":1 und " ; T2 ; ":1"
               End If
            End If
         End If

Setzen_merker = 1
'Print "Setzen_merker = " ; Setzen_merker

If Zaehler = 0 Then                                         'die Variable soll nur bei kurzem Tastendruck eine Zeitverzögerung machen
Z_timer1 = 0                                                'Timer1 zurücksetzen
End If

'Gosub Setzen
Return

'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
'XXXXXXXXX  P  R  O  B  L  E  M   XXXXXXXXXXXXXXXXXXXXXXXXX
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Setzen:
'Print " S E T Z E N "
'Print Zaehler ; " Zaehler"
     Portd.2 = L.1
     Portd.4 = L.2
     Portc.5 = L.3
     Portc.4 = L.4
     Portc.3 = L.5
     Portc.2 = L.6
     Portc.1 = L.7
     Portc.0 = L.8
     Portb.5 = L.9
     Portb.4 = L.10
     Portb.3 = L.11
     Portb.2 = L.12
     Portb.1 = L.13
     Portb.0 = L.14
     Portd.7 = L.15
     'Portd.6 = L.16

     Print L.1 ; L.2 ; L.3 ; L.4 ; L.5 ; L.6


Return


Timer1_irq:
Timer1 = Timervorgabe_t1
   If Z_timer1 < 255 Then
      Incr Z_timer1
   End If

Return

'*************************************************************************************
'Quelle: Bascom-Forum

Timer0_irq:
  Timer0 = Timervorgabe_t0
  Sample = Not Input_pin

  'bittimer erhöhen (bleibt bei 255 stehen)
  If Ir_bittimer < 255 Then Incr Ir_bittimer

  'flankenwechsel erkennen
  If Ir_lastsample <> Sample Then

     If Ir_bittimer <= Samples_min Then
       'flanke kommt zu früh: paket verwerfen
       Ir_bitcount = 0
     Else
       'nur Flankenwechsel in Bit-Mitte berücksichtigen
       If Ir_bittimer >= Samples_early Then
           If Ir_bittimer <= Samples_late Then
             'Bit speichern
              Shift Ir_data_tmp , Left , 1
              Ir_data_tmp = Ir_data_tmp + Sample
              Incr Ir_bitcount
           Else
              'Flankenwechsel zu spät: Neuanfang mit gemessener Flanke
              Ir_bitcount = 1
              Ir_data_tmp = Sample
           End If
           'bittimer zurücksetzen wenn Timer > Samples_early
           Ir_bittimer = 0
       End If
     End If

    'Kontrolle des Startbits auf 1
     If Ir_bitcount = 1 Then Ir_bitcount = Ir_data_tmp.0

     'Alle 14 Bits gelesen?
     If Ir_bitcount >= 14 Then
       Command_rc5 = Ir_data_tmp                            'Bit 6 und 7 siehe unten
       Shift Ir_data_tmp , Right , 6
       Address_rc5 = Ir_data_tmp And &B00011111
       'For extended RC5 code, the extended bit is bit 6 of the command.
       Command_rc5.6 = Not Ir_data_tmp.6
       'The toggle bit is stored in bit 7 of the command
       Command_rc5.7 = Ir_data_tmp.5
       'Paket erfolgreich gelesen
       Set Rc5_flag
       'paket zurücksetzen
       Ir_bitcount = 0
     End If

  End If
  'sample im samplepuffer ablegen
  Ir_lastsample = Sample

Return
vielen Dank, Tobias