PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Seriell senden mit Handshake (Print, CTS, Flow Control, Interrupt) wie?



snafu
19.08.2012, 11:04
Guten Morgen!

Seriell empfangen mit Handshake geht in Bascom ja prima. (Config Serialin).

Mein Problem ist die Senderichtung: Ich benötige für ein langsames Display die Möglichkeit, die CTS-Leitung des Displays abzufragen, und den seriellen Datenstrom, wenn CTS=1, zu pausieren.

Ich habe mir jetzt Config Serialout eingerichtet, in der Hoffnung, in der von der gepufferten Senderoutine benutzen Unterroutine _CheckSendChar die CTS - Leitung abfragen zu können. Leider wird diese Routine scheinbar nicht angesprungen - meine rüde Wartezeit von einer Sekunde wird nicht berücksichtigt :( ...

Weiss jemand vielleicht eine Lösung, oder einen anderen Weg, seriell mit Handshake senden zu können?

Herzliche Grüße
Snafu


$crystal = 20000000
$regfile = "m168def.dat"

$baud = 38400
Config Serialout = Buffered , Size = 254
Enable Interrupts

Dim Loops As Word


Print Chr(170) ; "CG="
'go to terminal mode
Print Chr(27) ; "[2J";
'clear display
Waitms 100


Do
Print Chr(27) ; "[2J";
Print "The quick brown Fox jumps over the Lazy dogs back" ; Chr(13);
Waitms 30
Print "1234567890";chr(13);
Print "ÖÄÜßöäü" ; Chr(13);
Print "012345678901234567890123456789023456789" ; Chr(13);
Print "---------------------------------------" ; Chr(13);
Print "012345678901234567890123456789023456789" ; Chr(13);
Print "---------------------------------------" ; Chr(13);
Print "012345678901234567890123456789023456789" ; Chr(13);
Print "---------------------------------------" ; Chr(13);
Print "012345678901234567890123456789023456789" ; Chr(13);
Print "---------------------------------------" ; Chr(13);
Print "012345678901234567890123456789023456789" ; Chr(13);
Print "---------------------------------------" ; Chr(13);
Print "012345678901234567890123456789023456789" ; Chr(13);
Print "---------------------------------------" ; Chr(13);
Print Loops;
Incr Loops
Waitms 1000
Loop




_checksendchar:
Wait 1
reti

snafu
19.08.2012, 15:18
Ich habe einen Tip vom Bascom Programmierer bekommen:

Man muss einen buffered INPUT definieren, dort gibt es auch einen Pin für CTS. Den Eingang lässt man einfach brach liegen, und dann klappt es mit dem CTS beim Senden.

Puh! Nicht so extrem logisch, aber jetzt gehts!

schönen Tag
snafu.


ystal = 20000000
$regfile = "m168def.dat"

$baud = 38400
Config Serialout = Buffered , Size = 100
Config Serialin = Buffered , Size = 5 , Bytematch = None , Cts = Pind.2 , Rts = Pind.3 , Threshold_full = 3 , Threshold_empty = 2


Enable Interrupts

Dim Loops As Word


'Config Portd.2 = Input
'Cts Alias Pind.2


Print

Print Chr(170) ; "CG="
'go to terminal mode
Print Chr(27) ; "[2J";
'clear display
Waitms 100

Print "reset"

Do
Print Chr(27) ; "[2J";
Print "The quick brown Fox jumps over the Lazy dogs back" ; Chr(13);
Waitms 30
Print "1234567890" ; Chr(13);
Print "ÖÄÜßöäü" ; Chr(13);
Print "012345678901234567890123456789023456789" ; Chr(13);
Print "---------------------------------------" ; Chr(13);
Print "012345678901234567890123456789023456789" ; Chr(13);
Print "---------------------------------------" ; Chr(13);
Print "012345678901234567890123456789023456789" ; Chr(13);
Print "---------------------------------------" ; Chr(13);
Print "012345678901234567890123456789023456789" ; Chr(13);
Print "---------------------------------------" ; Chr(13);
Print "012345678901234567890123456789023456789" ; Chr(13);
Print "---------------------------------------" ; Chr(13);
Print "012345678901234567890123456789023456789" ; Chr(13);
Print "---------------------------------------" ; Chr(13);
Print Loops;
Incr Loops

Waitms 150

Loop