PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Polling???



Xeus
04.11.2005, 08:07
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.



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

chr-mt
04.11.2005, 10:15
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

Xeus
04.11.2005, 10:36
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

chr-mt
04.11.2005, 10:56
Hi "Eingang" ist einfach nur eine Variable ;)

Gruß
Christopher

Xeus
04.11.2005, 10:56
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?

chr-mt
14.11.2005, 11:48
Hi,
habe gerade den Befehl "Timeout" in Bascom entdeckt.
Guck' dir den mal an.

Gruß
Christopher