ASMB,R,L,C,B,F HED ISA S61.1 ANALOG OUTPUT A-92413-16003 REV. A NAM AOF.W,7 92413-16003A 16APR75 ENT AOF,AOW,AO EXT .ENTR,EXEC,..DAC,#GET! SUP ******************************************** * AOF,AO,AOW - ANALOG OUTPUT TO 2313 AND 6940 * * SOURCE: 92413-18003 REV A * RELOC: 92413-16003 REV A * * REVISION A BY STEVE SCOVILL ******************************************** * * * * * AOF PERFORMS ANALOG OUTPUT TO THE HP2313B DUAL DAC CARD USING * RTE DRIVER DVR62 OR TO 6940 VOLTAGE AND CURRENT DACS USING RTE * DRIVER DVR61. * * CALLING SEQUENCE: * CALL AOF(NUM,CHAN,VOLT,ERR) * WHERE: * NUM - ABS(NUM) = NUMBER OF OUTPUT VALUES * NUM < 0 PACED OUTPUT * NUM > 0 UNPACED OUTPUT * CHAN - INTEGER ARRAY OF ANALOG OUTPUT CHANNEL NUMBERS * VOLT - FLOATING POINT ARRAY OF OUTPUT VOLTAGES OR CURRENTS * ERR - ERROR RETURN PARAMETER * 1 - NO ERROR * 2 - DEVICE TIME OUT * 3 - ADDRESS OUT OF RANGE OR NO CHANNELS * 4 - OUTPUT VOLTAGE OR CURRENT OUT OF RANGE * * AOW IS IDENTICAL TO AOF EXCEPT ARRAY VOLT IS AN INTEGER ARRAY * CONTAINING THE ANALOG OUTPUT VALUES IN THE FORMAT SPECIFIED * BY THE DEVICE MANUAL * * * IF AN OUTPUT VALUE EXCEEDS THE MAXIMUM, THE MAXIMUM VALUE OF THE * CORRESPONDING SIGN IS OUTPUT AND THE ERROR NOTED IN IERR. * SKP AOF NOP LDA AOF FETCH RETURN ADDRESS CLB CLEAR FIXED POINT FLAG JMP START JOIN ROUTINE AOW * AOW NOP LDA AOW FETCH RETURN ADDRESS CLB,INB SET FIXED POINT FLAG * START STA ENTRY SAVE RETURN ADDRESS STB FIXPT SAVE FIXED POINT FLAG JMP ENTRY+1 GO FETCH PARAMS. NUM NOP CHAN NOP VOLT NOP ERR NOP ENTRY NOP JSB .ENTR FETCH PARAMETER DEF NUM ADDRESSES CLB,INB INITIALIZE ERROR STB ERR,I FLAG TO 1 LDA NUM,I FETCH NUMBER OF CHNLS SZA,RSS IF ZERO JMP ERR3 RETURN WITH ERROR 3 SSA IF NEGATIVE LDB =B10000 SET PACE BIT STB PACED AND SAVE SSA,RSS IF POSITIVE CMA,INA COMPLEMENT AND STA NUM SAVE FOR LOOP COUNTER SKP * * ANALOG OUTPUT LOOP STARTS HERE * AOF1 LDA CHAN,I FETCH CHANNEL NUMBER CMA,SSA,INA,SZA AND COMPLEMENT RSS IF < = 0 THEN JMP ERR3 GIVE ERROR #3 STA CNTR SAVE -( CHANNEL NUM. ) LDB ..DAC FETCH DAC TABLE ADDRESS ADA 1,I IF ADDRESSED SSA CHANNEL IS NOT DEFINED JMP DAC69 IN 2313, TRY 6940 * RSS FDAC STA CNTR SAVE -(#CHANNELS REMAINING) INB BUMP DAC TABLE ADDRESS LDA 1,I FETCH NEXT TABLE ENTRY AND =B7 AND MASK OF #CHNLS-1 ADA CNTR ADDRESSED CHANNEL SSA,INA,SZA IN THIS ENTRY? JMP FDAC NO, CONTINUE SEARCH STB ENTDC YES, SAVE ENTRY ADDRESS LDA VOLT,I LDB FIXPT CPB .1 JMP *+3 JSB FVOLT CONVERT VOLTS TO ASL 4 DAC DATA WORD STA OUTV AND SAVE IN OUTPUT BUFR LDA ENTDC,I FETCH CHANNEL ENTRY CLB EXTRACT LU ASL 6 FROM ENTRY STB LU AND SAVE ASR 4 SHIFT AND AND =B7740 MASK BOX AND SLOT NUMBER LDB CNTR FETCH CHANNEL CMB NUMBER AND BLF "OR" INTO IOR 1 COMMAND WORD IOR PACED OR IN PACE BIT IOR =B40001 OR IN COMMAND CODE STA CMND SAVE COMMAND WORD SKP * JSB EXEC ************************* DEF *+5 DEF .2 PERFORM DEF LU ANALOG DEF QBUF OUTPUT DEF .1 ************************** * AND =B200 SZA,RSS CHECK FOR BAD STATUS BIT SZB,RSS OR ZERO XMISSION LOG JMP ERR2 GIVE DEVICE ERROR NXTV LDA FIXPT IF FIXED POINT FLAG SZA,RSS BUMP VOLT ADDRESS ONE WORD ISZ VOLT UPDATE ISZ VOLT VOLTAGE ISZ CHAN AND CHANNEL ADDRESSES ISZ NUM LAST CHANNEL? JMP AOF1 NO, CONTINUE * JMP ENTRY,I RETURN * ERR3 LDA QBUF ERROR RETURN OF 3 RSS ERR2 LDA .2 ERROR RETURN OF 2 STA ERR,I JMP ENTRY,I * QBUF OCT 3 .2 OCT 2 DEF CMND * CMND NOP OUTV NOP PACED NOP CNTR NOP .1 OCT 1 .4 OCT 4 AO EQU AOW FIXPT EQU AOW ENTDC EQU AOF OVRF NOP SKP * * LIMIT CHECKS * FVOLT NOP ADB DEFLM COMPUTE LIMIT STB OVRF ADDRESS LDA FIXPT IF FIXED POINT SZA,RSS IS CLEAR GO TO JMP FXVLT FLOATING CONVERT LDA VOLT,I FETCH DATA WORD CMA,INA AND CHECK JMP FXV1 LIMITS * FXVLT DLD VOLT,I LOAD VOLTAGE OR CURRENT FMP =F-200. COMPUTE: -INTEGER FAD =F.0005 BUG FIXER!! SSA,RSS ADD A LITTLE BIT JMP *+3 FAD =F-.001 FOR ROUNDOFF ERRORS!! FIX VALUE FOR DAC FXV1 STA OUTV AND SAVE ADA OVRF,I IF BEYOND UPPER SSA BOUND, SET OUTPUT JMP OVRFL TO UPPER BOUND ISZ OVRF MOVE POINTER TO LOWER BOUND LDA OUTV IF LESS THAN ADA OVRF,I LOWER BOUND, CMA,INA SSA SET OUTPUT JMP OVRFL TO LOWER BOUND LDA OUTV VALUE WITHIN BOUNDS SO CMA,INA COMPLEMENT, MASK AND SAVE JMP FVOLT,I * OVRFL LDA .4 SET ERROR PARAMETER STA ERR,I TO 4 LDA OVRF,I SET OUTPUT VOLTAGE TO LIMIT JMP FVOLT,I * * 6940 DAC CALL * DAC69 LDA CHAN,I GET CHAN JSB #GET! LU NOP TYPE NOP NOP PARAMETERS THAT AREN'T NOP USED BUT THESE NOP'S ARE! SSB ERROR? JMP ERR3 CHAN TOO BIG ADA .M1 DIV .15 IOR CNTL STA CMND SAVE CNTL WORD BLF MOVE SLOT BLF,BLF TO MSB'S STB SLOT SAVE SKP * * CHECK TYPE,SCALE,DO OUTPUT * LDA TYPE GET TYPE CLB SET LIMIT FOR VOLT DAC CPA .5 IF VOLTAGE DO CONVERSION JMP *+5 LDB .2 SET LIMIT FOR CURRENT DAC CPA .6 IF CURRENT DO CONVERSION RSS JMP ERR3 ELSE,ERROR 3 * JSB FVOLT ENTRIES AND B7777 ADD SLOT # IOR SLOT INFORMATION STA OUTV TO DATA WORD * WRITE JSB EXEC *************************** DEF *+6 PERFORM DEF .2 NORMAL DEF LU WRITE DEF CMND WITH DEF .2 HANDSHAKE DEF .1 ************************* * AND =B204 SZA,RSS CHECK FOR BAD STATUS BITS SZB,RSS OR ZERO XMISSION LOG RSS DEVICE ERROR JMP NXTV NO, FETCH NEXT VALUE * LDA .2 STA ERR,I LDA CMND AND =B20 SZA,RSS JMP ENTRY,I XOR CMND STA CMND JMP WRITE * .M1 DEC -1 .15 DEC 15 SLOT NOP .5 DEC 5 .6 DEC 6 CNTL OCT 170160 DEFLM DEF LIMIT LIMIT OCT 3777 VOLTAGE DAC UPPER BOUND OCT 174000 AND LOWER BOUND B7777 OCT 7777 CURRENT DAC UPPER BOUND OCT 0 AND LOWER BOUND END