- LiTime Speicher und Akkus         
Ergebnis 1 bis 10 von 10

Thema: Rücksprungposition nach einem ext.Interrupt

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    11.10.2005
    Alter
    67
    Beiträge
    14

    Rücksprungposition nach einem ext.Interrupt

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo habe da ein Problem,

    ich möchte gerne das mein Programm nach einem Ext.Interrupt wieder an Anfang meines Programmes zurückkehrt und nicht da wo der Interrupt ausgelöst worden ist.
    Code:
    $regfile = "m32def.dat"
    $baud = 9600
    $crystal = 8000000
    
    
    Config Int0 = Rising
    On Int0 Irq0
    Enable Int0
    
    Enable Interrupts
    
    
    Do
    
     Print "1"
     Wait 1
     Print "2"
     Wait 1
     Print "3"
     Wait 1
     Print "4"
     Wait 1
     Print "5"
     Wait 1
     Print "6"
    
    
    Loop
    
    Irq0:
    Print "interrup"
    Return
    
    End
    wie schafe ich es das er wieder bei Print "1" anfängt?

    mfg
    Lejcko

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Nun, es gibt einige üble Tricks, die aber in deinem Falle irgendwie über-drüber wären
    Mach doch:
    Code:
    ...
    DIM zahl as byte
    
    Do 
      incr zahl
      disable interrupts
      if Zahl > 4 then Zahl = 1
      Print str(Zahl) 
      enable interrupts
      Wait 1 
    Loop 
    
    Irq0: 
    Print "interrup" 
      zahl = 0
    Return 
    
    End
    Das mit disable/enable ist notwendig, sonst zeigt er vielleicht Kraut und Rüben
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    11.10.2005
    Alter
    67
    Beiträge
    14
    Hallo Robert,

    erstmal danke für deine Antwort.
    Wahrscheinlich war mein Code bischen doof gewählt wolte nur mein Problem vereinfacht darstellen in Wirklichkeit ist mein Program eine
    Ablaufsteuerung für eine vollautomatische Bohrmaschine mit vielen Sub's und Verzweigungen.
    Was ich erreichen wollte ist das wenn ich nun Stoptaste(IRQ0) betätige
    soll der Ablauf sofort unterbrochen werden und das Programm zum Anfang springen und auf einen neuen Startbefehl warten.
    Im MOment ist es so daß die Maschine zwar sofort anhält, aber an der Rücksprungstelle weiter machen will.
    Zur Zeit mache ich es so, dass ich einen Hilfsmerker während des Interrups setze und dann weiter im Programm zu hilfe nehme ala If..Then Goto Anfang usw. Ist halt umständlich in jede Abfrage dann auch diesen Hilfsmerker mit abzufragen (bläht den ganze Code auf).

    mfg.
    Lejcko

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Naja, mit ein wenig Assembler und ein paar programmtechnische Schweinereien kann man das schon machen. uiuiui.
    Müßt ich mir durchdenken und kann dir dann was vorschlagen.
    Einen vollen Reset GANZ nach vorn kannst du nicht brauchen ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    11.10.2005
    Alter
    67
    Beiträge
    14
    WEnn du meinst einen Softwarereset das währe auf jedenfall eine alternative da habe ich noch gar nicht drüber nachgedacht.
    Leider bin ich Bascomneuling also würde mich freuen wenn du mir da helfen würdest.
    Die Lösung Assemb. & Co. wird zu kompliziert.

    mfg
    Lejcko

  6. #6
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Software -Reset wäre
    GOTO &H0000 (in deiner Interrupt-Routine)
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    MIt der Goto-Lösung für einen Reset muss man aber bedenken, daß dadurch die Hardware nicht so initialisiert ist wie nach einem "richtigen" Reset mit Zurücksetzen aller SFRs etc. Das kann beim Neustart u.U. zu Problemen führen oder mann muss rechtzeitig die Register "von Hand" zurücksetzen.

    Alternativ kann man den Watchdog dazu verwenden, einen Reset zu triggern. Allerdings geht das nicht sofort, sondern es braucht schon 15ms oder so, also eine halbe Ewigkeit...
    Disclaimer: none. Sue me.

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    11.10.2005
    Alter
    67
    Beiträge
    14
    Danke an euch beide für die Info,

    werde es auf jeden Fall mit dem Gotobefehl ausprobieren,
    unabhängig davon würde ich gern natürlich auch die watch dog Variante austesten, aber wie schon weiter oben zugegeben, bin ich noch nicht besonders gut mit Bascom unterwegs, kurz und schmerzlos "wie geht dem"? Schätze das "Watch dog" kein Syntax von Bascom ist also mus man sich das selber irgend wie aus dem Bascomcode zusammen basteln. - Timer ....etc ?

    mfg.
    Lejcko

  9. #9
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    CONFIG WATCHDOG

    Type "Help" for help
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    11.10.2005
    Alter
    67
    Beiträge
    14
    Prima danke das müste funktionieren
    die 16ms kann ich verkraften.
    Nochmals vielen dank für die Unterstützung.


    mfg.
    Lejcko

Berechtigungen

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

LiTime Speicher und Akkus