-         

Ergebnis 1 bis 8 von 8

Thema: BASCOM Mega32 und Interrupt

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    03.05.2008
    Beiträge
    10

    BASCOM Mega32 und Interrupt

    Anzeige

    Hallo Leute,

    das hier macht doch sicherlich Probleme, wie kann ich diese Falle umgehen.
    Ich möchte ein im Kreis laufendes (wartendes) Unterprogramm einfach abwürgen und mit dem Hauprprogramm neu beginnen.


    Mega32 - Bascom




    '--------------------------------------------------------
    '----------------- (Timer 0 Interrupt)-------------------
    '--------------------------------------------------------

    Int_einsprung:

    Incr Takt_zaehler

    If Takt_zaehler > 10000 Then
    Takt_zaehler = 0
    Goto Int_aussprung
    End If


    Return

    ' -----------------------------------------------------


    Int_aussprung:

    '??? Stack-reparatur

    Goto Anfang



    Kurt

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112

    Re: BASCOM Mega32 und Interrupt

    Zitat Zitat von Kurt-b
    Ich möchte ein im Kreis laufendes (wartendes) Unterprogramm einfach abwürgen und mit dem Hauprprogramm neu beginnen.
    Dein im Kreis laufendes Unterprogramm ist doch nicht die Timer0 ISR, oder?
    Die wird ja unabhängig vom Restprogramm regelmäßig aufgerufen.
    Per 'Goto' rausspringen geht gar nicht, du musst über ein 'Return' drüber.
    Du kannst anstatt des Sprungbefehls ein Flag setzen, z.B.
    Goto_Anfang_flag=1
    und dann im Hauptprogramm dieses abfragen und entsprechend springen. Dazu musst du aber regelmäßig über diese Abfrage kommen.
    Zeig doch mal mehr von deinem Programm.

    Gruß

    Rolf

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    03.05.2008
    Beiträge
    10

    Re: BASCOM Mega32 und Interrupt

    Hallo Rolf,


    Zitat Zitat von for_ro
    Zitat Zitat von Kurt-b
    Ich möchte ein im Kreis laufendes (wartendes) Unterprogramm einfach abwürgen und mit dem Hauprprogramm neu beginnen.
    Dein im Kreis laufendes Unterprogramm ist doch nicht die Timer0 ISR, oder?
    nein nein.

    Ich hab eine Hauptschleife die mehrere Unterprogramme nacheinander anspringt.

    Diese UP sind es die ev. nicht zurückkommen weil sie auf eine Eingabe der in ihnen abgefragten Soft-ser warten.
    Ich finde keinen Weg um hier Zeichenpuffer einzurichten.
    Darum muss ich einfach warten bis Zeichen kommen.
    Und das kann halt dauern.

    Drum hab ich mir den Zähler in der IS-Rutine eingerichtet.
    Wenn der erreicht wird soll das UP einfach abgebrochen, und das Hauptprogramm von Vorne begonnen werden.
    Hier kann ich dann entscheiden welches UP als nächstes bedient wird.


    Die wird ja unabhängig vom Restprogramm regelmäßig aufgerufen.
    Per 'Goto' rausspringen geht gar nicht, du musst über ein 'Return' drüber.
    Eben, daum gehts.
    Es müsste aber auch gehen das man einfach die Rücksprungadresse verbiegt und dann am Programmanfang landet.
    Das würde reichen wenn die anderen Var unangetastet blieben.


    Du kannst anstatt des Sprungbefehls ein Flag setzen, z.B.
    Goto_Anfang_flag=1
    und dann im Hauptprogramm dieses abfragen und entsprechend springen. Dazu musst du aber regelmäßig über diese Abfrage kommen.
    Zeig doch mal mehr von deinem Programm.
    Die Abfrage geht ja erst wenn ich aus dem wartendem UP raus bin.
    Und das geht nicht weil die Returnadresse mich immer wieder dahin zurückbefördert.

    Im UP lauter Abfragen einzurichten ist halt sehr aufwendig.

    Das wär alles kein Problem wenn ein Zeichenpuffer machbar wäre.

    Sowohl bei OPEN "COMBx, xx
    als auch bei SERIN xxx
    hab ich keinen Weg gefunden das einzurichten.
    Dann wärs einfach mit einer Abfrage des Puffers festzulegen ob das UP überhaupt angesprungen wird oder nicht.


    Kurt

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Verwendest du die Hw-UART ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    03.05.2008
    Beiträge
    10
    Zitat Zitat von PicNick
    Verwendest du die Hw-UART ?
    Hier zur Hauptkommunikation mit dem Zielsystem.

    Das Ziel ist mehrere SER- Signale einzulesen und gemeinsam weiterzugeben.
    Da ich auch mal mehr als zwei einlesen können will hab ich die Soft-UART eingerichtet.

    Naja so direkt scheints nicht zu gehen weil keine Puffer vorhanden sind.
    Ich machs wahrscheinlich anders.
    Werd einfach die Signale nacheinander auf den HW-UART legen,
    damit düften die Probleme beeitigt sein.
    Denn da kann ich den Puffer auf -genügend Zeichen- abfragen und wenn nichts kommt einfach ins Hauptprogramm zurückkehren.


    Gruss Kurt

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    Nimm einen AVR mit mehreren COMs, dann haben die auch Interrupt und Puffer...

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    03.05.2008
    Beiträge
    10
    Zitat Zitat von stefan_Z
    Nimm einen AVR mit mehreren COMs, dann haben die auch Interrupt und Puffer...
    Was ist denn das so gängig?
    Gibs vielleicht welche mit vier Kanälen?


    Kurt

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    Ja gibts. Aber sind die gaaaanz dicken Brummer...
    ATmega640, ATmega1280, ATmega2560

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •