PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hardware-Handshake RTS/CTS



Unregistriert
24.05.2004, 21:52
Hallo,

ich hab ein Problem mit dem RTS/CTS Handshake. Ich möchte die Sache so programmieren, das es auch ein HyperTerminal versteht, aber wie das bei Windows so ist, nichts läuft, und keiner weiss warum. Ich kann zwar Senden, dabei bediene ich keine Handshake-Leitungen. Soweit so gut. Aber wenn ich empfangen möchte, kommt offenbar nix an bei meinem 8051er an (der Empfangsroutine nicht, am Pin schon). Ich hab sie so programmiert, das bei aktiviertem Handshake auf RTS gewartet wird, dann wird CTS aktiviert und gleich danach wieder deaktiviert. Ich hab auch schon versucht, ellenlange Delays einzubauen, aber das hat auch nicht geholfen. Weiss jemand, wie genau man das machen muss oder hat jemand schon mal solche Routinen geproggt?

Danke

MacSeck
25.05.2004, 00:01
RTS/CTS hat auf MS-DOS Rechnern noch nie funktioniert, ausser man macht es explizit selbst.

Auch Hyperterminal unter Windows bedient den Handshake ordentlich, aber... und das seit der Einführung des PC-XT... die machen eher über DTR den Handshake.
Das führt mitunter zu recht "krumme Kabeln" DTR an CTS usw... HP-Plotter singen da ein Lied von...:)

Hintergrund: Im Modem-Status und Controlregister des 8250 / 16550 ist DTR an Bit 1 Stelle, und es ist leichter, dieses Bit ins Carry zu rotieren und dann zu entscheiden

ror 1,Statusregister (ins Carry)
Branch if... Carry

als
mov A,Statusregister
and #2
Branch if... Zero

Macht nur der IBM PC so. Andere; Atari, Amiga, Apple usw. machen brav RTS/CTS. Hängt auch daran, dass die andere Bausteine drin haben, die von sich aus "auto RTS" machen, also nicht wie der 8250 dies nur als IRQ auslösendes Register haben und dann den Rest der Software überlassen. Die machen das alleine!!!

War einfach scheiss Design der IBM-PC

Scotty
25.05.2004, 07:00
Hi Andreas,

hm... RTS/DTR, bluäh... Ich bin mir jetzt nicht ganz sicher, aber ich meine ich habe experimentierhalber mal HT auf Hardware-Handshake eingestellt, RxD mit TxD und RTS mit verbunden, und das lief unter HT. Werd ich aber heut abend nochmal ausprobieren.

Bis jetzt ist die Empfangsroutine folgendermassen geschrieben: Ist Handshake aktiviert, wird gewartet, bis RTS aktiv wird, dann geht CTS an den Start. Und ab da mach ich mir ein wenig Sorgen: Ich könnte jetzt ja warten, bis mein RI-Flag hochgeht, und dann erst CTS wieder deaktivieren, aber ich bin mir unsicher, ob HT gleich ein weiteres Zeichen schickt (bei Tastatureingaben ist es ja wurscht, aber es sollen auch Textdateien gesendet werden).

Gruß Ralf

edgar
26.05.2004, 20:25
hi,

schmess das hyperterminal auf den misthaufen !
lade dieses free

http://bray.velenje.cx/avr/terminal

ist echt gut.....fuer deine experimente

viel spass
ed

MacSeck
26.05.2004, 23:08
@Ed: das löst das Problem nicht.

Durch die V24 muss man durch: V24 = 24 Varianten es doch anders zu tun,
24 verschiedene Kabel und Steckerbelegungen...:)

Die Deutschen haben das schon gut begriffen, und weil es zu einfach war, was die Amis gemacht haben, haben sie das Ding RS232 getauft, also 232 Möglichkeiten, etwas falsch zu machen. Ist wohl mit Bravour gelungen...:)

Übrigens: Die Schulen halten sich strikt an V24 --> binnen 24 Jahren den Schülern immer noch nicht beigebracht... - da fällt innerhalb der nächsten 232 Jahre wohl eher noch der Pisa-Turm um.

Und unsere Deutsche Kinderlosigkeit hängt daran, dass die sich nicht einigen können über 9pol-Männlein/Weiblein oder 25pol-M/W und Spermien-Übertragungs-Endeinrichtung, Bett-Terminal-Ready, und den gebrückten Handshake (sich selber machen), bzw. XON/XOFF, also abends im Bett XOFF- und tschüß...

Scotty
27.05.2004, 07:00
Hi Andreas,

und über Ethernet können die ihr Problem auch nicht lösen, weil die ja in der gleichen Kiste liegen müssen, d.h. sie haben die gleiche Adresse, und das darf bei Ethernet ja bekanntlich nicht sein, also kommt auch kein Daten-"Fluss" zu stande.

Gruß Ralf

Scotty
28.05.2004, 07:22
Hi,

ich habs rausgefunden, aber ich war ganz schön sauer: :mad:

Da Windoof solche Macken hat, gewöhnt man sich offenbar daran, auch mit Macken zu denken und kommt natürlich nicht auf die EINFACHSTE Lösung: :rolleyes:

HyperTerm aktiviert bei Hardware-Handshake einfach die RTS-Leitung, und das wars. Ich musste also meine Routine nur darauf umstellen, dass sie CTS aktiviert und solange anlässt, bis RI hochgeht, und dann deaktivieren. OH MANN!

Rausgefunden hab ichs dadurch, das ich meinen Controller so geproggt hab, dass er eine LED anschält, sobald sich die RTS-Leitung ändern, die CTS-Leitung hab ich ständig aktiviert, also quasi wie ein Nullmodemkabel 7 und 8 gebrückt. Die LED änderte ihren Zustand aber nur bei Öffnen/Schließen der Verbindung, und beim Senden eines Zeichens durch HyperTerm nicht. :alertblac

Werd übers Wochenende mal probieren, wie sich VB in der Hinsicht verhält. :search:

Gruß Ralf

MacSeck
28.05.2004, 15:47
@Scotty: Was RI (Ring Indikator also Telefon-Klingel-Anzeiger (Pin 9 Sub/D9)) mit der ganzen Sache zu tun haben soll sprengt meine Phantasie??..!!:) :)

Hat doch Null Komma Nix mit dem Hanshake zu tun. DTR/DSR oder RTS/CTS oder ein PC-Mix dessen... wie bereits beschrieben, aber RI doch nicht...???

Aber sei es wie es will bzw. Deinen Beobachtungen nahe kommt: Die PCs kochen / brodeln immer irgendein Süppchen daraus zusammen; RS232mal.

Viel Erfolg beim Weitertesten... (dabei könnt´s so einfach sein gg:)

Scotty
28.05.2004, 15:52
@Andreas:

Oh, verflixt, ich hab gar nicht dran gedacht, dass es auch einen RI-PIN :eek: gibt :rolleyes:

Nein, ich meinte das Receive-Interrupt-Flag beim 8051. :D
Wenn das hochgeht, hab ich mein Zeichen, und kann die CTS-Leitung deaktivieren.

Sorry für die Verwirrungsanstiftung. :o

Gruß Ralf

Arne
29.05.2004, 14:44
macht doch eigentlich auch Sinn, CTS zu setzen, sobald das Zeichen im Sack und der MC beschäftigt ist... Offensichtlich hatte ich da mehr Glück beim 'Hacken'...

Das bei RTS/CTS-Nutzung mit Hyperterminal am Senden ein Zeichen flöten geht ist eher unwahrscheinlich - bei mir braucht das Teil ca. 3x länger als wenn ich mit dem MC bei gleicher Baudrate ein gleichgroßes File zurückschiebe (Nachtigal ich hör dir trapsen...) Bislang nutze ich es für meinen Progger Marke Eigenbau und es funzt (wenn auch langsam...)

Es gibt offensichtlich Terminal-Progs wie Sand am Meer - aber etwas wie Terminate aus den guten alten DOS-Zeiten habe ich unter Windows noch nicht gesehen - Auf ANSI-Sequenzen möchte ich jedenfalls nicht verzichten...

Wie auch immer viel Erfolg beim Weiterbasteln....!

Gruß, Arne