Bascom - Variable wird nicht in Hauptprogramm übergeben

OP #1010249
Hallo zusammen,
ich habe da immer noch das Problem das mir die Variable aus eienm 
Interrupt nicht ins Hauptprogramm übernommen wird, der Inhalt scheint 
immer "Null" zusein.
kurze Beschreibung: Mit dem Interrupt INT0 zähle ich die Variable 
Zaehlerirq0 hoch, im Überlauf Interrupt von Timer1 wird die Variable 
Zaehlerirq0 an die Variable Drehfrequenz übergeben und anschließend für 
den nächsten Zählinterval auf Null gesetzt. Mit dem Timerreload wird der 
Überlauf auf einmal in der Sekunde festgelegt. Anschließend erfolgt ein 
Sprung in die Routine Aktu, wo die Ausgabe der Werte erfolgt. Die 
Ausgabe der Drehfrequenz erfolgt auch einwandfrei, jedoch die 
Weiterverarbeitung der Variable in der Hauptschleife erfolgt nicht die 
Multiplikation bleibt immer NULL. Setze ich die Multiplikation " Ausgabe 
= Drehfrequenz * 60" mit in die Aktu Routine wird sie durchgeführt und 
das Ergebnis wird auch richtig ausgegeben also auch tatsächlich 
berechnet.

Wo liegt der Fehler, liegt er bei der Deklaration, reicht "Dim" alleine 
nicht aus ????????

Hilfe !!!!!!!!!

Gruß
Schorschi
Angehängte Dateien:
OP #1010327
Hallo Paul,
beim Sprung aus der Interruptroutine in die Aktu Routine ist der Wert 
noch da, aber im Hauptprogramm für die Berechnung nicht. Da liegt mein 
Problem. Wenn es mit dem Goto Sprung zutun hat, wären doch die Daten in 
der Aktu Routine auch nicht mehr da - oder liege ich da falsch.
Die Übergabe des Wertes an die Drehfrequenz Variable ist erfolgt sonst 
wäre sie in Aktu nicht zusehen und sollte doch so auch im Hauptprogramm 
zur Verfügung stehen.

-----------------------------------------------------------------------
""Du kannst nicht mit "Goto" aus der Interruptroutine heraushüpfen. Das
hinterläßt Trümmer auf dem Stack.

wie sollte ichs sonst anstellen ???? Aus dem Hauptprogramm einen 
Interval mit Wait einrichten und dann in die Ausgabe "Aktu" springen ??
------------------------------------------------------------------------

Gruß
Schorschi
#1010361
Einfach den Timer-Interrupt mit GOTO verlassen ist -wie Paul schon 
sagte- böse. Das geht so nicht!
WENN, dann müsstest du zumindest statt GOTO ein GOSUB verwenden, aber 
auch das tut man nicht.

Setzte in deiner Timerinterruptroutine ein Flag, auf das du in der 
Mainloop wartest.
Wenn dieses Flag gesetzt ist, dann machst du die Ausgabe, löschst das 
Flag und fertig.

so z.B:
1
Dim SekFlag as Byte
2

3
[...]
4

5
Do
6
   If SekFlag = 1 then
7
     SekFlag = 0
8

9
     Ausgabe = Drehfrequenz * 60
10
     Print #1 , "Drehfrequenz: " ; Drehfrequenz
11
     Print #1 , "Ausgabe: " ; Ausgabe
12
     Close #1
13
   End If
14
Loop
15

16

17
End
18

19

20

21
'Pro Impuls ein Aufruf
22
Irq0:
23
   Incr Zaehlerirq0
24
Return
25

26
'Pro Sekunde ein Aufruf
27
Timer1_isr:
28
   Timer1 = Timervorgabe
29

30
   Drehfrequenz = Zaehlerirq0
31
   Zaehlerirq0 = 0
32
   SekFlag = 1
33
Return

Erwin

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.