Hallo und frohe Ostern,

ich habe ein Problem mit der Steuerung eines 485 Bus.
Ich benutze folgenden Code beim Master, der in einer Schleife ausgeführt wird:


Code:
Set Busrxtx
While Ucsr1a.udre1 <> 1                                     'Ucsr1a.5 <> 1                                         'Data register empty (ready to receive new data)
Wend
Print #2 , Chr(100);                                        'Udr1 = 101
Do
Loop Until Ucsr1a.txc1 = 1                                  'Ucsr1a.6 = 1                                     'ucsr1a.txc   (transmit complete)
Waitus 400                                                  'alt 7
Reset Ucsr1a.txc1                                           'Ucsr1a.6

Reset Busrxtx

'Auf Interrupt warten
Waitms 8                                                    'alt 80
Slave1_in = Zeichen
Zeichen = 0
Nun sehe ich mir mit einem MAX232-Adapter mit einem Terminalprogramm an, was gesendet wird.

Dabei sind für mich mehrere Dinge merkwürdig.

1. Mit der Abfrage des TXC1 sollte doch eigentlich so lange gewartet werden, bis das Zeichen aus dem Sendepuffer vollständig gesendet wurde. Hier muss ich aber noch eine Wartezeit von min. 400us anfügen, sonst sehe ich kein gesendetes Zeichen.

2. Ich benutze dann eine Wartezeit, damit ein Slave eine Antwort senden kann. Dazu benutze ich das Interrupt:
Code:
On Urxc1 Bekommen

....

' ZeichenErhalten
Bekommen:
  Zeichen = Waitkey(#1)
Return
Nun habe ich das merkwürdige Problem, dass wenn ich die Wartezeit (im Beispiel waitms ändere, hiermit auch das senden beeinflusse. Stelle ich diese Zeit z.B. nur auf 1ms, dann sehe ich im Terminalprogramm, dass nur noch Hex 00 gesendet wird.

Ist es möglich, dass die waitms- und waitus-Funktionen von irgendetwas beeinflußt werden und dadurch sich die Wartezeiten ändern können.

Ein Slave ist bei diesem Problem nicht an dem Bus vorhanden, daher kann nichts kollidieren.

Mfg,
Wurm