di3055.txt ;************************************************************************************************ ; ; LISTING 1 - MBASIC DEMO PROGRAM FOR MOTION CONTROL ; ; "Encoder and PC make complete motor-control system," EDN, December 12, 2002, pg 98 ; ;************************************************************************************************ DEFINT I IOADD = &H300: ' BASE ADDRESS FOR MOCONT CARD IC0 = IOADD: IC1 = IC0 + 1: IC2 = IC0 + 2: ICS = IC0 + 3: ' 8254 COUNTER ADDRESSES IREV = 4: ' MOTOR-REVERSE BIT OUT ICS, &H12: ' PROGRAM PULSE-WIDTH GENERATOR IN C0 OUT ICS, &H70: OUT ICS, &HB0: ' SETUP CW/CCW COUNTERS IN C1 AND C2 OUT IC0, 5: 'START PULSE-WIDTH GENERATOR OUT ICS, &HDC: 'LATCH CW/CCW I1L = INP(IC1): ICW = INP(IC1) I2L = INP(IC2): ICCW = INP(IC2) OUT IC1, I1L: OUT IC1, ICW: '...INITIALIZE CW/CCW COUNTERS OUT IC2, I2L: OUT IC2, ICCW OFFSET = I1L - I2L + 256! * (ICW - ICCW) CLS : PRINT TAB(20); "MOTION-CONTROL-ADAPTER DEMO" PRINT TAB(18); "W. S. Woodward...March 16, 1990" PRINT "POSITION=": PRINT : PRINT : PRINT PRINT "HIT '1' TO SLOW BY 4 STEPS OUT OF 256" PRINT " '2' TO SLOW BY 3" PRINT " '3' TO SLOW BY 2" PRINT " '4' TO SLOW BY 1" PRINT " '5' TO SPEED UP BY 1 STEP" PRINT " '6' TO SPEED BY 2" PRINT " '7' TO SPEED BY 3" PRINT " '8' TO SPEED BY 4" PRINT PRINT " 'R' TO STOP AND REVERSE" PRINT PRINT " 'T' TO INVERT SPEED SETTING" AROUND: OUT ICS, &HDC: 'LATCH CW/CCW I1L = INP(IC1): I1M = INP(IC1): IF I1M > ICW THEN OFFSET = OFFSET + 65536 ICW = I1M I2L = INP(IC2): I2M = INP(IC2): IF I2M > ICCW THEN OFFSET = OFFSET - 65536 ICCW = I2M LOCATE 3, 10: PRINT I1L - I2L + 256! * (I1M - I2M) - OFFSET IKEY = INSTR(" 1234-5678RT", UCASE$(INKEY$)) - 6: IF IKEY <= -5 THEN GOTO AROUND IF IKEY = 5 THEN IKEY = -ISPEED + 1: IC1 = IC1 XOR IREV: IC2 = IC2 XOR IREV: IC0 = IC0 XOR IREV: ICS = ICS XOR IREV IF IKEY = 6 THEN IKEY = (ISPEED XOR 255) - ISPEED ISPEED = ISPEED + IKEY: IF ISPEED > 0 AND ISPEED < 256 THEN OUT IC0, ISPEED ELSE ISPEED = ISPEED - IKEY GOTO AROUND