www.mikrocontroller.net

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


Autor: Bascomania (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Bascomania (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Return führt wieder aus dem interrupt hinaus

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Der Return führt wieder aus dem interrupt hinaus

Das weiß dein goto schon zu verhindern ;)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Bascomania (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich den return rausnehme bekomm ich aber ne Fehlermeldung...

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau dir doch einmal andere BASCOM Programm an.

Die sind immer alle nach einem Muster aufgebaut
' Configuration

' Einstellungen und Einmalaktionen

do
  ' Logik des Programms
loop
end

' unterprogramme  sub-endsub

' Interrupt handler
Onxxx:
  ' was ist beim Interrupt zu tun
  return

Autor: Bascomania (Gast)
Datum:

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

Autor: uwe2 (Gast)
Datum:

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

Autor: Bascomania (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Positiv

Danke UWE:D

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

Autor: Bascomania (Gast)
Datum:

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

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.