C PROGRAM SPCTSN.FT C ----------------- C C C PETER LEMKIN C MORTON SCHULTZ C NIH C BETHESDA, MD 20014 C C C C NOVEMBER 17, 1977 C OCTOBER 10, 1977 C C C C PURPOSE C ------- C ACQUIRE 1024 SAMPLES POINTS ON A/D CHANNEL 4 WHEN C A/D CHANNEL 3 GOES > 0. SAMPLE AT THE MAXIMUM RATE. C C NOTE THAT A CONVERSION FACTOR NM/INCREMENT C AND BASELINE WAVELENGTH (LEFT) ARE REQUESTED ON STARTING. C C C THE PROGRAM CLOSES THE TEKTRONIX RSS SHUTTER, ALLOWS C THE RSS TO STABILIZE, RECORDS THE RSS OUTPUT WITH THE SHUTTER C CLOSED FOR REFERENCE PURPOSES, OPENS THE SHUTTER AND RECORDS C A "LIVE" SCAN. THE REFERENCE SCAN IS THEN SUBTRACTED FROM C THE LIVE SCAN TO PRODUCE A CRUDELY CORRECTED OUTPUT. C C OPCODE DEFINITIONS C ------------------ C S OPDEF MQL 7421 S OPDEF TADI 1400 S OPDEF DCAI 3400 S OPDEF LAS 7604 S OPDEF EXADR 6450 S OPDEF EXOUT 6451 C C Analogue to Digital 16 channel converter C (DEC AD8-ea/AM8-ea) with an input voltage C range of +/- 1 volt, 0-30 KHZ bandwidth, 10 C bit resolution, 200 nsec. apperature time. S OPDEF ADCL 6530 /Clear AD done and timing error flags. C Clear enable, mux and status register. S OPDEF ADLM 6531 /LOAD mux register from AC[8:11], C clear AC. S OPDEF ADST 6532 /CLear AD done and timing error flags. C Start AD converter. Channel to C be converted is to be determined by C mux register. S OPDEF ADRB 6533 /CLear AD done flag. Contents of C AD buffer ==>ac[0:11]. S SKPDF ADSK 6534 /SKIp next instruction if AD done=1. C Do not clear flag. C@S SKPDF ADSE 6535 /Skip next instruction if C timing error=1. C Do not clear flag. C@S OPDEF ADLE 6536 /LOad enable register from AC[2:5]. C@S OPDEF ADRS 6537 /REAd AD status/enable register and C mux into AC[0:11]. C C A/D Status register C Bit function C ---- -------- C 0 Conversion done C 1 error C 2 done interrupt enable C 3 error interrupt enable C 4 external start enable C 5 auto increment enable C 6-7 not used C 8-11 contents of mux register C C DIMENSION IDATA(1024) DIMENSION ICAL(1024) DIMENSION IRESLT(1024) C C C [1] PRINT OUT HEADER WRITE(1,101) WRITE(3,101) 101 FORMAT(' SPCTSN.FT 11/18/77 - SAMPLE SPECTRUM ANALYZER ON .') C C C [2] GET CALIBRATIONS READ(1,110)CALIBRATION 110 FORMAT(' ENTER NM/INCREMENT=',F9.3) READ(1,111)BASELINE 111 FORMAT(' BASELINE WAVELENGTH IN NM=',F7.0) WRITE(3,112)CALIBRATION,BASELINE 112 FORMAT(' NM/INCREMENT=',F9.3,', BASELINE W.L.=',F7.0) C C C [2] WAIT FOR CARRAGE RETURN. 200 READ(1,201)JUNK 201 FORMAT(' READY. TYPE CARRAGE RETURN:',A1) C C C [2.1] SET UP POINTER AND COUNTER C SET OUTER WAIT COUNTER ISTABILIZE=500 IZ=0 S TAD (-D1024 S DCA 12 C C SETUP AUTOINDEX PTR S CLA CMA S TAD PICAL S DCA 11 /AUTOINDEX REGISTER POINTER C C C [2.2] CLOSE SHUTTER AND WAIT APPROX 4 SECONDS TO C ALLOW RSS TO STABILIZE C C C IF WE ARE USING THE RTPP THEN USE CHANNEL 1 S CLA IAC /+1 S CLA S EXADR C C LOAD 1 S CLA IAC /AC<--1 S EXOUT C S TAD \ISTABILIZE S CIA S A, ISZ CNTRA S JMP A S TAD CNTRB S MQL S ISZ CNTRB S JMP A C C C [3] SYNC WITH CHANNEL 3 ICHAN=3 S \300, JMS SAMPLE S TAD \IZ /IF > 0 THEN GET OUT ELSE KEEP LOOKING S SPA CLA S JMP \300 /CONTINUE LOOKING C C C [4] GET 1024 SAMPLE POINTS ICHAN = 2 S \40, JMS SAMPLE S TAD \IZ S DCAI 11 /SAVE IN IDATA BUFFER S ISZ 12 /1024 COUNTER S JMP \40 /NOT YET C C OPEN THE SHUTTER AND THEN TAKE THE SCAN DATA S CLA S EXOUT C C WAIT A FEW SECONDS TO ALLOW THE RSS TO STABILIZE S TAD \ISTABILIZE S CIA S DCA CNTRB S B, ISZ CNTRA S JMP B S TAD CNTRB S MQL S ISZ CNTRB S JMP B C C C [4.1] SET UP POINTER AND COUNTER S TAD (-D1024 S DCA 12 C SETUP AUTOINDEX PTR S CLA CMA C S TAD PIDATA S DCA 11 /AUTOINDEX REGISTER POINTER C C C [4.2] SYNC WITH CHANNEL 3 ICHAN=3 S \30, JMS SAMPLE S TAD \IZ /IF > 0 THEN GET OUT ELSE KEEP LOOKING S SPA CLA S JMP \30 /CONTINUE LOOKING C C C [4.3] GET 1024 SAMPLE POINTS S \400, JMS SAMPLE S TAD \IZ S DCAI 11 /SAVE IN IDATA BUFFER S ISZ 12 /1024 COUNTER S JMP \400 /NOT YET C C [5] DONE, PRINT DATA WRITE(3,502) 502 FORMAT('1') C DO 500 I=1,1024 S CPAGE 3 S JMS TTYCTL S JMP \200 /EXIT C IRESLT(I)=IDATA(I)-ICAL(I) WAVELENGTH=BASELINE+FLOAT(I)*CALIBRATION 500 WRITE(3,501)WAVELENGTH,IRESLT(I) 501 FORMAT(F9.3,5X,I6) GOTO 200 C C C ********************************************* C *SUBROUTINE S A M P L E * C ********************************************* C SUBROUTINE SAMPLE SAMPLES THE A/D CHANNEL C IN ICHAN AND PUT THE RESULT IN IZ. C S CPAGE 3 S RSAMPLE, JMP I SAMPLE S SAMPLE, 0 /ENTRY C [AD.1] SET UP THE CHANNEL WHICH IS PASSED C THROUGH ICHAN. S ADCL S TAD \ICHAN /CHANNEL # S AND (0017 /ONLY 0 TO 17 S ADLM /LOAD THE MUX SELECTOR C C C [AD.2] START THE A/D S ADST S ADFIN,ADSK S JMP ADFIN /NOT FINISHED. C C C [AD.3] GET THE DATA S ADRB S TAD (1000 /ADD +512 SO -1 TO +1 VDC ==>[0:1777] S DCA \IZ S JMP RSAMPLE C C C ************************************************************ C SUBROUTINE: T T Y C T L (INTERNAL) C ************************************************************ C S CPAGE 3 S RTTYC, JMP I TTYCTL S TTYCTL, 0000 /ENTRY C S KSF /ANYTHING TYPED S JMP NORMAL /NO, RETURN NORMALLY S KRB /GET TYPED CHARACTER S AND (0177 /TAKE CARE OF PARITY PROBLEMS S TAD (-17 /TEST FOR CTRL/O S SNA /SKIP IF NOT CTRL/O S JMP RTTYC /ABORT CALLING ROUTINE (ERROR RETURN) S TAD (-4 /TEST FOR CTRL/S [-17-4=-23(OCTAL)] S SZA CLA /SKIP IF CTRL/S S JMP NORMAL /NOT CTRL/O OR CTRL/S SO RETURN NORMALLY C S SLEEP,KSF /WAIT FOR CTRL/Q S JMP SLEEP /KEEP WAITING S KRB /READ CHARACTER S AND (0177 S TAD (-17 /IS IT A CTRL/O? S SNA /SKIP IF NOT S JMP RTTYC /YES, ABORT S TAD (-2 /TEST FOR CTRL/Q (-17-2=-21 OCTAL) S SZA CLA /SKIP IF SO S JMP SLEEP /NOPE, KEEP SLEEPING C S NORMAL,INC TTYCTL /INCREMENT RETURN ADDRESS FOR NORMAL RETURN S CLA /SAFETY VALVE S JMP RTTYC /RETURN C *****POINTER*** S PIDATA, \IDATA S PICAL, \ICAL S CNTRA, 0 S CNTRB, 0 END