.TITLE A2D / / 21 JUN 74 (PDH) PROPERLY CORRECT CASE OF +10V, EVEN FOR WATRAN / 14 DEC 73 (PDH) CORRECT CASE OF +10V (400000) / 18 JUL 73 - CORRECT FLAG SETTING FOR CRBC, GENERAL WORKING OVER, / CONDITIONALIZE FOR WATRAN & DEC FORTRAN / 5 JUL 73 - FIX UP ARRAY ADDRESS IN 'CRBC' / 7 MAR 72 - MOD BY P. HENDERSON / / .TITLE ANALOG TO DIGITAL CONVERSION SUBROUTINE / / R. WORKMAN / .GLOBL MUXR,CRAC,CRPC,CRBC / / READ MULTIPLEXER ADDRESS / CALLING SEQUENCE: MUXR(DUMMY) / DUMMY: ANY DUMMY ARGUMENT (NEVER REFERENCED) / EXIT: AC=MULTIPLEXER CHANNEL ADDRESS / INTACC /DECLARE SOFTWARE INTEGER AC GLOBAL / MUXR XX ADRM /READ MPX ADDRESS .IFDEF WATRAN DZM* MOSTI /SINGLE INTEGER RESULT ONLY DAC* LEASTI DZM* .MODEA /INDICATE INTEGER MODE .ENDC JMP* MUXR ADRM=701212 .EJECT / / CONVERT AND READ A-D CHANNEL / CALLING SEQUENCE: CALL CRAC(CHANEL,VALUE,ERROR) / CHANEL :8-63 CHANNEL ADDRESS / VALUE :INTEGER VALUE OF CHANNEL / ERROR=0:NO ERROR / =1:ILLEGAL CHANNEL REQUEST-NO CONVERSION / =6:ADC MULTIPLEXER FAILED TO SET DESIRED CHANNEL / CRAC XX .ARG CRAC DAC CHANEL /CHANNEL LOCATION JMS ADINIT .ARG DAC VALUE /VALUE LOCATION .ARG DAC ERROR /ERROR LOCATION DZM* ERROR /ASSUME ERROR = 0 LAC* CHANEL TAD (-10 SPA JMP ERR1A /CHANNEL < 8 TAD (-70 SMA JMP ERR1A /CHANNEL > 63 TAD (100 /LOAD MPX ADDRESS DAC IOUND /SET I/O UNDERWAY FLAG ADSM /SELECT ADC CHANNEL AND CONVERT ADRM /READ MPX ADDRESS SAD* CHANEL JMP MATCH1 /THEY MATCH LAC (6 JMP ERR6A MATCH1 LAC IOUND SZA JMP MATCH1 /WAIT FOR INTERRUPT LAC STORE DAC* VALUE JMP* CRAC ERR1A LAC (1 ERR6A DAC* ERROR JMP* CRAC ADSM=701103 ADRM=701212 .EJECT / / CONVERT AND READ PREVIOUS A-D CHANNEL / CALLING SEQUENCE: CALL CRPC(VALUE,ERROR) / VALUE :INTEGER VALUE OF CURRENT ADC MPX CHANNEL / ERROR=0:NO ERROR / CRPC XX .ARG CRPC DAC VALUE /VALUE LOCATION JMS ADINIT .ARG DAC ERROR /ERROR LOCATION DZM* ERROR /SET ERROR = 0 DAC IOUND /SET I/O UNDERWAY FLAG ADSC /ADC CONVERT LAC IOUND SZA JMP .-2 /WAIT FOR INTERRUPT LAC STORE DAC* VALUE JMP* CRPC ADSC=701304 .EJECT / / CONVERT AND READ BANK OF A-D CHANNELS / CALLING SEQUENCE: CALL CRBC(FIRST,LAST,VALUES(1),ERROR) / FIRST: 8-63 ADDRESS OF FIRST CHANNEL IN BLOCK / LAST: 8-63 ADDRESS OF LAST CHANNEL IN BLOCK / VALUES: INTEGER ARRAY DIMENSIONED 1-64 / VALUES(I)=VALUE OF ADC CHANNEL I-1 / ERROR=0: NO ERROR / =1: ILLEGAL CHANNEL REQUEST (FIRST OR LAST) / =6: ADC MPX FAILED TO SET CORRECT CHANNEL / CRBC XX .ARG CRBC DAC FIRST /FIRST LOCATION JMS ADINIT .ARG DAC LAST /LAST LOCATION .ARG DAC VALUES /ARRAY POINTER .ARG DAC ERROR /ERROR LOCATION DZM* ERROR /SET ERROR = 0 LAC* FIRST TAD (-10 SPA JMP ERR1B /FIRST < 8 TAD (10 DAC FIRST /SAVE FIRST CHANNEL TAD (-100 SMA JMP ERR1B /FIRST > 63 LAC* LAST TAD (-10 SPA JMP ERR1B /LAST < 8 TAD (10 DAC LAST /SAVE LAST CHANNEL TAD (-100 SMA JMP ERR1B /LAST > 63 LAC FIRST /FIRST CHANNEL LOOPL DAC IOUND /SET I/O UNDERWAY FLAG ADSM /SELECT ADC CHANNEL AND CONVERT TAD VALUES DAC BANK /BANK POINTER=VALUES(FIRST+1) LOOP ADRM /READ MPX ADDRESS SAD FIRST JMP MATCH2 /MPX ADDRESS OK LAC (6 /MPX ADDRESS WRONG JMP ERR6B MATCH2 LAC IOUND SZA JMP MATCH2 /WAIT FOR INTERRUPT LAC STORE /PLACE STORE DAC* BANK /IN BANK LAC FIRST SAD LAST /LAST CHANNEL? JMP* CRBC /YES ISZ BANK /NO ISZ FIRST LAC FIRST TAD (-100 SPA!CLC JMP NOWRAP LAC (10 DAC FIRST /WRAP AROUND JMP LOOPL NOWRAP DAC IOUND /SET I/O UNDERWAY FLAG ADIM /INCREMENT MPX ADDRESS AND CONVERT JMP LOOP ERR1B LAC (1 ERR6B DAC* ERROR JMP* CRBC ADSM=701103 ADRM=701212 ADIM=701201 .EJECT / / INTERRUPT ROUTINE / A2DINT XX DAC A2DAC /SAVE AC LAC IOUND /I/O UNDERWAY DZM IOUND /CLEAR I/O UNDERWAY INDICATOR SNA!STL CLL ADRB /READ SNL!CMA JMP NOIO SAD (377777 /+10V? SKP /YES. DO NOT CONVERT TO -0 OR -131072 TAD (1 DAC STORE NOIO LAC A2DAC /RESTORE AC DBR XCT .+1 JMP* A2DINT ADRB=701312 / ADINIT XX REPLCE CAL 57 STORE 16 A2DAC ADSF BANK A2DINT ERROR DBK LAC .+2 LAST DAC REPLCE VALUES JMP* ADINIT ADSF=701301 / FIRST;CHANEL;VALUE IOUND / .END