Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations TouchToneTommy on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Simple comms

I/O

Simple comms

by  agual  Posted    (Edited  )
This simple program will allow you to communicate with a modem or to chat thry serial port
Code:
'MINIMAL TERMINAL By Antoni Gual 15/11/02
'Serial Comms with QB.

CONST TIMEOUT = .2 'seconds

'CS0,CD0,DS0,OP0,RS makes comms work with a simple 3 wire connection"
'change COM2 TO COM1 if your modem is there. QB does not operate with COM3 and 4

OPEN "COM2: 9600,N,8,1,CS0,CD0,DS0,OP0,RS" FOR RANDOM AS #1

'screen header
COLOR 14, 1
CLS : PRINT "AGV QB Terminal: Key in your message, ENTER to send, ESC to quit":
PRINT STRING$(80, 45); : VIEW PRINT 3 TO 25: COLOR 7, 1

'send and receive loop
DO
 'get key
 K$ = INKEY$

 'if key pressed then process it
 IF LEN(K$) THEN
    SELECT CASE ASC(K$)
   
    'enter ends message and sends it to port
    CASE 13:
      IF LEN(TX$) THEN PRINT #1, TX$: TX$ = ""
   
    'backspace erases rightmost char
    CASE 8
      IF LEN(TX$) THEN
        'erase it in the user string
        TX$ = LEFT$(TX$, LEN(TX$) - 1)
        'erase it in the screen
        p = POS(0): LOCATE , p - 1: PRINT " "; : LOCATE , p - 1
      END IF
   
    'escape quits
    CASE 27
      EXIT DO
   
    'any other key is added to message
    CASE ELSE
      TX$ = TX$ + K$: PRINT K$;
    END SELECT

 END IF

'read port and add chars to receive buffer
WHILE NOT EOF(1)
   RX$ = RX$ + INPUT$(LOC(1), 1)
   T! = TIMER + TIMEOUT
WEND

'if timeout is exceeded we suppose line end
'display received message and clear buffer
IF TIMER > T! THEN
   IF LEN(RX$) THEN COLOR 15, 1: PRINT RX$; : COLOR 7, 1: RX$ = ""
   T! = TIMER + TIMEOUT
END IF
LOOP

CLOSE
END

To test it with your modem:
Well, adapt the program to use the COM1 if your modem is there, run it and key in "AT", the modem should answer "Ok" or "0".
NOTE: Winmodems are unusable in DOS and will not answer.

To connect with another PC in the same room, just buy or make a null modem cable.
To make it you will need two DB9 connectors and a 3 or more wire screened cable. Wire pin 2 to pin 3 in the otther conector, pin 3 to 2 and pin 5 to pin 5.
Serious cables will have handshake pins wired to allow faster and more reliable comms, but it's not needed for a test with 2 PC's close together.
Interconnect serial ports and run the program on both PC's, you should be able to communicate.

If you want to try a modem chat:
Be sure both modems answer to the terminal program in both PC's. Run the program in both.
Decide which PC will start the session an which one will answer the phone.
Key in this command in the PC that must answer the phone:
ATS0=1<ENTER>
modem should answer "ok". This tells the modem to answer the phone at the first ring.
In the PC starting the session:
ATDT<telephone number to call><ENTER>
The modem should initiate the call and answer"Ok" or "0"
The guy at the other side must be sure no one will answer the phone and let the modem do it.
The modems will handshake automatically, then you both will
have the message "CONNECTED AT xxxx" xxxx being the connection speed.
You can chat as you want.
when you are ready to finish, key in
+++<ENTER>
and then
ATH0<ENTER>
so the modem hangs the line.

To disable the autoanswer mode in the modem that answered the calls you will have to key in:
ATS0=0<ENTER>



Have fun!



Register to rate this FAQ  : BAD 1 2 3 4 5 6 7 8 9 10 GOOD
Please Note: 1 is Bad, 10 is Good :-)

Part and Inventory Search

Back
Top