Hallo linux_80,

ich habe jetzt Version 1.11.9.2 installiert und habe NUR die Zeile: Case " " : Portb = 0
eingefügt und schon kommt der Fehler.

Kannst du bitte den Code mal bei die compilieren und mir sagen ob es geht?

Tobas

Code:
'-------------------------------------------------------------------------------

$regfile = "m8def.dat"                                      'AT-Mega8
$crystal = 8000000                                          'Quarz: 8 MHz
$baud = 9600                                                'Baudrate der UART: 9600 Baud
'-------------------------------------------------------------------------------
'Konfiguration Ein- / Ausgänge
Ddrb = &B11111111                                           '1 Ausgang, 0 Eingang => Pin PB7-0 als Ausgang
Ddrc = &B1111110                                            '1 Ausgang, 0 Eingang => Pin PC6-1 als Ausgang; 0 als Eingang
Ddrd = &B11110001                                           '1 Ausgang, 0 Eingang => Pin PD7-4,0 als Ausgang; 1-3 als Eingang

'-------------------------------------------------------------------------------
'Konfiguration LCD
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.0 , Rs = Portc.6
Cursor Off Noblink
'-------------------------------------------------------------------------------
'Konfiguration ADC
Config Adc = Single , Prescaler = Auto , Reference = Avcc

'-------------------------------------------------------------------------------
'Konfiguration Timer0
Config Timer0 = Timer , Prescale = 1024
On Timer0 Timer0_isr
Const Timervorgabe0 = 230                                   '312 mal / Sekunde!!!
Enable Timer0
Enable Interrupts


'-------------------------------------------------------------------------------
'Konfiguration Timer1
Config Timer1 = Timer , Prescale = 256
On Timer1 Timer1_isr
Const Timervorgabe1 = 55118                                 '3 mal / Sekunde!!!
Enable Timer1
Enable Interrupts


'-------------------------------------------------------------------------------
'Variablen Anzeige:
Dim Wert As Long                                            ' (-2147483648 bis 2147483647)
Dim Wert_pos As Word                                        'gewandelter wert
Dim Negativ As Bit                                          'Merker = 1 wnn Wert negativ!

' variablen für die display routine
Dim Wertstr As String * 5
Dim Y As Byte
Dim Tempbyte As Byte
' Variable für Digitansteuerung
Dim Digit As Byte
'Anzeige im Ganzen
Dim Fivedigitdisplay As String * 5
Dim Umdreh As Byte

'führende Nullen entfernen
Dim Digit_aus As Bit                                        'Merker =0 wenn Stelle =0



'ADC
Dim Analog_in0 As Long                                      'Word                                      '=0-1023 vom Analogeingang
Dim Pro1 As Integer
Dim Pro2 As Single
Dim Pro3 As Integer
Dim Proz_anzeige As Byte


'Variablen LCD
Dim Ani_1 As Integer                                        'Zähler für Startannimation LCD
Dim Ende As Word                                            'zum Animation beenden


'Variablen Taster
Dim S1 As Bit                                               'Schalter 1
Dim S2 As Bit                                               'Schalter 2
Dim S2_m As Bit
Dim S3 As Bit                                               'Schalter 3
Dim S3_m As Bit                                             'Schalter 3 MERKER
Dim Taste_s1 As Word

'Programmverteilung über Timer0
Dim Zeit As Word                                            'wird 312 mal / Sekunde mit 1 addiert


'Variablen zum testen......
Dim Test2 As Integer                                        'zum hochzählen zum testen
Dim Test As Integer


'-------------------------------------------------------------------------------
'Annimation LCD


Goto Sprung

Do
Cls


  For Ani_1 = 16 To 1 Step -1                               'Von 1 bis 16 wird gezählt
  Locate 1 , Ani_1                                          'Die entsprechende Position im Display anwählen.
  Lcd "> TOBIAS BLOME <"
  Waitms 250
  Next

  Locate 2 , 1
  Lcd "BI - EMR 10/2008"
  Waitms 500
  Locate 2 , 1
  Lcd "                "
  Waitms 500
  Locate 2 , 1
  Lcd "BI - EMR 10/2008"
  Waitms 500
  Locate 2 , 1
  Lcd "                "
  Waitms 500
  Locate 2 , 1
  Lcd "BI - EMR 10/2008"
  Wait 3



Loop Until Ende => 1

Sprung:
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'Setzen:

Digit_aus = 0

'alle Segmente aus
Portb = 0
Digit = 0


Test2 = 9900

Start Adc



Do





'---Programm aufteilen---
If Zeit => 150 Then                                         'also eine halbe Sekunde
Zeit = 0                                                    'Zeit zurücksetzen
End If







'---ENDE Programmaufteilung---


'zum testen um etwas zu "sehen"
  ' Incr Test

  ' If Test = 10 Then
  ' Test = 0
  ' Incr Test2
  ' End If

  ' If Test2 > 99999 Then
  ' Test2 = 0
  ' End If

Loop


'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'Sprungmarken
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------


'-------------------------------------------------------------------------------
Timer0_isr:                                                 'Timer1-Interruptroutine  (312 x pro Sekunde)
'-------------------------------------------------------------------------------
  Timer0 = Timervorgabe0

  Gosub 7seganzeige                                         'Routine für 7 Segmentanzeige

  Incr Zeit                                                 'Zeitgeber


  If S1 = 1 Then                                            'soll nur hochgezählt werden, wenn Taste links gedrückt
  Incr Taste_s1                                             'wenn taste lange gedrückt soll etwas passieren (LCD "e" wechsel)
  Else
  Taste_s1 = 0
  End If

  Return

'-------------------------------------------------------------------------------
Timer1_isr:                                                 'Timer1-Interruptroutine  (3 x pro Sekunde)
'-------------------------------------------------------------------------------
  Timer1 = Timervorgabe1

  Analog_in0 = Getadc(0)                                    'Analog in Variable schreiben

  Wert = Analog_in0 - 500                                   'Wert für Anzeige

  If Wert < 0 Then                                          'wenn wert negativ
  Wert_pos = Wert * -1
  Negativ = 1
  Else
  Wert_pos = Wert
  Negativ = 0
  End If


'Print "Digit0: " ; Digit0
'Print "Digit1: " ; Digit1
'Print "Digit2: " ; Digit2
'Print "Digit3: " ; Digit3


  Return

'-------------------------------------------------------------------------------
Analog:
'Analogeingänge Auslesen:
'-------------------------------------------------------------------------------

'Analog_in0 = Getadc(0)                                      'Analog in Variable schreiben
' Wert = Analog_in0                                          'Wert für Anzeige
' Pro1 = Analog_in0 - 204                                    'Prozent1Wert  analog 204-1005 also -204 = 0-801
' Pro2 = Pro1 * 0.12484                                      'Rechnen: 100% / max(801) = 0.12484
' Pro3 = Round(pro2)

' If Pro3 > 100 Then                                         'damit keine größenren Werte als 100% auf dem LCD stehen
'    Pro3 = 100
' End If
'
' If Pro3 < 0 Or Pro3 > 110 Then                             'wenn errechneter %Wert falsch (kleiner 0 oder größer 110 dann immer 0 (110 wegen 4-20mA Ungenauigkeit)
' Proz_anzeige = 0
' Else
' Proz_anzeige = Pro3
' End If



'-------------------------------------------------------------------------------
7seganzeige:
' Code 7 Segmentanzeige:
'-------------------------------------------------------------------------------



   'Formatiere das Display
   Wertstr = Str(wert_pos)
   Fivedigitdisplay = Format(wertstr , "00000")             'Nullen geben die Anzahl der Stellen an, damit die Stellen richtig gesetzt werden


   ' jeder Lauf durch die Hauptschleife zeigt ein anderes Digit
   Incr Digit
   'Waitms 6                                                 'Zeit für die Anzeige (je länger wait desto mehr flackert es)
   Portb = 0                                                'Ghosting vermeiden
    If Digit = 5 Then                                       'mache das , bis 5 erreicht ist
   Digit = 0

   End If

   ' addiere 1 zum Digitcounter, weil MID 1-basiert ist
   Y = Digit + 1
   ' und hol das Digit, das wir brauchen
   Wertstr = Mid(fivedigitdisplay , Y , 1)


   'Anzeige auswählen
   Tempbyte = 2 ^ Digit                                     'Tempbyte = 1,2,4,8,16

   'Digitansteuerung auf portC: PC1-5
    Umdreh = Tempbyte * 2                                   'Umdreh   = 2,4,8,16,32
     'Ansteuerung umdrehen für gemeinsame Anoden
    Portc = Umdreh                                          'Port für die Stellen auswahl



'Führende Nullen entfernen:

'INFO:
'wertstr hat immer nur eine Ziffer und wechselt also nacheinander alle 5 Stellen durch!
'wenn wertstr = 0 ist dann wird nachgesehen, in welchem Digit (Stelle) wir uns befinden.
'wenn Digit = 0 -also die ganz linke Stelle- dann auf jeden Fall Portc.1 = 0 (Transistor der Stelle) abschalten
'Digit0 = 0   -> ist nur ein Merker für die folgenden Stellen d.h.

'wenn wertstr=0 dann fragen ob Digit=1 (also 2te Stelle von links) UND der Merker Digit0=0
'dann Transistor abschalten und weiteren Merker für diese Stelle setzen

'ZehnTausenderstelle
If Val(wertstr) = 0 Then                                    'Führende Null wegblenden
   If Wert => 0 Then                                        'Wert muss = > 0 sein wegem negativen Vorzeichen
   If Digit = 0 Then : Portc.1 = 0 : Digit_aus = 0          'C.1=Digit Transistor
   End If
   End If
   Else
   Digit_aus = 1
End If
'Tausenderstelle
If Val(wertstr) = 0 Then                                    'Führende Null wegblenden
   If Digit = 1 And Digit_aus = 0 Then : Portc.2 = 0 : Digit_aus = 0       'C.2=Digit Transistor
   End If
   Else
    Digit_aus = 1
    End If
'Hunderterstelle
If Val(wertstr) = 0 Then                                    'Führende Null wegblenden
   If Digit = 2 And Digit_aus = 0 Then : Portc.3 = 0 : Digit_aus = 0       'C.3=Digit Transistor
    End If
    Else
    Digit_aus = 1
End If

''ENTFERNT WEIL MIT KOMMASTELLE UND DANN MUSS IN DER LETZTEN STELLE NE NULL STEHEN UND DARF NICHT AUSGEBLENDET WERDEN!!!
''Zehnerstelle
'If Val(wertstr) = 0 Then                                    'Führende Null wegblenden
'   If Digit = 3 And Digit_aus = 0 Then : Portc.4 = 0 : Digit_aus = 0       'C.4=Digit Transistor
'    End If
'    Else
'    Digit_aus = 1
'End If

 'Dieser Teil erledigt die Wandlung in 7 Segment Code

 'Für Anzeigen mit gemeinsamer Anode
  Select Case Val(wertstr)

           Case 0 : Portb = 126                             'NULL
           Case 1 : Portb = 12                              'EINS
           Case 2 : Portb = 182                             'ZWEI
           Case 3 : Portb = 158                             'DREI
           Case 4 : Portb = 204                             'VIER
           Case 5 : Portb = 218                             'FÜNF
           Case 6 : Portb = 250                             'SECHS
           Case 7 : Portb = 14                              'SIEBEN
           Case 8 : Portb = 254                             'ACHT
           Case 9 : Portb = 222                             'NEUN
           Case " " : Portb = 0
          'Case Else : Portb = 128                           'mittleres Segment
           Case Else : Portb = 226                          '"F"
  End Select

  'Minusvorzeichen
  If Digit = 0 And Negativ = 1 Then
  Portb = 128                                               'mittleres Segment
  End If




  'Komma setzen
  'If Portc = 2 Then Portb.0 = 1                             '4 Kommastellen
  'If Portc = 4 Then Portb.0 = 1                             '3 Kommastellen
  'If Portc = 8 Then Portb.0 = 1                             '2 Kommastellen
  If Portc = 16 Then Portb.0 = 1                            '1 Kommastelle


  'negatives Vorzeichen setzen
  If Portc = 2 Then                                         'wenn Pin gem. Anode ganz linke Stelle gesetzt
  If Wert < 0 Then                                          'wenn Wert kleiner 0
  Portb = 128                                               'Binär 1000 0000 -> Dezimal = 128 (nur Segment G)
  End If
  End If


'-------------------------------------------------------------------------------
Anzeige1:
'-------------------------------------------------------------------------------

Return


'-------------------------------------------------------------------------------
Anzeige2:
'-------------------------------------------------------------------------------
Return


'-------------------------------------------------------------------------------
Anzeige3:
'-------------------------------------------------------------------------------

Return