From QB64 Wiki
Revision as of 05:13, 4 February 2011 by imported>Clippy
Jump to navigation Jump to search

The OPEN COM statement is used to access a computer's Serial port COM1 or COM2 address using an OPEN statement.

Syntax: OPEN "COMn: Speed, Parity, Bits, Stopbit, [Options]" [FOR mode] AS #P [LEN = bytesize]

  • QB64 can open any COM n port number. Qbasic could only open COM1 or COM2.
  • See Windows System Components list for COM port numbers and port addresses.
  • Four commas are required after the Speed, Parity, Bits, and Stopbit, even if none of the Options are used.
  • Speed(baud rate): 50, 150, 300, 600, 1200, 1800, 2400, 9600, 19200 or 115200 maximum.
  • Parity: N (none), E (even), O (odd), S (space) or M (mark). Note: If 8 bits use parity N for numerical data!
  • Bits = number of bits/byte: Valid numbers: 5, 6, 7 or 8
  • Stopbit = number of stop bits: Valid numbers: 1, 1.5 or 2
  • Other OPEN options are optional and in any order separated by commas within the OPEN command string.
  • The optional FOR mode can be OUTPUT, INPUT or RANDOM (default mode when no FOR statement is used).
  • The LEN statement is also optional. The default record size is 512 bytes when not used.

Additional Options
* ASC : ASCII byte mode. End of line = CHR$(13). End of file = CHR$(26)
* BIN : Binary byte mode. Default mode if ASC is not used(option not required).
Below m is the timeout in milliseconds 1 to 65535. Zero is ignore timeout. Default m = 1000 :
CD[m] : Time until timeout of DCD (Carrier Detect) line in. CD0 ignores timeouts.
CS[m] : Time until timeout of CTS (Clear to Send) line in. CS0 ignores timeouts.
DS[m] : Time until timeout of DSR (Data Set Ready) line in. DS0 ignores timeouts.
OP[m] : Time until data lines become active. If timeout then OPEN fails! OP0 ignores timeouts.
If any timeouts occur the OPEN will fail or port access will stop!
RB[b] : Size of receive buffer in bytes when used. Default when not used = 512 bytes
TB[b] : Size of transmit buffer in bytes when used. Default when not used = 512 bytes
RS  : Supress detection of Request to Send (RTS) line.

Example: Opening COM port with the BIN, CS0 and DS0 options and setting the receive and transmit buffer size using LEN =.

INPUT "COM port number #", port$ 'any COM port number available DIM bytestr AS STRING * 1 'one byte transfers OPEN "COM" + port$ + ":9600,N,8,1,BIN,CS0,DS0" FOR RANDOM AS #1 LEN = 512 DO 'main loop 'receive data in buffer when LOC > 0 IF LOC(1) THEN GET #1, , bytestr: PRINT "[" + bytestr + "]"; 'transmit (send) k$ = INKEY$ IF LEN(k$) = 1 THEN k = ASC(k$) IF k >= 32 THEN 'ignore control key codes PRINT ">" + k$ + "<"; bytestr = k$: PUT #1, , bytestr END IF END IF LOOP UNTIL k$ = CHR$(27) CLOSE #1: PRINT "Finished!

See also:

Keyword Reference - Alphabetical
Keyword Reference - By Usage
Main Wiki Page