C C THIS PROGRAM INITIALIZES AN 8253 INTERVAL TIMER ON AN iSBC 86/12A C BOARD TO INTERRUPT THE HOST PROCESSOR EVERY 10 MILLISECONDS.FIRST C THE PROGRAM INITIALIZES THE TIMER AT CONTROL PORT(CONTPT) WITH THE C CONTROL WORD(CONTWD) WHICH IS 030H. THIS SELECTS COUNTER 0, READ/LOAD C LOW ORDER BYTE THEN HIGH ORDER BYTE, INTERRUPT ON TERMINAL COUNT, AND C ACCEPTS COUNT IN BINARY. THE PROGRAM NEXT LOADS THE COUNTER VALUE C WITH 10 MILLISECONDS. (THE iSBC 86/12A CLOCK RATE IS 1.23MHZ). THE C INTERRUPT ROUTINE(TIMER) RELOADS THE COUNT REGISTER(CNTREG) WITH 10 C MILLISECONDS, SO THAT AN INTERRUPT IS GENERATED EVERY 10 MILLISECONDS. C PROGRAM PROG3 INTEGER*1 CONTPT,CONTWD,CNTLOW,CNTHI,CNTREG EXTERNAL TIMER CALL SETINT (6,TIMER) CONTPT = #0D6H CONTWD = #030H CALL OUTPUT (CONTPT,CONTWD) CNTREG = #0D0H CNTLOW = #0CH CNTHI = #030H C C LOAD THE LOW ORDER COUNTER BYTE. C CALL OUTPUT (CNTREG,CNTLOW) C C LOAD THE HIGH ORDER COUNTER BYTE. C CALL OUTPUT (CNTREG,CNTHI) C C ALWAYS TRUE TEST TO CONTINUE INTERRUPTS FOREVER. C 5 IF (1.NE.1) GO TO 10 GO TO 5 10 END C C THIS SUBROUTINE SERVICES INTERRUPT 6 WHEN IT OCCURS, AND RELOADS C THE COUNTER VALUE WITH 10 MILLISECONDS. TO MAKE THE PROGRAM MORE C USEFUL, ADD CODE TO TAKE ACTION BEFORE STARTING THE NEXT INTERVAL C $INTERRUPT SUBROUTINE TIMER INTEGER*1 CNTREG,CNTLOW,CNTHI CNTREG = #0D0H CNTLOW = #0CH CNTHI = #030H CALL OUTPUT (CNTREG,CNTLOW) CALL OUTPUT (CNTREG,CNTHI) RETURN END