FTN4,L SUBROUTINE RFSU(IUNIT,AMHZ,AKHZ,ALEVL), +09580-16277 1926 790316 C------------------------------------------------------------------- C C RELOC. 09580-16277 C SOURCE 09580-18277 C C R.UNTALAN MARCH 16,1979 C C C HP 92425A TEST SYSTEM SOFTWARE IS THE PROPRIETARY C MATERIAL OF THE HEWLETT-PACKARD COMPANY. USE AND C DISCLOSURE THEREOF ARE RESTRICTED BY WRITTEN AGREEMENT. C C (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. C ALL RIGHTS RESERVED. NO PART OF THIS PROGRAM C MAY BE PHOTOCOPIED, REPRODUCED OR TRANSLATED C TO ANOTHER PROGRAM LANGUAGE WITHOUT THE PRIOR C WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. C C------------------------------------------------------------------- DIMENSION IERMS(5) DATA IERMS/10,4,2HRF,2HSU / IERMS = 10 ISTN = ISN(DUM) LU = LUDV(ISTN,19,IUNIT) LUIB=IBLU0(LU) IF(LU.LE.0.OR.LUIB.LE.0) GOTO 800 10 CALL XFSU(LUIB,LU,IERMS,IUNIT,AMHZ,AKHZ,ALEVL) IF(IERMS.NE.0) GOTO 800 20 RETURN C C 800 CALL ERROR(IERMS,IERMS(2)) RETURN END SUBROUTINE XFSU(LUIB,LRFU,IERR,IUNIT,AMHZ,AKHZ,ALEVL), +09580-16277 1926 790316 C C C C C THIS DEVICE SUBROUTINE PROGRAMS THE 8672A C SYNTHESIZED SIGNAL GENERATOR TO A DESIRED FREQUENCY C AND OUTPUT LEVEL.. HOWEVER, IT IS NECESSARY TO MAKE C ANOTHER CALL (RFMOD) TO ESTABLISH RF(ON/OFF),NORMAL OR C OVERANGE,AND LEVELING CONTROL. C C C ENTER RFSU(I,R,R,R) IN BASIC TABLES C C C C CALL XFSU(LRFU,IERR,MHZ,KHZ,LEVL) C WHERE: C LRFU = LU 0F HP8672A SYNTH. SIG. GEN C C MHZ = FREQUENCY IN MEGAHERTZ C 2000 MHZ TO 18600 MHZ C C KHZ = FREQUENCY LOHERTZ C -999,999 KHZ TO +999,999 KHZ C C LEVL = OUTPUT LEVEL IN DBM C +3DBM TO -120 DBM C C C NOTE: TOTAL FREQUECY SETTING IS EQUAL TO THE ALGEBRAIC SUM C OF MHZ AND KHZ. EXAMPLE : MHZ=2010 AND KHZ=-9,998 C THEN TOTAL FREQUENCY SETTING EQUAL 2,000,002 KHZ. C C C NOTE: TO PROGRAM UNIT TO LOCAL SET MHZ AND KHZ TO ZERO. C EXAMPLE: CALL RFSU(U,0,0,L) C C C IERR = 5 ELEMENT ERROR ARRAY C IERR(1) = ERROR CODE C 0 = NO ERROR C 1 = PARAMETER ERROR C C ERROR MESSAGES WHICH PERTAIN TO THE HPIB C C 9 = I/O CALL REJECTED C 10 = LU NOT ASSIGNED TO HPIB DEVICE OR TO STATION. C 11 - DMA INPUT REQUEST PREMATURELY TERMINATED C 12 - I/O DEVICE TIME OUT C 13 - IFC (INTERFACE CLEAR) DETECTED DURING I/O REQUEST C 14 - SRQ SERVICE ABORTED C 15 - NON-EXISTENT ALARM PROGRAM C 16 - ILLEGAL CONTROL REQUEST C 17 - EQT EXTENSION AREA FULL, NO NEW DEVICE MAY BE ADDED ON LINE C C IERR(2) - IERR(4) = DEVICE SUBROUTINE NAME C C C DIMENSION IERMS(5),ILBUF(3),MSTR(10),KSTR(10),IFREQ(10) DIMENSION IERR(5),ISTR(4),IREG(2),ICBFR(3),IALRM(5) EQUIVALENCE(REG,IREG,IA),(IREG(2),IB) DATA IALRM/5,2HDV,2HIN,2HT / C C C C DISABLE (SRQ) ALARM SERVICE C CALL SRQ(LRFU,17) C C **INITIALIZE ERROR CODE IERR=0 C C C CHECK IF LOCAL SELECTED C IF(AMHZ+AKHZ.NE.0.) GOTO 111 C C C SET UNIT TO LOCAL CONTROL C C OUTPUT CODE UNL,UNT,LISTEN ADDRESS AND GTL C C JCNT=0 C C DO A DUMMY CALL TO 8672 C TO UPDATE EQT WORD 4 C CALL EXEC(100002B,10000B+LRFU,IFREQ,JCNT,IDUMY,0) GOTO 8800 C C C PICK UP SUBCHANNEL # FROM EQT WORD 4 C AND DETERMINE ASCII LISTEN ADDRESS C 222 ICODE=13 CALL EXEC(ICODE,LRFU,ISTA1,ISTA2,ISTA3) C ISUB=IAND(3700B,ISTA2)*4B ISUB=ISUB+20000B C ICBFR(1)=2H-? ICBFR(2)=ISUB+1 C C CALL EXEC(100002B,10000B+LUIB,IFREQ,JCNT,ICBFR,2) GOTO 8800 1000 CALL ABREG(IA,IB) IF(IB.LT.0) GOTO 8900 C C GOTO 800 C C C C C CHECK PARAMETERS 111 IF(AMHZ.LT.2000.0.OR.AMHZ.GT.18599.0) GOTO 8000 IF(ABS(AKHZ).GT.999.999E3) GOTO 8000 IF(ALEVL.LT.-120.0 .OR. ALEVL .GT. 3.0) GOTO 8000 C C C C C C C BLANK OUTPUT BUFFER C 5 DO 10 I=1,10 IFREQ(I)=2H MSTR(I)=2H 10 KSTR(I)=2H ISBFR=0 C Q1000=1000 MHZ1=INT(AMHZ) BKHZ1=FLOAT(MHZ1) FKHZ1=(Q1000*AMHZ)-(Q1000*BKHZ1) MHZ2=INT(AKHZ/Q1000) CMHZ2=FLOAT(MHZ2) FKHZ2=AKHZ-(CMHZ2*Q1000) C C C SET PREFIX "Q" FOR 1GHZ RANGE IFREQ(1)=2H Q C C CALL PSUM(MHZ1,FKHZ1,MHZ2,FKHZ2,MHZS,FKHZS) C C C CHECK IF 18,600,000 KHZ< TOTAL FREQ.<= 2000 KHZ C IF(MHZS.GE.18600) GOTO 8000 IF (MHZS.LT.2000) GOTO 8000 C C C CHECK IF FREQUENCY > 10GHZ ,IF SO THEN CHANGE PREFIX TO "P" C IF(MHZS.GE.10**4)IFREQ(1)=2H P C C C CONVERT MHZS AND FKHZS TO ASCII AND STORE IT IN OUTPUT BUFFER C IKHZS=INT(FKHZS) C C CALL ASCII(MSTR,MHZS) CALL F2A(FKHZS,KSTR) C C C SET INDEX COUNTER M=4 IF(MHZS.LT.10**4)M=3 C C DO 50 I=2,M IFREQ(I)=MSTR(I) 50 IFREQ(I-1+M)=KSTR(I) C C C INSERT ASCII "U" (100KHZ RANGE) IF NECESSARY C IF(M.EQ.4) IFREQ(4)=IFREQ(4)+125B C C KFREQ=IFREQ(2+M) C C IF(FKHZS.GE.100.)GOTO 70 C C C INSERT LEADING ZERO IN HUNDREDS PLACE AND TENS PLACE C C IFREQ(2+M)=(KFREQ/2**8)+30000B IFREQ(3+M)=KFREQ*2**8 IF(FKHZS.GE.10.) GOTO 70 IFREQ(2+M)=30060B IFREQ(3+M)=IAND(KFREQ,177400B) C C C CONVERT DBM SETTING TO EQUIVALENT ATTENUATION C 70 L=ABS(ALEVL-3.) C C C C C C C DETERMINE PROPER 10DB AND 1DB STEP ATTENUATOR C C OUTPUT PROGRAMMED PROGRAMMED C LEVEL 10DB ATTEN. 1DB ATTEN. C ------------------ --------------- ------------ C 3DBM TO -10DBM 0 0,1,2,3...9,:,;,<,= C -11DBM TO -20DBM 1 4,5,6...9,:,;,<,= C -21DBM TO -30DBM 2 4,5,6...9,:,;,<,= C . . . C . . . C . . . C . . . C -91DBM TO -100DBM 9 4,5,6...9,:,;,<,= C -101DBM TO -110DBM : (10) 4,5,6...9,:,;,<,= C -111DBM TO -120DBM ; (11) 4,5,6...9,:,;,<,= C C ------------------------------------------------------- C DO 100 I=1,12 MAX=(I*10)+3 IF(L.LE.MAX) GOTO 200 100 CONTINUE 200 IFACT=I-1 ITENS=IFACT+60B ILBUF(1)=45400B+ITENS IUNITS=L-(IFACT*10) ILBUF(2)=46060B+IUNITS C C C C **TRANSFER LEVEL SETTING INTO OUTPUT BUFFER C IFREQ(4+M)=ILBUF(1) IFREQ(5+M)=ILBUF(2) IFREQ(3+M)=2HZ1 C C PROGRAM REMOTE ENABLE C 300 CALL EXEC(100003B,1600B+LUIB) GOTO 8800 600 CALL ABREG(IA,IB) IF(IB.LT.0) GOTO 8900 C C C OUPUT FREQUENCY AND LEVEL SETTING C CALL REIO(100002B,2000B+LRFU,IFREQ(1),10,IDUMY,0) GOTO 8800 700 CALL ABREG(IA,IB) IF(IB.LT.0) GOTO 8900 C C C ARM SERVICE REQUEST(SRQ) C CALL SRQ(LRFU,16,IALRM) C C C NORMAL EXIT C 800 RETURN C C C C ERROR EXIT C C 8000 IERR=1 GOTO 9000 C 8800 IERR=9 GOTO 9000 8900 IERR=IAND(IREG,377B)+11 9000 IERR(2)=4 IERR(3)=2HRF IERR(4)=2HSU IERR(5)=2H RETURN END C C C C SUBROUTINE PSUM(MHZ1,FKHZ1,MHZ2,FKHZ2,MHZS,FKHZS), +09580-16277 1926 790316 C PSUM: (DOUBLE) PRECISION SUM (OR DIFFERENCE) C C************************************************* C* C* C* SUBROUTINE PSUM CALCULATES THE DOUBLE-PRECISION SUM C* (MHZS,FKHZS) OF TWO DOUBLE-PRECISION FREQUENCIES, C* (MHZ1,FKHZ1) AND (MHZ2,FKHZ2). ONE FREQUENCY MAY BE C* NEGATIVE (E.G. BOTH PARTS NEGATED) TO ALLOW SUM TO C* ALSO PERFORM SUBTRACTION. THE SUM MUST BE POSITIVE, C* HOWEVER. C* C* C********************************************************* C C C C C **** DEFINE DECIMAL CONSTANT. C D1000=1000 C C **** CALCULATE SUM C MHZS=MHZ1+MHZ2 FKHZS=FKHZ1+FKHZ2 C C C **** TEST IF CARRY NEEDED C IF (FKHZS-D1000)600,500 C C C **** GENERATE CARRY C 500 MHZS=MHZS+1 FKHZS=FKHZS-D1000 RETURN C C C **** IS FKHZS NEGATIVE? C 600 IF (FKHZS)700,9000 C C C **** GENERATE CARRY C 700 MHZS=MHZS-1 FKHZS=D1000+FKHZS C C 9000 RETURN END END$