$ROM(LARGE) $DEBUG NOSYMBOLS NOPAGING /*THIS PLM/51 PROGRAM IS THE CONTROL FOR THE VIKING ELECTRONICS UNIVERSAL PRODUCT TESTER. TEST SELECTION MODULE VERSION 1.0 19 MAY 1988 BY BILL HEIDEMAN */ TEST_SEL: DO; $NOLIST $INCLUDE(REG51.DCL) $INCLUDE(TSTR.EXT) $LIST /******************************************** * * * THESE ARE THE EXTERNAL PROCEDURES * * * ********************************************/ WAITM: PROCEDURE (LENGTH) EXTERNAL; DCL LENGTH BYTE; END WAITM; ACAII_TEST: PROCEDURE EXTERNAL; END ACAII_TEST; /******************************************** * * * THESE ARE THE INTERNAL PROCEDURES * * * ********************************************/ TONE_READ: PROCEDURE; DCL J BYTE; J=0; DO WHILE((J<>10) AND (FAULT=0)); EXP3_C=TTG_OUT(J); CALL WAITM(80); IF (EXP3_B AND 10H)=0 THEN FAULT=1; IF J=0 THEN DO; IF (EXP3_B AND 0FH)<>0AH THEN FAULT=1; END; ELSE DO; IF (EXP3_B AND 0FH)<>J THEN FAULT=1; END; J=J+1; ERROR_CODE=ERROR_CODE+1; END; END TONE_READ; DIAGS: PROCEDURE; DCL (I,MASK) BYTE; ERROR_CODE=0; FAULT=0; EXP2_C=40H; /* TURN ON 5 VOLTS */ DO I=0 TO 3; CALL WAITM(250); END; EXP2_C=20H; /* TURN ON 12VAC */ DO I=0 TO 3; CALL WAITM(250); END; EXP2_C=0; MASK=0FEH; I=0; DO WHILE((I<>8) AND (FAULT=0)); EXP0_A=MASK; IF EXP0_B<>MASK THEN FAULT=1; IF EXP4_C<>MASK THEN FAULT=1; I=I+1; MASK=ROL(MASK,1); ERROR_CODE=ERROR_CODE+1; END; MASK=0FEH; I=0; DO WHILE((I<>8) AND (FAULT=0)); EXP0_C=MASK; IF EXP1_A<>MASK THEN FAULT=1; I=I+1; MASK=ROL(MASK,1); ERROR_CODE=ERROR_CODE+1; END; MASK=0FEH; I=0; DO WHILE((I<>8) AND (FAULT=0)); EXP1_B=MASK; IF EXP1_C<>MASK THEN FAULT=1; I=I+1; MASK=ROL(MASK,1); ERROR_CODE=ERROR_CODE+1; END; MASK=0FEH; I=0; DO WHILE((I<>8) AND (FAULT=0)); EXP2_A=MASK; IF EXP2_B<>MASK THEN FAULT=1; I=I+1; MASK=ROL(MASK,1); ERROR_CODE=ERROR_CODE+1; END; MASK=0FEH; /* OPTO CHECK */ I=0; DO WHILE((I<>3) AND (FAULT=0)); EXP2_C=NOT(MASK); CALL TIME(5); IF (EXP4_B OR 0E3H)<>ROL(MASK,2) THEN FAULT=1; I=I+1; MASK=ROL(MASK,1); ERROR_CODE=ERROR_CODE+1; END; IF FAULT=0 THEN DO; /* TTD CHECK */ EXP4_A=3FH; EXP2_C=10H; EXP3_C=0; /* TURN OFF TONE AND RELAYS */ CALL WAITM(80); I=0; DO WHILE((I<>6) AND (FAULT=0)); EXP3_A=(I OR SHL(I,4)); CALL WAITM(80); IF (EXP3_B AND 10H)<>0 THEN FAULT=1; I=I+1; ERROR_CODE=ERROR_CODE+1; END; END; IF FAULT=0 THEN DO; EXP2_C=10H; EXP4_A=2; /* TEST TONES */ EXP3_A=1; /* OUT 1 IN 2 */ CALL WAITM(50); CALL TONE_READ; END; IF FAULT=0 THEN DO; EXP2_C=10H; EXP4_A=2; /* TEST LINES */ EXP3_A=1; /* OUT 1 IN 2 */ CALL WAITM(100); CALL TONE_READ; IF FAULT=0 THEN DO; EXP4_A=1; EXP3_A=10H; /* OUT 2 IN 1 */ CALL WAITM(100); CALL TONE_READ; END; END; IF FAULT=0 THEN DO; ERROR_CODE=99; EXP2_C=0; /* DISABLE DRIVERS */ EXP3_C=0; EXP4_A=0; END; END DIAGS; /******************************************** * * * THESE ARE THE PUBLIC PROCEDURES * * * ********************************************/ BOARD_TEST: PROCEDURE (SELECT) PUBLIC; DCL SELECT BYTE; IF SELECT>1 THEN SELECT=1; DO CASE SELECT; DO; /* CASE 0 */ EXP0_COM=82H; EXP1_COM=99H; EXP2_COM=82H; EXP3_COM=82H; EXP4_COM=8BH; CALL DIAGS; END; DO; /* CASE 1 */ CALL ACAII_TEST; END; END; END BOARD_TEST; END TEST_SEL;