CLS : PRINT "Magnetic Field Mapper, Copyright 1999 By Robert J Davis" PRINT "Output readings are in milligauss use maximum-minimum / 2" INPUT "Use Printer Port Nunber: ", LPT dout = &H378: cout = &H37A: cin = &H379 IF LPT = 1 THEN dout = &H3BC: cout = &H3BE: cin = &H3BD IF LPT = 3 THEN dout = &H278: cout = &H27A: cin = &H279 mhour$ = MID$(TIME$, 1, 2) DIM mfield(99) start: hour$ = MID$(TIME$, 1, 2) IF hour$ = mhour$ AND cycle = 1 THEN GOTO start cycle = cycle + 1 IF cycle > 2 THEN cycle = 0 mhour$ = hour$ max1 = -999: max2 = -999 'use for negative numbers max3 = -999: max4 = -999 'use for negative numbers min1 = 0: min2 = 0: min3 = 0: min4 = 0 waittime = 42 '486 - 25 speed Findstop: OUT cout, 0 FOR b = 0 TO 3 OUT dout, 2 ^ b IF (INP(cin) \ 16) MOD 2 = 1 THEN GOTO getforward FOR A = 1 TO waittime: NEXT A NEXT b GOTO Findstop getforward: FOR c = 1 TO 16 getinput1: OUT cout, 8 OUT cout, 3: value1 = (INP(cin) XOR &H80) \ 16 OUT cout, 2: value2 = (INP(cin) XOR &H80) \ 16 OUT cout, 1: value3 = (INP(cin) XOR &H80) \ 16 tvalue1 = value1 + (16 * value2) + (256 * value3) IF tvalue1 > 2048 THEN tvalue1 = tvalue1 - 4096 LOCATE c + 3, 1: PRINT tvalue1 IF max1 < tvalue1 THEN max1 = tvalue1 IF min1 > tvalue1 THEN min1 = tvalue1 mfield(c) = tvalue1 getinput3: OUT cout, 8 OUT cout, 3: value1 = (INP(cin) XOR &H80) \ 16 OUT cout, 2: value2 = (INP(cin) XOR &H80) \ 16 OUT cout, 1: value3 = (INP(cin) XOR &H80) \ 16 tvalue3 = value1 + (16 * value2) + (256 * value3) IF tvalue3 > 2048 THEN tvalue3 = tvalue3 - 4096 LOCATE c + 3, 20: PRINT tvalue3 IF max3 < tvalue3 THEN max3 = tvalue3 IF min3 > tvalue3 THEN min3 = tvalue3 mfield(c + 40) = tvalue3 counterclockwise: FOR d = 1 TO 3 FOR b = 3 TO 0 STEP -1 OUT dout, 2 ^ b FOR A = 1 TO waittime: NEXT A NEXT b NEXT d NEXT c getreverse: FOR c = 1 TO 16 clockwise: FOR d = 1 TO 3 FOR b = 0 TO 3 OUT dout, 2 ^ b FOR A = 1 TO waittime: NEXT A NEXT b NEXT d getinput2: OUT cout, 8 OUT cout, 3: value1 = (INP(cin) XOR &H80) \ 16 OUT cout, 2: value2 = (INP(cin) XOR &H80) \ 16 OUT cout, 1: value3 = (INP(cin) XOR &H80) \ 16 tvalue2 = value1 + (16 * value2) + (256 * value3) IF tvalue2 > 2048 THEN tvalue2 = tvalue2 - 4096 LOCATE 20 - c, 10: PRINT tvalue2 IF max2 < tvalue2 THEN max2 = tvalue2 IF min2 > tvalue2 THEN min2 = tvalue2 mfield(c + 20) = tvalue2 getinput4: OUT cout, 8 OUT cout, 3: value1 = (INP(cin) XOR &H80) \ 16 OUT cout, 2: value2 = (INP(cin) XOR &H80) \ 16 OUT cout, 1: value3 = (INP(cin) XOR &H80) \ 16 tvalue4 = value1 + (16 * value2) + (256 * value3) IF tvalue4 > 2048 THEN tvalue4 = tvalue4 - 4096 LOCATE 20 - c, 30: PRINT tvalue4 IF max4 < tvalue4 THEN max4 = tvalue4 IF min4 > tvalue4 THEN min4 = tvalue4 mfield(c + 60) = tvalue4 NEXT c Park: FOR d = 1 TO 27 FOR b = 3 TO 0 STEP -1 OUT dout, 2 ^ b FOR A = 1 TO waittime: NEXT A NEXT b NEXT d OUT dout, 0 'shut off stepper display: LOCATE 9, 40: PRINT "Scan1 Scan2 Scan3 Scan4 Average" LOCATE 10, 40: PRINT max1 - min1 LOCATE 10, 46: PRINT max2 - min2 LOCATE 10, 52: PRINT max3 - min3 LOCATE 10, 58: PRINT max4 - min4 LOCATE 10, 64: PRINT (max1 - min1 + max2 - min2 + max3 - min3 + max4 - min4) / 4 Save: mfile$ = "c:" + MID$(DATE$, 7, 4) + MID$(DATE$, 1, 2) + MID$(DATE$, 4, 2) OPEN mfile$ FOR APPEND AS #1 FOR c = 1 TO 16 PRINT #1, mfield(c); NEXT c PRINT #1, " " FOR c = 21 TO 36 PRINT #1, mfield(c); NEXT c PRINT #1, " " FOR c = 41 TO 56 PRINT #1, mfield(c); NEXT c PRINT #1, " " FOR c = 61 TO 76 PRINT #1, mfield(c); NEXT c PRINT #1, " " PRINT #1, "Range", max1 - min1, max2 - min2, max3 - min3, max4 - min4 PRINT #1, TIME$ CLOSE #1 GOTO start END