Forum: Mikrocontroller und Digitale Elektronik Variabeln ändern in ISR


von AT32_Bascom_Programmierer (Gast)


Lesenswert?

Hallo ich sitze nun schon mehrere Stunden an einem kniffligen Problem...
in einer Interruput Servis Routine gebe ich einer Variablen einen Wert 
zwischen 0 und 4 ( mit einbegriffen) . wenn ich aber nun aus der ISR 
Raus springe nimmt die Variable den Wert 0 an woran liegt das? sie wird 
nirgends  auf 0 gesetzt...ich verstehe es einfach nicht...

Ich arbeite mit Bascom!

Gruss AT32

von blubb (Gast)


Lesenswert?

deinen quelltext ??
wo isser ??

von ralf (Gast)


Lesenswert?

globale Variable?

von AT32_Bascom_Programmierer (Gast)


Angehängte Dateien:

Lesenswert?

hallo hier ist der Hauptteil, der ISR im Anhang ist mein Komplettes 
Programm

ich muss bemerken das ich noch beim programmieren bin und noch nicht 
alles Perfekt ist... aber ich möchte eins nach dem andren machen...

Hoffe ihr erkennt was...

'*********************************************************************** 
***


 If Taste = "#" Then                                   'wird die taste 
"#" gedrückt werden  soll eine Ziffer im Passwort gelöscht werden

         Anzahl = Len(eingabe)

               If Anzahl < 2 Then                           ' ist die 
Anzahl kleiner als 2 , also 1 oder 0
                  Anzahl = 0                                ' wird sie 0
                  Eingabe = ""                              'Der string 
"Eingabe" wird gelöscht
               Else                                         'sollte die 
Zahl grösser oder gleich 2 sein,
                  Anzahl = Anzahl - 1                       'wird Anzahl 
um eins minimiert
                  Eingabe = Left(eingabe , Anzahl)          'auch der 
string wird um ein Zichen minimiert
               End If


      Else                                                  'sollte eine 
andere Taste gedrücht werden:

               If Len(eingabe) < 4 Then                     'muss die 
gesamt länge unter 4 zeichen sein
                  Eingabe = Eingabe + Chr(taste)            'dann wird 
eine Ziffer dran gehangen
               End If
      End If



    End If

          Locate 2 , 1                                      'der gesamte 
String wird angezeigt "zur Kontrolle"
           Lcd Eingabe ; "  "
            Waitms 100                                      ' durch den 
Getadc Befehl müssen 100ms gewachtet werden


    If Len(eingabe) = 4 Then                                'sollte der 
eingegebene Code dem vorgegebenen Password nicht entsprechen, dann




         If Taste = "*" Then

            Incr Versuche




               If Eingabe <> Passwort Then

               Passwort_stimmt = 0
                  Locate 2 , 10                             'wird ein 
Nicht OK angezeigt
                     Lcd "NOK"
                  Wait 1




                     If Versuche >= 3 Then

                         Schluessel_sperren = Schluessel_nummer

                        Locate 2 , 1


                           Lcd "3 Versuche      " 
'!!!!!!!!!!!!!!!              'nur zum Test hier kommt später ein 
Zeitvergleich und schlässel wird für eine gewisse Zeit gesperrt



                              Wait 1 
'!!!!!!!!!!!!!!!!!!!!!!!!!nur zur Anzeige...

                              Enable Timer1                 '???ovf1

                           Entsperren = Zeitvariable + 15   ' Variable 
die Minuten hochzählt + 15 !!!!!!!!!
                      End If



                     If Versuche >= 3 Then
                          Versuche = 0                      'somit 
erhält die erste if Versuche schleige ein end IF <<<<<<<Test!!!!!!
                          Return

                     End If


               Else                                         'ansonsten

                  Locate 2 , 10
                     Lcd "OK "                              'ein ok

                  Versuche = 0

                  Portd.6 = 1                               'und eine 
Led an PortD.6 leuchtet (ist nur zum testen)
                     Wait 1
                  Portd.6 = 0
                     Waitms 500

                  Passwort_stimmt = 1                       'wenn das 
Passwort stimmt (1) dann kann aus der Do loop schleife gesprungn werden.
                  Schluessel_sperren = 0
               End If


            Eingabe = ""                                    'der String 
gelöcht
            Locate 2 , 1 : Lcd "                "           ' dann wird 
die anzeige überschrieben

         End If


    End If
                                                             'und das 
wars
Loop Until Passwort_stimmt = 1

Reti

von AT32_Bascom_Programmierer (Gast)


Lesenswert?

mir fällt grade auf das ich die Uhr schon mit drin getan habe... lasst 
euch bitte nicht von der ersten Do loop schleife verwirren... die wird 
noch nicht benutzt und kann raus raus genommen genommen werden...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.