'******************************************************************* '* A822 DEMO Program For Quic Basic * '* Function For D/I/O * '******************************************************************* DEFINT A-Z DECLARE SUB A822Init (adr) DECLARE SUB A822AD (Channel, UB, Gain) DECLARE SUB A822DACH1 (voldata) DECLARE SUB A822DACH2 (voldata) DECLARE SUB A822DI () DECLARE SUB A822DO (dol, doh) TYPE A822DATA IOAdr AS INTEGER 'A822PG Base Address ADVI AS SINGLE 'Analog Input Voltage ADData AS INTEGER 'A/D Conversion data DIhigh AS INTEGER 'Digital Input High Byte DIlow AS INTEGER 'Digital Input Low Byte ErrorMesag AS INTEGER END TYPE DIM SHARED A822 AS A822DATA CLS A822Init &H220 ' Set A822 Base Address readloop = 0 WHILE readloop = 0 FOR i = 0 TO 255 A822DO i, i ' Wtite Digital Output Low Byte & High Bite A822DI DIlow = A822.DIlow DIhigh = A822.DIhigh LOCATE 2.5 PRINT "Digital Output Low Byte Data= "; i PRINT " Digital Input Low Byte Data="; DIlow PRINT "Digital Output High Byte Data ="; i PRINT " Digital Input High ?Byte Data="; DIhigh IF INKEY$ = "q" THEN END FOR delay = 1 TO 1000: NEXT delay NEXT i WEND END SUB A822AD (Channel, UB, Gain) ' ========================Set A822 Channel & Gain ChkAD = 0 ErrCoun = 0 IF Channel > 15 THEN A822.ErrorMesag = 2 IF A822.IOAdr = 0 THEN A822.ErrorMesag = -1 ADGain = 0 IF Gain = .5 THEN ADGain = &H8 IF Gain = 2 OR Gain = 10 THEN ADGain = &H1 IF Gain = 4 OR Gain = 100 THEN ADGain = &H2 IF Gain = 8 OR Gain = 1000 THEN ADGain = &H3 IF Gain = 5 THEN ADGain = &H9 IF Gain = 50 THEN ADGain = &H10 IF Gain = 500 THEN ADGain = &H11 IF UB = 1 THEN ADGain = ADGain + &H4 'IF UB=0 then Bipolar Mode 'IF UB=1 Then Unipolar Mode A822.ErrorMesag = 0 OUT A822.IOAdr + &HB, 1 OUT A822.IOAdr + &HA, Channel OUT A822.IOAdr + &H9, ADGain OUT A822.IOAdr + &HC, 0 WHILE ChkAD = 0 ADHigh = INP(A822.IOAdr + &H5) IF ADHigh <= 15 THEN ChkAD = 1 ErrCoun = ErrCoun + 1 IF ErrCoun >= 1000 THEN A822.ErrorMesag = 4: EXIT SUB WEND IF A822.ErrorMesag <> 0 THEN EXIT SUB ADLow = INP(A822.IOAdr + &H4) A822.ADData = ADHigh * 256 + ADLow IF UB = 1 THEN A822.ADVI = (A822.ADData) * 10 / Gain / 4096 ELSE A822.ADVI = (A822.ADData - 2048) * 5 / Gain / 2048 END IF END SUB SUB A822DACH1 (DACdata) DACHigh = INT(DACdata / 255) DACLow = INT(DACdata - DACHigh * 255) OUT A822.IOAdr + &H4, DACLow OUT A822.IOAdr + &H5, DACHigh END SUB SUB A822DACH2 (DACdata) IF DACdata >= &HFFF THEN DACdata = &HFFF DACHigh = INT(DACdata / 256) DACLow = INT(DACdata - DACHigh * 256) OUT A822.IOAdr + &H6, DACLow OUT A822.IOAdr + &H7, DACHigh END SUB SUB A822DI A822.DIlow = INP(A822.IOAdr + &H6) A822.DIhigh = INP(A822.IOAdr + &H7) END SUB SUB A822DO (dol, doh) OUT A822.IOAdr + &HD, dol OUT A822.IOAdr + &HE, doh END SUB SUB A822Init (adr) ChkIo = 0 ChkNn = 0 A822.IOAdr = adr OUT A822.IOAdr + &HB, 1 OUT A822.IOAdr + &HC, 0 WHILE ChkIo = 0 IF INP(A822.IOAdr + &H5) <= 15 THEN ChkIo = 1 ChkNn = ChkNn + 1 IF ChkNn = 5000 THEN A822.ErrorMesag = 1: ChkIo = 1 WEND END SUB