mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bascom - Variable wird nicht in Hauptprogramm übergeben


Autor: Georg B. (schorschi)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Paul Baumann (Gast)
Datum:

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

MfG Paul

Autor: Georg B. (schorschi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Erwin Endres (erwinendres)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
Dim SekFlag as Byte

[...]

Do
   If SekFlag = 1 then
     SekFlag = 0

     Ausgabe = Drehfrequenz * 60
     Print #1 , "Drehfrequenz: " ; Drehfrequenz
     Print #1 , "Ausgabe: " ; Ausgabe
     Close #1
   End If
Loop


End



'Pro Impuls ein Aufruf
Irq0:
   Incr Zaehlerirq0
Return

'Pro Sekunde ein Aufruf
Timer1_isr:
   Timer1 = Timervorgabe

   Drehfrequenz = Zaehlerirq0
   Zaehlerirq0 = 0
   SekFlag = 1
Return

Erwin

Autor: Georg B. (schorschi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Erwin,
danke für den super Tipp, teste ist gleich heute Abend

Gruß
Schorschi

Autor: schorschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Erwin,

joh so gehts, !!!!!!

Danke

Gruß
Schorschi

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.