Forum: Mikrocontroller und Digitale Elektronik Bascom Befehl nur einmal ausführen


von Bascomania (Gast)


Lesenswert?

Hallo

Hier mein Code

Print "Programm Anfang"

Lcd:
  A = Right(a , 9)
  A = Left(a , 1)
  Cls
  Lcd A
  Wait 2
  A = ""
Onrxd:
  A = A + Chr(udr)
  If Len(a) > 10 Then
  Goto Lcd
  End If
Return
End

funktionieren tut er (habe das Ganze konfigurationsgefozzel obendran 
weggelassen!) doch wie stelle ich es an, dass das Programm nur einmal 
den Befehl "Print "Programm Anfang" ausführt?

Liebe Grüsse

von Karl H. (kbuchegg)


Lesenswert?

Was macht der Return da drinnen?

Bau dein Programm grundsätzlich so auf, dass du eine Schleife hast, die 
immer ausgeführt wird. In dieser Schleife erledigst du deine Logik

von Bascomania (Gast)


Lesenswert?

Der Return führt wieder aus dem interrupt hinaus

von holger (Gast)


Lesenswert?

>Der Return führt wieder aus dem interrupt hinaus

Das weiß dein goto schon zu verhindern ;)

von Karl H. (kbuchegg)


Lesenswert?

Aus welchem Interrupt?

In dem von dir geposteten Code sieht man keinen Interrupt
Und Gesetz dem Fall dass OnRxd die Interrupt FUnktion ist, dann solltest 
du tunlichst vermeiden aus diesem mittels einem goto auszusteigen. Du 
solltest goto überhaupt vermeiden, wenn es geht.

Dein Hauptprogramm sollte eine einzige Schleife bilden!

von Bascomania (Gast)


Lesenswert?

Wenn ich den return rausnehme bekomm ich aber ne Fehlermeldung...

Der Interrupt "Onrxd", der was von der UART empfängt, oder nicht?^^

von Karl H. (kbuchegg)


Lesenswert?

Bascomania schrieb:
> Wenn ich den return rausnehme bekomm ich aber ne Fehlermeldung...

nämlich?

> Der Interrupt "Onrxd", der was von der UART empfängt, oder nicht?^^

Das kann ich aber von hier aus mit meiner Glaskugel nicht sehen :-)

von Karl H. (kbuchegg)


Lesenswert?

Schau dir doch einmal andere BASCOM Programm an.

Die sind immer alle nach einem Muster aufgebaut
1
' Configuration
2
3
' Einstellungen und Einmalaktionen
4
5
do
6
  ' Logik des Programms
7
loop
8
end
9
10
' unterprogramme  sub-endsub
11
12
' Interrupt handler
13
Onxxx:
14
  ' was ist beim Interrupt zu tun
15
  return

von Bascomania (Gast)


Lesenswert?

Ich bekomme die Fehlermeldung "Interrupt needs Return"

Ja, es empfängt den String denn es geht;)

Okay, hab jetzt mal Do-Loop eingefügt (nach dem Print Befehl), mein 
Problem: der Print-Befehl wird immer noch tausendemale ausgeführt;)

von uwe2 (Gast)


Lesenswert?

vielleicht so:

Print "Programm Anfang"

do                       'Hauptschleife, nichts tun nur auf Int. warten
loop

Lcd:
  A = Right(a , 9)
  A = Left(a , 1)
  Cls
  Lcd A
  Wait 2
  A = ""
Return

Onrxd:
  A = A + Chr(udr)
  If Len(a) > 10 Then
  Gosub Lcd
  End If
Return
End

von Bascomania (Gast)


Lesenswert?

Positiv

Danke UWE:D

ich schau trotzdem nochmal später rein...;)

von Bascomania (Gast)


Lesenswert?

Doch noch n'Problem:

Nachdem der Bearbeitete String aufm LCD angezeigt wurde startet mein 
Programm neu, das heisst der Pront Befehl wird nochmal ausgeführt :S
Wieso das, gibt für mich überhaupt keinen SInn...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.