BASCOM-Funktion ischarwaiting() = 1

st3fan

Neues Mitglied
15. Feb. 2008
7
0
0
Sprachen
Hallo,

ich habe ein Problem und hoffe ihr könnt mir vielleicht helfen. Ich lasse einen mega64 mit dem 2ten HW UART über RS232 mit dem PC kommunizieren. Je nachdem was für Befehle der mega64 erhält werden entsprechende Ausgänge geschaltet. Anfangs hatte ich das Ganze folgendermaßen realisiert:

Do
Input #1 , Empf
Empfh = Mid(empf , 1 , 2)
If Empfh = "n_" Then Call Auswahl
Loop

im unterprogramm Auswahl wird dann der entsprechende Befehl festgestellt und die entsprechenden Ausgänge geschaltet. Das funnktioniert auch soweit wunderbar.
Nun möchte ich allerdings immer noch eine LED blinken lassen um zu sehen ob der mega64 läuft. Gedanke: stürzt er aus irgendeinem Grund ab oder das Programm bleibt hängen, sieht man an der nichtmehr blinkenden LED das etwas nicht stimmt. Ich habe meine Hauptschleife folgendermaßen erweitert:

Do

If Ischarwaiting() = 1 Then
Input #1 , Empf
Empfh = Mid(empf , 1 , 2)
If Empfh = "n_" Then Call Auswahl
End If

Zahler = Zahler + 1
If Zahler >= 32000 Then Ledok = 1
If Zahler >= 64000 Then
Ledok = 0
Zahler = 0
End If

Loop

Leider funktioniert das Ganze so nicht wie ich mir das vorstelle: Die LED blinkt aber nachdem ich einmal etwas über RS232 geschickt habe blinkt sie nicht weiter.
Die Kommunikation funktioniert auch erst, nachdem ich Porte.0 (RXD0) z.B. mit der Spitze meines Oszis kurz auf Masse ziehe. ischarwaiting() bezieht sich vielleicht auf den ersten HW UART? mit ischarwaiting(#1) funktioniert die Kommunikation allerdings gar nicht.
Wenn ich porte.0 permanent an Masse anschließe funktioniert das Ganze auch nicht.
Ich habe schon alles mögliche ausprobiert und bin langsam mit meinem Latein am Ende. Was alles kein Erfolg gebracht hat:

porte.0 als input mit internem pullup
porte.0 als input ohne internen pulluo
porte.0 als output und auf 1
porte.0 als output und auf 0
config serialin1 = buffered, size = 20
enable interrupts
ischarwaiting(#1)

Hat vielleicht jemand eine Idee woran das liegen könnte? Oder eine Idee wie ich eine LED permanent blinken lassen kann solange das Programm läuft?

Für Hilfe wäre ich sehr dankbar

gruß
st3fan
 
Hallo st3fan,

soweit ich weiß kann BASCOM keine geschachtelten Funktionen wie z.B.

Code:
If Ischarwaiting() = 1 Then

Du wirst soweit ich die Aussage des BASCOM_Entwicklers verstanden habe über zwei Befehlszeilen und damit eine temp-Variable gehen müssen:

Code:
Dim Temp_var As Byte
Temp_var = Ischarwaiting()
If Temp_var = 1 Then
     ' hier wartet ein Zeichen
End If

Wenn es nur um die Übertragung eiens Zeichens geht so würde ich dann die Funktion Waitkey() verwenden um das Zeichen auszulesen.

Ich verwende in meinen Programmen einen Timer der mir alle Sekunde einen Tick erzeugt und mit dem ich
a) eine Variable hochzähle und
b) eine LED toggeln lasse
das für mich dann ein Zeichen ist das im ATmega überhaupt noch was geht. Zugegeben, wenn sich das Hauptprogramm "verirrt" dann funktioniert die IRS zum Timer in der Regel immer noch, es sei den der µC hat begonnen wild im Speicher rumzuschreiben und die ISR auch noch zu überschreiben.

Grüße,
Markus
 
also mit so einer variablen habe ich das versucht, das ging aber trotzdem nicht. ich habe es jetzt mit einem timer interrupt gemacht: funktioniert einwandfrei dankeschön
echt super das einem hier so schnell geholfen wird
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)