Sorry,

hier der Code.

Code:
$regfile = "m32def.dat"
 $framesize = 40
 $swstack = 10
 $hwstack = 32
 $crystal = 8000000
 $baud = 4800






'--------------------------------------------------------------Timer deffinieren


'Hier wird der Timer und der Teiler festgelegt
Config Timer1 = Timer , Prescale = 256


'Hier wird das Unterprogramm festgelegt, das
'in dem von ihnen eingestellten Intervall (1 Sekunde) aufgerufen wird
On Timer1 Timer_irq

'Diese Vorgabe wurde berechnet um die genaue Intervallfrequenz zu erreichen
Const Timervorgabe = 34286


'Hier werden die Timer aktiviert
Enable Timer1
Enable Interrupts


Dim Sekunde As Byte                                         'Sekunde

 Dim Minute As Byte                                         'Minute
 Dim Stunde As Byte                                         'Stunde
 Dim Tag As Byte                                            'Tag



'--------------------------------------------------------- Variablen deffinieren


Const Dekaden = 9                                           ' Anzahl der Anzeigen (dekaden)


'Variablen Sieben Segment Decoder
Declare Function Segmentdecoder(byval C As String) As Byte

Declare Sub Showtime()




Dim Anzeigetext As String * 9



'------------------------------------------------Variablen 7 Segment Dekodierung

Dim Segment(dekaden) As Byte
Dim Zahl(dekaden) As Byte                                   ' Array für die fertig berecheten Segmente
Dim Zahldpp As Byte                                         ' Zahl mit Doppltpunkt für Uhrzeit
Dim Zahlpkt As Byte                                         ' Zahl mit Punkt für Datum
Dim Digit As Byte
Dim Adress As Integer
Dim D As Byte
Dim L As Byte                                               ' Variable für Länge des Strings
Dim X As Byte                                               ' Zählervariable
Dim Pos As Byte                                             ' Variable für MID Funktion
Dim Z As String * 1
Dim Segcode As Byte


' Variablen für die einzelnen Digits  ------------------------------------------

Dim Z1 As Byte                                              'Zeile 1
Dim Z2 As Byte                                              'Zeile 2
Dim Z3 As Byte                                              'Zeile 3

'Dim Z1 As Word                                              'Zeile 1
'Dim Z2 As Word                                              'Zeile 2
'Dim Z3 As Word                                              'Zeile 3


Z1 = 1
Z2 = 2
Z3 = 3



' String Werte zwecks Anzeige

Dim Str_z1 As String * 3
Dim Str_z2 As String * 3
Dim Str_z3 As String * 3

Dim L_str_z1 As Byte                                        ' Länge des Strings
Dim L_str_z2 As Byte
Dim L_str_z3 As Byte



Dim Anzeigezahl As String * 9                               'Wird an Display angezeigt


Dim Zeile As Byte                                           'Die ausgewählte Zeile
Zeile = 1




'Variable für Fernbedienung

' Lib für die Fernbedienung RC5 laden
$lib "mcsbyte.lbx"

Config Rc5 = Pinb.2                                         ' Eingabgspin des RC5 Empfängers
Enable Interrupts
Dim Address As Byte , Command As Byte
Dim S As Byte

Enable Interrupts


'-------------------------------- I2C Konfigurieren ----------------------------

Config Scl = Portc.0                                        ' Ports fuer I2C-Bus
Config Sda = Portc.1
Config I2cdelay = 5
I2cinit



'Slave adressen des PCF 8574 I/O IC
'Für die ersten 6 digits werden PCF8574AP verwendet. Für die letzten 3 Digits PCF8574P

Const Adr_digit1 = &B01110000                               ' Adresse Stelle 1
Const Adr_digit2 = &B01111000                               ' &B1001110
Const Adr_digit3 = &B01110100                               '      |||
Const Adr_digit4 = &B01111100                               '      |||
Const Adr_digit5 = &B01110010                               '      |||
Const Adr_digit6 = &B01111010                               '      |||
Const Adr_digit7 = &B01001100                               '      |||
Const Adr_digit8 = &B01000010                               '      ||A0
Const Adr_digit9 = &B01001010                               '      |A1
                                                             '      A2



'---------------------------- Hauptprogram -------------------------------------

Do

'Waitms 500

'Print "Warte auf RC5 Signal..."


Enable Interrupts
'reserve space for variables


'now check if a key on the remote is pressed
'Note that at startup all pins are set for INPUT
'so we dont set the direction here
'If the pins is used for other input just unremark the next line
'Config Pind.2 = Input
Getrc5(address , Command)
'we check for the TV address and that is 0


 If Address = 0 Then
'   Print "Es wurde ein Signal von der Fernbedienung empfangen"

   Command = Command And &B01111111

   Print "Adresse =" ; Address ; "      Command = " ; Command


  ' Verzweigung zu den verschiedenen Arbeitsmoduse

  Select Case Command

    'Case 17 : Gosub Taste1                                      'Taste 1

    'Case 18 : Gosub Taste2                                      'Taste 2

    'Case 19 : Gosub Taste3                                      'Taste 3

     Case 28 : Gosub Line_down                              'Zeile auf

     Case 27 : Gosub Line_up                                'Zeile ab

     Case 36 : Gosub Wert_up                                'Erhöhen

     Case 37 : Gosub Wert_down                              'Reduzieren

'     Case 40 : Gosub Ok                                     'Taste OK

    'Case 42 : Gosub Ausgang                                     'Taste exit

    'Case 32 : Gosub Aus_einschalten                             'Taste power


   End Select


 End If


If Sekunde = 61 Then
   Sekunde = 1
   Incr Z1
     Gosub Umwandeln

     Gosub Uebertragen
   Incr Minute
End If


If Minute = 61 Then
   Minute = 1
   Incr Stunde
End If


If Stunde = 25 Then
   Stunde = 1
   Incr Tag
End If



Loop


Wert_up:
'-------------------------------------------------------------------Wert erhöhen

 Select Case Zeile

   Case 1 : Incr Z1
   Case 2 : Incr Z2
   Case 3 : Incr Z3

 Case Else : Print "------Überlauf Zahl + " ; "Position-" ; Zeile ; "Zahl-" ; Z1 ; "---" ; Z2 ; "---" ; Z3;

 End Select



    If Z1 = 255 Then
   Z1 = 0
  End If

    If Z2 = 255 Then
   Z2 = 0
  End If

    If Z3 = 255 Then
   Z3 = 0
  End If

Gosub Umwandeln

Gosub Uebertragen

Return



Wert_down:
'----------------------------------------------------------------Wert reduzieren

 Select Case Zeile

   Case 1 : Decr Z1
   Case 2 : Decr Z2
   Case 3 : Decr Z3

 Case Else : Print "------Überlauf Zahl + " ; "Position-" ; Zeile ; "Zahl-" ; Z1 ; "---" ; Z2 ; "---" ; Z3;

 End Select



    If Z1 = 0 Then
   Z1 = 255
  End If

    If Z2 = 0 Then
   Z2 = 255
  End If

    If Z3 = 0 Then
   Z3 = 255
  End If

Gosub Umwandeln

Gosub Uebertragen

Return



'------------------------------------------------------------Einstellmenü Zeiger

'------------------------------------------------Zeiger eine POsition nach unten

Line_up:
Print "------------------------------------------Line UP------------------------"

Incr Zeile

Posit_up:

Select Case Zeile

        Case 1 : Gosub Blinken_z1
        Case 2 : Gosub Blinken_z2
        Case 3 : Gosub Blinken_z3

End Select



  If Zeile > 3 Then

    Zeile = 3
    Goto Posit_up
  End If

Gosub Umwandeln

Gosub Uebertragen

Return



Line_down:

Print "------------------------------------------Line Down------------------------"

Decr Zeile


'------------------------------------------------Zeiger eine POsition nach unten

Posit_down:

Select Case Zeile

        Case 1 : Gosub Blinken_z1
        Case 2 : Gosub Blinken_z2
        Case 3 : Gosub Blinken_z3

End Select



  If Zeile < 1 Then

    Zeile = 1
    Goto Posit_down
  End If

Gosub Umwandeln

Gosub Uebertragen

Return


'----------------------------------------------------Bin Daten in asc umwandeln
Umwandeln:




Str_z1 = Str(z1)
Str_z2 = Str(z2)
Str_z3 = Str(z3)

'-----------------------------------------------------Länge der Zahlen ermitteln

L_str_z1 = Len(str_z1)
L_str_z2 = Len(str_z2)
L_str_z3 = Len(str_z3)

'------------------------------------------------------mit Leerzeichen auffüllen

Select Case L_str_z1

 Case 1 : Str_z1 = " " + " " + Str_z1
 Case 2 : Str_z1 = " " + Str_z1

End Select


Select Case L_str_z2

 Case 1 : Str_z2 = " " + " " + Str_z2
 Case 2 : Str_z2 = " " + Str_z2

End Select


Select Case L_str_z3

 Case 1 : Str_z3 = " " + " " + Str_z3
 Case 2 : Str_z3 = " " + Str_z3

End Select

'Str_z1 = Format(str_z1 , "000")
'Str_z2 = Format(str_z2 , "000")
'Str_z3 = Format(str_z3 , "000")




Anzeigezahl = Str_z1 + Str_z2 + Str_z3

Print " Anzeigezahl -----------------------------------= " ; Anzeigezahl

Return



'------------------------------------------------Daten an die Anzeige übertragen
Uebertragen:

    L = Len(anzeigezahl)                                    ' ermittle Länge des Strings
    If L > Dekaden Then L = Dekaden                         ' Verhindern dass mehr Anzeigen berechent werden
                                                            ' als definiert und vorhanden sind.
    For X = 1 To L
      Pos = L - X
      Pos = Pos + 1                                         ' Beginne mit den Einer Stellen (rechts)
      Z = Mid(anzeigezahl , Pos , 1)                        ' Picke eine einzelnes Zeichen het_aussen

      Segcode = Segmentdecoder(z)                           ' Ermittle den 7 Segment Code für die Segmente

      Segment(x) = Segcode

'Print "L= " ; L
'Print "Pos= " ; Pos
'Print "segcode= " ; Segcode

    Next X


' Berechnet die Segmente der einzelnen Dekaden
' und legt diese im Array Segment() ab.

   For Digit = 1 To Dekaden
      Zahl(digit) = Segment(digit)
   Next Digit





'-------------- Daten  über I2C an die Anzeigen senden ----------


   I2csend Adr_digit9 , Zahl(1)                             'Daten zu Digit 1
   I2csend Adr_digit8 , Zahl(2)                             'Daten zu Digit 2
   I2csend Adr_digit7 , Zahl(3)                             'Daten zu Digit 3
   I2csend Adr_digit6 , Zahl(4)                             'Daten zu Digit 4
   I2csend Adr_digit5 , Zahl(5)                             'Daten zu Digit 5
   I2csend Adr_digit4 , Zahl(6)                             'Daten zu Digit 6
   I2csend Adr_digit3 , Zahl(7)                             'Daten zu Digit 7
   I2csend Adr_digit2 , Zahl(8)                             'Daten zu Digit 8
   I2csend Adr_digit1 , Zahl(9)                             'Daten zu Digit 9




Return


'-------------------- Blinken bei Positionswechsel -----------------------------
Blinken_z1:
  I2csend Adr_digit1 , &B00000000
  I2csend Adr_digit2 , &B00000000
  I2csend Adr_digit3 , &B00000000
  Waitms 200
  I2csend Adr_digit1 , &B11111111
  I2csend Adr_digit1 , &B11111111
  I2csend Adr_digit1 , &B11111111
Return


Blinken_z2:
  I2csend Adr_digit4 , &B00000000
  I2csend Adr_digit5 , &B00000000
  I2csend Adr_digit6 , &B00000000
  Waitms 200
  I2csend Adr_digit4 , &B11111111
  I2csend Adr_digit5 , &B11111111
  I2csend Adr_digit6 , &B11111111
Return


Blinken_z3:
  I2csend Adr_digit7 , &B00000000
  I2csend Adr_digit8 , &B00000000
  I2csend Adr_digit9 , &B00000000
  Waitms 200
  I2csend Adr_digit7 , &B11111111
  I2csend Adr_digit8 , &B11111111
  I2csend Adr_digit9 , &B11111111
Return



'-------------------------------------------------Der Timer wird hier aufgerufen
Timer_irq:
  Timer1 = Timervorgabe

   Incr Sekunde


Return





'----------------- Decodierung für die 7 Segment Anzeige -----------------------

Function Segmentdecoder(byval C As String) As Byte
   Select Case C
      Case "0" : Segmentdecoder = &B00111111                ' Bit 0 = Segment A
      Case "1" : Segmentdecoder = &B00000110                ' Bit 1 = Segment B
      Case "2" : Segmentdecoder = &B01011011                ' Bit 2 = Segment C
      Case "3" : Segmentdecoder = &B01001111                ' Bit 3 = Segment D
      Case "4" : Segmentdecoder = &B01100110                ' Bit 4 = Segment E
      Case "5" : Segmentdecoder = &B01101101                ' Bit 5 = Segment F
      Case "6" : Segmentdecoder = &B01111101                ' Bit 6 = Segment G
      Case "7" : Segmentdecoder = &B00000111                ' Bit 7 = Segment dp
      Case "8" : Segmentdecoder = &B01111111
      Case "9" : Segmentdecoder = &B01101111
      Case "." : Segmentdecoder = &B10000000
      Case "C" : Segmentdecoder = &B00111001                'C Buchstabe
      Case "-" : Segmentdecoder = &B01000000                'Minus Zeichen
      Case "°" : Segmentdecoder = &B01100011                'Grad Zeichen Alt 248
      Case " " : Segmentdecoder = &B00000000                'Leerzeichen

      Case Else : Segmentdecoder = &B00000000               ' unerwartes Zeichen keine Ausgabe
End Select

                                             'Bit   Segmente

                                             '   || G | F | E | D | C | B | A |
                                             ' --||---+---+---+---+---+---+---|
                                             ' 0 || 0 | 1 | 1 | 1 | 1 | 1 | 1 |
                                             ' 1 || 0 | 0 | 0 | 0 | 1 | 1 | 0 |
                                             ' 2 || 1 | 0 | 1 | 1 | 0 | 1 | 1 |
                                             ' 3 || 1 | 0 | 0 | 1 | 1 | 1 | 1 |
                                             ' 4 || 1 | 1 | 0 | 0 | 1 | 1 | 0 |
                                             ' 5 || 1 | 1 | 0 | 1 | 1 | 0 | 1 |
                                             ' 6 || 1 | 1 | 1 | 1 | 1 | 0 | 1 |
                                             ' 7 || 0 | 0 | 0 | 0 | 1 | 1 | 1 |
                                             ' 8 || 0 | 1 | 1 | 1 | 1 | 1 | 1 |
                                             ' 9 || 1 | 1 | 0 | 1 | 1 | 1 | 1 |
                                             ' C || 0 | 1 | 1 | 1 | 0 | 0 | 1 |
                                             ' - || 1 | 0 | 0 | 0 | 0 | 0 | 0 |
                                             ' ° || 1 | 1 | 0 | 0 | 0 | 1 | 1 |


End


Zitat Zitat von PicNick
.. eine Fehlermeldung welche ich nicht deuten kann.
Wenn du sie auch anhängst, können wir es ja mal versuchen, zu deuten.
[/code]