.TITLE KW11-KT TIMER ROUTINE ; ; ; This set of routines allows you to get a time ; check on a running routine. This routine only ; interrupts every .1 second and will give you ; 10 microseconds accruacy. ; ; CALL INITCLK -- Starts the clock ; ; CALL STPCLK -- Stops the clock ; ; CALL GETIME -- Reads the time on the clock ; ; CALL TWIDDL -- A do nothing routine for testing purposes ; ; .GLOBL INITCLK,STPCLK,GETIME,TWIDDL KW11PCSR= 170404 KWSET = KW11PCSR+2 KWCNTR = 170430 KW11PVECT= 344 BR7 = 340 ; ERROR = 100000 DONE = 200 INTENABLE= 100 FIX = 40 UP = 20 DOWN = 0 REPEAT = 400 SINGLE = 0 ;RATES KHZ100 = 4 KHZ10 = 6 HZ60 = 16 EXTERNAL= 14 ; RUN = 1 .PSECT $100KHZ .SBTTL INITIALIZE THE CLOCK ; ; INITCLK:MOV #KWINT,KW11PVECT ; SET UP VECTOR MOV RUNIT,TIME ; INIT COUNTER CLR TIME+2 ; MOV #BR7,@#KW11PVECT+2 ; PRIORITY MOV UNITS,@#KWSET ; COUNT UP TO 0 AUTO REPEAT MOV #KHZ100+INTENABLE+REPEAT+RUN,@#KW11PCSR ; GO RETURN ; ; .SBTTL CLOCK INTERRUPT SERVICE ROUTINE ; ; KWINT: ADD RUNIT,TIME ; UPDATE TIME ADC TIME+2 ; DOUBLE PRECISION BIC #200,@#KW11PCSR ;RESET FLAG RTI ; ; .SBTTL STOP THE CLOCK ; ; STPCLK: CLR @#KW11PCSR ; STOP THE CLOCK RETURN ; ; .SBTTL GET THE CURRENT TIME ; ; GETIME: MOV 2(R5),R1 ;STORAGE ADDRESS MOV @#KWCNTR,R0 ;GET RESIDUE ADD RUNIT,R0 ;UN BIAS IT ADD R0,TIME ; ADJUST FOR RUNDOWN TIME ADC TIME+2 ; MOV TIME,(R1)+ ; MOV TO USER AVAILABLE TIME MOV TIME+2,(R1) ; DOUBLE PRECISION RETURN ; ; .SBTTL DO NOTHING TWIDDLE ROUTINE ; ; TWIDDL: MOV #10000.,INNER ; INNER LOOP LIMIT MOV #10.,OUTER ; OUTER LOOP LIMIT TWID: DEC INNER BNE TWID MOV #10000.,INNER ; RESET DEC OUTER ; OUTER LOOP BNE TWID ; UNTIL DONE RETURN ; ; .SBTTL CLOCK DATA ; ; .PSECT $100DAT INNER: .WORD 0 OUTER: .WORD 0 ; TIME: .WORD 0,0 TIMER: .WORD 0,0 UNITS: .WORD -10000. RUNIT: .WORD 10000. .END