DECLARE FUNCTION AskForBaseAddress! (OldOne AS INTEGER) DECLARE SUB CtrMode (addr AS INTEGER, cntr AS ANY, mode AS INTEGER) DECLARE SUB CtrLoad (addr AS INTEGER, counter AS INTEGER, value AS INTEGER) DECLARE FUNCTION CtrRead! (addr AS INTEGER, c AS LONG) COUNTEROFFSET = 12 Chan% = 0 DataRead% = 0 TimeOut! = 655354 KeyPressed = 0 CLS PRINT " SAMPLE5.BAS : COUNTER/TIMER" PRINT PRINT " This is a demonstration program to be used with the A/DC card." PRINT " This sample will read data from all channels on the A/DC card using" PRINT " timer/counter #2 to time and start conversions." PRINT Baseaddr% = AskForBaseAddress(&H340) CALL CtrMode(Baseaddr% + COUNTEROFFSET, 0, 2) CALL CtrMode(Baseaddr% + COUNTEROFFSET, 1, 2) CALL CtrMode(Baseaddr% + COUNTEROFFSET, 2, 2) CALL CtrLoad(Baseaddr% + COUNTEROFFSET, 1, 32767) CALL CtrLoad(Baseaddr% + COUNTEROFFSET, 2, 2) OUT Baseaddr% + 2, 0 OUT Baseaddr%, &HE2 WHILE NOT KeyPressed TimeOut! = 655354 WHILE (((INP(Baseaddr% + 2) AND &H80) = &H80) AND (TimeOut! <> 0) AND (NOT KeyPressed)) TimeOut! = TimeOut! - 1 KeyPressed = (INKEY$ <> "") WEND IF (TimeOut! = 0) THEN PRINT "A/D timeout"; WHILE (((INP(Baseaddr% + 2) AND &H80) = 0) AND (TimeOut! <> 0) AND (NOT KeyPressed)) TimeOut! = TimeOut! - 1 KeyPressed = (INKEY$ <> "") WEND Data1% = INP(Baseaddr% + 6) Data2% = INP(Baseaddr% + 7) DataRead% = VAL("&H" + LEFT$(HEX$(Data2%) + HEX$(Data1%), 3)) LOCATE 12 + Chan%, 10 PRINT "Chan "; Chan%; " Data Read: "; DataRead%; " "; IF (TimeOut! = 0) THEN PRINT "A/D timeout"; Chan% = Chan% + 1 Chan% = Chan% MOD 8 OUT Baseaddr% + 2, Chan% WEND LOCATE 20, 1 END FUNCTION AskForBaseAddress (OldOne AS INTEGER) Msg$ = "" NewOne% = 0: Success = 0: Dummy% = 0 AddrInputPosX = 0: AddrInputPosY = 0 PRINT "Please enter the Base Address (0000-FFFF) for your card (in hex)" PRINT "or press ENTER for "; HEX$(OldOne%); "." PRINT ">"; AddrInputPosX = POS(0): AddrInputPosY = CSRLIN WHILE Success = 0 LOCATE AddrInputPosY, AddrInputPosX PRINT " " LOCATE AddrInputPosY, AddrInputPosX LINE INPUT Msg$ NewOne% = VAL("&H0" + LEFT$(Msg$, 4)) Success = 1 Dummy% = NewOne% ELSEIF (Msg$ = "") THEN LOCATE AddrInputPosY, AddrInputPosX PRINT HEX$(OldOne%) Success = 1 Dummy% = OldOne% END IF WEND AskForBaseAddress = Dummy% END FUNCTION SUB CtrLoad (addr AS INTEGER, counter AS INTEGER, value AS INTEGER) OUT addr + counter, value MOD 256 OUT addr + counter, value / 256 END SUB SUB CtrMode (addr AS INTEGER, cntr AS INTEGER, mode AS INTEGER) ctrl% = (cntr * 64) OR &H30 OR (mode * 2) OUT addr + 3, ctrl% END SUB FUNCTION CtrRead! (addr AS INTEGER, c AS LONG) OUT addr + 3, c * 64 temp! = INP(addr + c) temp2! = INP(addr + c) temp2! = temp2! * 128 CtrRead! = temp! + temp2! * 2 END FUNCTION