'----------------------------------------------------- ' ' 93293 (38400 BAUD) DEMONSTRATION PROGRAM ' written by: Peter King, www.procontechnology.com.au ' '----------------------------------------------------- ' DECLARE SUB FischerInstall () DECLARE SUB MotorsOff () DECLARE SUB Motor (MotorNo%, Direction%) DECLARE SUB OutputWord (Value%) DECLARE FUNCTION SwitchIn% (E1toE8%) DECLARE FUNCTION InputWord% () DECLARE FUNCTION AnalogIn% (EXorEY%) ' ' QBASIC Interface drive routines ' IBM Personal Computer 93293 serial ' Copyright (C) Procon Technology 1998-2009 ' Version 2.0 ' CONST SPORT = "COM1" 'Serial port COM1 or COM2 CONST E1 = 1, E2 = 2, E3 = 3, E4 = 4 CONST E5 = 5, E6 = 6, E7 = 7, E8 = 8 CONST EX = 0, EY = 1 CONST MOFF = 0, MCCW = 1, MCW = 2, MON = 3 DIM SHARED MotorWord AS INTEGER FischerInstall DO IF SwitchIn(E1) THEN Motor 1, MOFF ELSE Motor 1, MCCW IF AnalogIn(EX) > 200 THEN Motor 2, MCW ELSE Motor 2, MOFF LOOP WHILE INKEY$ = "" END FUNCTION AnalogIn% (EXorEY%) STATIC E%, B1%, B2%, B3% SELECT CASE EXorEY% CASE 0: E% = 197 CASE 1: E% = 201 END SELECT PRINT #1, CHR$(E%); CHR$(MotorWord); B1% = ASC(INPUT$(1, #1)) B2% = ASC(INPUT$(1, #1)) B3% = ASC(INPUT$(1, #1)) AnalogIn% = B2% * 256 + B3% END FUNCTION SUB FischerInstall STATIC Temp%, Port% DEF SEG = &H40 'get port address IF SPORT = "COM1" THEN Port% = PEEK(1) * 256 + PEEK(0) 'COM1 ELSE Port% = PEEK(3) * 256 + PEEK(2) 'COM2 ENDIF DEF SEG 'MUST BE BEFORE OPEN!!! OPEN "COM1:9600,N,8,1,BIN,CS0,DS0" FOR RANDOM AS #1 OUT Port% + 3, &H83 'port = serial port base address OUT Port%, 3 '115200 divide by 3 = 38400 OUT Port% + 1, 0 OUT Port% + 3, 3 'set to 38400 baud 'purge COM port input WHILE LOC(1) > 0: Temp% = ASC(INPUT$(1, #1)): WEND 'send function IF3_ON, page 5, Robo-If-Ser-Codes_FW_035.pdf PRINT #1, CHR$(161); "ft-Robo-ON-V1"; I$ = INPUT$(5, #1) 'reply ^Firmware version no. MotorsOff END SUB FUNCTION InputWord% PRINT #1, CHR$(193); CHR$(MotorWord); InputWord% = ASC(INPUT$(1, #1)) END FUNCTION SUB Motor (MotorNo%, Direction%) STATIC Temp% SELECT CASE MotorNo% CASE 1: MotorWord = (MotorWord AND &HFC) OR Direction% CASE 2: MotorWord = (MotorWord AND &HF3) OR Direction% * 4 CASE 3: MotorWord = (MotorWord AND &HCF) OR Direction% * 16 CASE 4: MotorWord = (MotorWord AND &H3F) OR Direction% * 64 END SELECT Temp% = InputWord% END SUB SUB MotorsOff STATIC Temp% MotorWord = 0 Temp% = InputWord% END SUB SUB OutputWord (Value%) STATIC Temp% MotorWord = Value% Temp% = InputWord% END SUB FUNCTION SwitchIn% (E1toE8%) STATIC Temp% Temp% = InputWord% SwitchIn% = (Temp% AND 2 ^ (E1toE8% - 1)) <> 0 END FUNCTION