-
Polling???
Hallo,
hat einer von euch vielleicht eine idee wie ich in meinem code eine art "polling" einbauen kann?
mein mc sendet eine anforderung und wartet auf eine antwort, nur kann es auch sein, dass er keine antwort kriegt. Dann soll er 'incr Adr' und die routine von vorne starten.
hab jezt schon sehr viel ausprobiert von interrupts bis ischarwaiting, aber irgendwie funzt es nicht.
Code:
Sub Wr_sende
Gosub Crc
Gosub Wr_inits
Printbin Wr_pakets(1) ; 10 'Paket wird gesendet
Return
End Sub Wr_sende
'Antwort von Wr empfangen
Sub Wr_empfange
' Call Wr_inite
Inputbin Wr_pakete(1) , 8 'Bytes werden eingelesen
Gosub Mc1_sende
Return
End Sub Wr_empfange
'Statusabfrage
Sub Wr_getstate
Value = 1
Wr_anzahl = Wr_anzahl + 1
Adr = Wr_anzahl
For Adr = 2 To Wr_anzahl
Command = 50 'Command für Statusabrfrage
Adr = Adr
Command = Command
Par1 = 000
Par2 = 032
Par3 = 032
Par4 = 032
Par5 = 032
Par6 = 032
Par7 = Bcclo
Par8 = Bcchi
'//UNTERPROGRAMME
Gosub Wr_inits
Gosub Wr_sende
Gosub Wr_empfange
Wait 3
Next Adr
If Adr = Wr_anzahl Then
Adr = 2
End If
Return
End Sub Wr_getstate
gruß
xeus
-
Hi,
arg unsauber: ;)
For n = 1 To 500
Eingang = Inkey()
If Eingang <> 0 Then
gosub daten_auswerten
End If
Next n
Incr adr
Inkey wird eine Zeit lang abgefragt.
Eben so lange wie es dauert es 500 mal abzufragen.
Je nach Taktfrequenz und gewünschter Wartezeit müsstest du unterschiedliche Werte ausprobieren ;) )
Tut sich in der Zeit nix, kommt also kein Byte an, dann wird die Adresse erhöht
Gruß
Christopher
-
erstmal danke,
aber was verbiergt sich hinter Eingang?
hab es jetzt mal so probiert:
If Usr = 1 Then
Inputbin Wr_pakete(1) , 8
else
incr adr
nur irgendwie treagiert er dabei auf kein empfangsbyte
-
Hi "Eingang" ist einfach nur eine Variable ;)
Gruß
Christopher
-
Also, hab es hinbekommen, dass er die routine so oft wiederholt und die adr um 1 erhöt bis er ein byte empfängt.
nun ist nur das problem, das er dann nicht mehr so lang wiederholt bis er was kriegt, sondern einfach abwartet.
If Usr.rxc = 1 Then
Gosub Wr_empfange
gibt es irgendeine möglichkeit den inhalt des registers zu löschen, so dass er wieder empfangsbereit ist, bzw merkt wenn etwas ansteht?
-
Hi,
habe gerade den Befehl "Timeout" in Bascom entdeckt.
Guck' dir den mal an.
Gruß
Christopher