LISTING 1 'QBASIC ROUTINE TO RUN MAX1248 23 SEPT 1997 'PLEASE FEEL FREE TO MODIFY AND USE AS YOU LIKE COLOR , 1 CLS 0 'CLEAR SCREEN '25 WAY D TYPE 'SIGNALS TO DATA AQ CARD 'PIN 2 D0 (OUT) POWER + 'PIN 3 D1 (OUT) POWER + 'PIN 4 D2 (OUT) SCLK 'PIN 5 D3 (OUT) DATA OUT (FROM PC) 'PIN 6 D4 (OUT) CS\ 'PIN 7 D5 (OUT) TEST STROBE -PULSE AT START OF CHANNEL SCAN 'SIGNALS FROM DATA AQ CARD 'PIN 15 D3 (IN) DATA IN (TO PC) 'PIN 13 D4 (IN) SSTRB 'PINS 18-25 ARE GROUND DIM DIN(8) AS INTEGER, DOUT(12) AS INTEGER 'INITIALISE VALUES 'CONTROL BYTE DIN(0) = 0 'PD0 (LSB) INTERNAL CLOCK MODE DIN(1) = 1 'PD1 INTERNAL CLOCK MODE DIN(2) = 1 'SGL/DIF\ SINGLE END/DIFFERENTIAL DIN(3) = 1 'UNI/BIP\ UNIPOLAR/BIPOLAR DIN(4) = 0 'SEL0 CHANNEL SELECT DIN(5) = 0 'SEL1 CHANNEL SELECT DIN(6) = 0 'SEL2 CHANNEL SELECT DIN(7) = 1 'START START BIT REF = 2.5 'ADC REFERENCE VOLTAGE 'LPT1 OUT @ &H378, IN @ &H379 'LPT2 OUT @ &H278, IN @ &H279 PORT& = &H378 'SET LPT1 IDATA& = &H13 'POWER ON, D0=D1=1, CS\=1 OUT PORT&, IDATA& 'SEND DATA 'PULSES 25 WAY D TYPE PIN 7 FOR DIAGNOSTIC IDATA& = IDATA& OR &H20 'TEST STROBE SET TO 1 OUT PORT&, IDATA& 'SEND DATA IDATA& = IDATA& AND &HDF 'TEST STROBE SET TO 0 OUT PORT&, IDATA& 'SEND DATA MAIN: 'LOOPS READING CHANNELS ON KEY(8) GOSUB MAINEND 'ESCAPE LOOP KEY(8) ON PRINT PRINT "F8 TERMINATES PROGRAM" PRINT PRINT " CH1 CH2 CH3 CH4" START: LOCATE 5, 3 FOR CH = 1 TO 4 GOSUB SETCH 'SET CHANNEL GOSUB VIN 'GET READING VOLTS = VIN& * REF / 4096 'CONVERT TO VOLTS PRINT USING "#.####"; VOLTS; '1 LSB = 0.00061V PRINT "V "; NEXT CH PRINT FOR I = 1 TO 100000 'DELAY TO SLOW DISPLAY NEXT I GOTO START MAINEND: GOTO FINISH SETCH: 'SETS CHANNEL IF CH = 1 THEN DIN(4) = 1: IF CH = 1 THEN DIN(5) = 0: IF CH = 1 THEN DIN(6) = 0 IF CH = 2 THEN DIN(4) = 1: IF CH = 2 THEN DIN(5) = 0: IF CH = 2 THEN DIN(6) = 1 IF CH = 3 THEN DIN(4) = 0: IF CH = 3 THEN DIN(5) = 1: IF CH = 3 THEN DIN(6) = 0 IF CH = 4 THEN DIN(4) = 0: IF CH = 4 THEN DIN(5) = 1: IF CH = 4 THEN DIN(6) = 1 RETURN VIN: 'CONVERSION 'SEND CONTROL BYTE ODATA& = &H0 IDATA& = IDATA& AND &HEF 'CS\ SET TO 0 OUT PORT&, IDATA& FOR SHIFT = 7 TO 0 STEP -1 IDATA& = IDATA& OR ((DIN(SHIFT) * 8)) 'DATA TO GO TO MAX1248 OUT PORT&, IDATA& IDATA& = IDATA& OR &H4 'SCLK TO 1 OUT PORT&, IDATA& IDATA& = IDATA& AND &HF3 'DATA BIT BACK TO 0, SCLK TO 0 OUT PORT&, IDATA& NEXT SHIFT IDATA& = IDATA& OR &H10 'CS\ SET TO 1 OUT PORT&, IDATA& WAIT (PORT& + &H1), &H10 'WAIT FOR EOC (SSTRB) FROM MAX1248 'GET DATA ODATA& = &H0 IDATA& = IDATA& AND &HEF 'CS\ SET TO 0 OUT PORT&, IDATA& 'SCLK CYCLE TO GET MSB IDATA& = IDATA& OR &H4 'SCLK TO 1 OUT PORT&, IDATA& IDATA& = IDATA& AND &HF3 'DATA BIT BACK TO 0, SCLK TO 0 OUT PORT&, IDATA& FOR SHIFT = 11 TO 0 STEP -1 DOUT(SHIFT) = (INP(PORT& + &H1) AND &H8) 'GET DATA FROM MAX1248 ODATA& = ODATA& + DOUT(SHIFT) * 2 ^ (SHIFT - 3)'COMPILE DATA IDATA& = IDATA& OR &H4 'SCLK TO 1 OUT PORT&, IDATA& IDATA& = IDATA& AND &HF3 'DATA BIT BACK TO 0, SCLK TO 0 OUT PORT&, IDATA& NEXT SHIFT IDATA& = IDATA& OR &H10 'CS\ SET TO 1 OUT PORT&, IDATA& VIN& = ODATA& RETURN FINISH: END