Archiv verlassen und diese Seite im Standarddesign anzeigen : Rücksprungposition nach einem ext.Interrupt
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.
$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
Nun, es gibt einige üble Tricks, die aber in deinem Falle irgendwie über-drüber wären
Mach doch:
...
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
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
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 ?
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
Software -Reset wäre
GOTO &H0000 (in deiner Interrupt-Routine)
SprinterSB
27.01.2006, 09:19
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...
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
CONFIG WATCHDOG
Type "Help" for help
Prima danke das müste funktionieren
die 16ms kann ich verkraften.
Nochmals vielen dank für die Unterstützung.
mfg.
Lejcko
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.