OPEN - CLOSE
Action

Opens and closes a device.

Syntax

OPEN "device" for MODE As #channel

CLOSE #channel

Remarks

Device There are 2 hardware devices supported: COM1 and COM2.
With the software UART, you must specify the port pin and the baud rate.
COM3.0:9600 will use PORT 3.0 at 9600 baud.
Optional is ,INVERTED this will use inverted logic so you don't need MAX232 inverters.
MODE You can use BINARY, INPUT or OUTPUT for COM1 and COM2, but for the software UART pins, you must specify INPUT or OUTPUT.
Channel The number of the channel to open. Must be a positive constant.
Since there are uP's such as the 80537 with 2 serial channels on board, the compiler must know which serial port you want to use. That is why the OPEN statement is implemented. With only 1 serial port on board, you don't need this statement.
The statements that support the device are PRINT , PRINTHEX, INPUT and INPUTHEX.

Every opened device must be closed using the CLOSE #channel statement. Of course you must use the same channel number.

The software UART, only supports the GET and PUT statements to retrieve and send data and the PRINTBIN and INPUTBIN statement.
COM1: and COM2: are hardware ports, and can be used with PRINT etc.
Since the OPEN statement doesn't use real filehandlers like DOS but only serves as a compiler directive, it is important that you must use the CLOSE statement as the last statement in your program.
The following example shows when it will NOT WORK :

OPEN "COM2:" FOR BINARY AS #1 'open the port

PRINT #1, "Hello" 'print to serial 1
Gosub Test
PRINT "Hello" 'print to serial 0
CLOSE #1

Test:
Print #1, "test"
Return

Since the compiler frees the handle when it encounters the CLOSE statement, the PRINT #1, "test" code is never executed. So to solve this you should put the CLOSE #1 statement under the Return statement.

OPEN "COM2:" FOR BINARY AS #1 'open the port
PRINT #1, "Hello" 'print to serial 1
Gosub Test
PRINT "Hello" 'print to serial 0

Test:
Print #1, "test"
Return
Close #1

See also
GET , PUT

Example 1
'only works with a 80517 or 80537
CONFIG BAUD1 = 9600 'serial 1 baud rate
OPEN "COM2:" FOR BINARY AS #1 'open the port
PRINT #1, "Hello" 'print to serial 1
PRINT "Hello" 'print to serial 0
CLOSE #1 'close the channel

Example 2
'works with every port pin

Dim A As Byte , S As String * 16 , I As Byte , Dum As Byte

'a software comport is named after the pin you use
'for example P3.0 will be "COM3.0:" (so there is no P)
'for software comports, you must provide the baud rate
'So for 9600 baud, the device name is "COM3.0:9600"
'When you want to use the pin for sending, you must open the device for OUTPUT
'When you want to use the pin for receiving, you must open the device for INPUT

'At this time only variables can be send and received with the PUT and GET statements.
'In the feature PRINT etc. will support these software comports.

Open "com3.1:9600" For Output As #1 'p3.1 is normally used for tx so testing is easy
Open "com3.0:9600,INVERTED" For Input As #2 'p3.0 is normally used for RX so testing is easy

S = "test this" 'assign string
Dum = Len(s) 'get length of string
For I = 1 To Dum 'for all characters from left to right
A = Mid(s , I , 1) 'get character
Put #1 , A 'write it to comport

Next

Do
Get #2 , A 'get character from comport
Put #1 , A 'write it back
Print A 'use normal channel
Loop

Close #1 ' finally close device
Close #2
End